extrepo-data aktualisiert
This commit is contained in:
Executable
+94
@@ -0,0 +1,94 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Richtet das inmedias-Paketrepository auf diesem Rechner ein.
|
||||
# ERZEUGT VON bin/gen-extrepo -- nicht von Hand aendern.
|
||||
#
|
||||
# curl -fsSL https://gitea.inmedias.it/apt/extrepo-data/raw/branch/main/bootstrap.sh | sudo bash
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
EXTREPO_NAME="inmedias"
|
||||
EXTREPO_DATA_URL="https://gitea.inmedias.it/apt/extrepo-data/raw/branch/main"
|
||||
KEYRING="/etc/extrepo/keyring.gpg"
|
||||
|
||||
log() { printf '\033[1;34m==>\033[0m %s\n' "$*" >&2; }
|
||||
warn() { printf '\033[1;33m!!\033[0m %s\n' "$*" >&2; }
|
||||
die() { printf '\033[1;31mE:\033[0m %s\n' "$*" >&2; exit 1; }
|
||||
|
||||
[[ $EUID -eq 0 ]] || die "bitte als root ausfuehren (sudo)"
|
||||
|
||||
# --- 1. extrepo sicherstellen -------------------------------------------
|
||||
if ! command -v extrepo >/dev/null 2>&1; then
|
||||
log "installiere extrepo"
|
||||
apt-get update -qq
|
||||
apt-get install -y extrepo
|
||||
fi
|
||||
|
||||
# --- 2. Signing-Key in den extrepo-Keyring ------------------------------
|
||||
# extrepo prueft index.yaml gegen /etc/extrepo/keyring.gpg. Dieser Keyring ist
|
||||
# ein dpkg-Conffile: bei einem extrepo-Update fragt dpkg, ob die lokale Version
|
||||
# behalten werden soll -- dann "behalten" (bzw. bootstrap.sh erneut ausfuehren).
|
||||
SIGNING_KEY_ASC="$(cat <<'KEYEOF'
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
mDMEanl6QBYJKwYBBAHaRw8BAQdAyVwIFGTHoa63VaZOYQh4+SSkRLV3suXLvDzI
|
||||
KAOPbsS0M2lubWVkaWFzIGV4dHJlcG8tZGF0YSBzaWduaW5nIGtleSA8c2tvQGlu
|
||||
bWVkaWFzLml0PoiTBBMWCgA7FiEEp2OVqHaXIUhlP/6QxHbpm8q/E4kFAmp5ekAC
|
||||
GwMFCwkIBwICIgIGFQoJCAsCBBYCAwECHgcCF4AACgkQxHbpm8q/E4n5UAEAsZqE
|
||||
k0+whBaOGAtFKyokr4E7yFpMApHbsuO+oK6dgnEBAIJzVZk2eEEYT3f6iVnpCwKm
|
||||
49EOLuZr1tD/aLSRidMG
|
||||
=FMKn
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
KEYEOF
|
||||
)"
|
||||
|
||||
FPR_EXPECTED="A76395A876972148653FFE90C476E99BCABF1389"
|
||||
|
||||
if gpg --no-default-keyring --keyring "$KEYRING" --list-keys "$FPR_EXPECTED" >/dev/null 2>&1; then
|
||||
log "Signing-Key bereits im extrepo-Keyring"
|
||||
else
|
||||
log "importiere Signing-Key in ${KEYRING}"
|
||||
cp -a "$KEYRING" "${KEYRING}.bak-$(date +%Y%m%d%H%M%S)"
|
||||
tmpkey="$(mktemp)"
|
||||
printf '%s\n' "$SIGNING_KEY_ASC" | gpg --dearmor > "$tmpkey"
|
||||
cat "$tmpkey" >> "$KEYRING"
|
||||
rm -f "$tmpkey"
|
||||
gpg --no-default-keyring --keyring "$KEYRING" --list-keys "$FPR_EXPECTED" >/dev/null 2>&1 \
|
||||
|| die "Import fehlgeschlagen"
|
||||
fi
|
||||
|
||||
# --- 3. Passt die extrepo-Konfiguration zu dieser Distribution? ---------
|
||||
# extrepo laedt <url>/<dist>/<version>/index.yaml; dist und version kommen
|
||||
# ausschliesslich aus /etc/extrepo/config.yaml.
|
||||
dist="$(sed -n 's/^dist:[[:space:]]*//p' /etc/extrepo/config.yaml | head -1 | tr -d '"')"
|
||||
vers="$(sed -n 's/^version:[[:space:]]*//p' /etc/extrepo/config.yaml | head -1 | tr -d '"')"
|
||||
log "extrepo-Konfiguration: dist=${dist} version=${vers}"
|
||||
|
||||
idx_url="${EXTREPO_DATA_URL}/${dist}/${vers}/index.yaml"
|
||||
code="$(curl -s -o /tmp/inmedias-index.yaml -w '%{http_code}' "$idx_url")"
|
||||
if [[ "$code" != "200" ]]; then
|
||||
die "Kein Index unter ${idx_url} (HTTP ${code}).
|
||||
Setze dist/version in /etc/extrepo/config.yaml auf eine unterstuetzte Kombination
|
||||
(z.B. dist: debian / version: trixie) und starte erneut."
|
||||
fi
|
||||
|
||||
# Warnen, wenn die ausgelieferte Suite nicht zum echten Codename passt.
|
||||
. /etc/os-release
|
||||
real_code="${VERSION_CODENAME:-${UBUNTU_CODENAME:-}}"
|
||||
idx_suite="$(sed -n 's/^[[:space:]]*Suites:[[:space:]]*//p' /tmp/inmedias-index.yaml | head -1)"
|
||||
if [[ -n "$real_code" && -n "$idx_suite" && "$real_code" != "$idx_suite" ]]; then
|
||||
warn "Dieses System ist ${ID} ${real_code}, das Repo liefert hier aber die Suite '${idx_suite}'."
|
||||
warn "Grund: extrepo leitet den Pfad aus /etc/extrepo/config.yaml ab, nicht aus /etc/os-release."
|
||||
warn "Fuer uv ist das unkritisch (ein Binary fuer alle Suites). Wenn du exakt"
|
||||
warn "${real_code} willst, setze version: ${real_code} in /etc/extrepo/config.yaml."
|
||||
fi
|
||||
rm -f /tmp/inmedias-index.yaml
|
||||
|
||||
# --- 4. Repository aktivieren -------------------------------------------
|
||||
log "aktiviere Repository '${EXTREPO_NAME}'"
|
||||
extrepo --url "$EXTREPO_DATA_URL" enable "$EXTREPO_NAME"
|
||||
|
||||
log "apt update"
|
||||
apt-get update
|
||||
|
||||
log "fertig. Beispiel: apt-get install uv"
|
||||
Reference in New Issue
Block a user