diff --git a/docker/sync.sh b/docker/sync.sh deleted file mode 100644 index 2383ec0..0000000 --- a/docker/sync.sh +++ /dev/null @@ -1,93 +0,0 @@ -#!/bin/bash -# Synct die Paket-Whitelist aus Git und lädt die selektierten Pakete -# (inkl. Abhängigkeiten) aus den jeweils angegebenen Fremd-Repos. -set -euo pipefail - -CONFIG_DIR=/etc/mirror -CONFIG_REPO_URL="${CONFIG_REPO_URL:?CONFIG_REPO_URL ist nicht gesetzt}" -CONFIG_REPO_BRANCH="${CONFIG_REPO_BRANCH:-main}" -PACKAGES_FILE="$CONFIG_DIR/packages.yaml" -DEST=/data/repo/rpms -TMP_REPO_DIR=/etc/yum.repos.d -LOCKFILE=/tmp/sync.lock - -exec 200>"$LOCKFILE" -if ! flock -n 200; then - echo "[sync] Ein anderer Sync-Lauf ist bereits aktiv, breche ab." - exit 0 -fi - -echo "[sync] $(date -Iseconds) Starte Sync-Lauf" - -# --- 1. Whitelist aus Git holen --------------------------------------- -mkdir -p "$CONFIG_DIR" - -if [ -n "${GIT_SSH_KEY_PATH:-}" ] && [ -f "${GIT_SSH_KEY_PATH:-}" ]; then - export GIT_SSH_COMMAND="ssh -i ${GIT_SSH_KEY_PATH} -o StrictHostKeyChecking=accept-new" -fi - -if [ -d "$CONFIG_DIR/.git" ]; then - git -C "$CONFIG_DIR" fetch --depth=1 origin "$CONFIG_REPO_BRANCH" - git -C "$CONFIG_DIR" reset --hard "origin/$CONFIG_REPO_BRANCH" -else - git clone --depth=1 --branch "$CONFIG_REPO_BRANCH" "$CONFIG_REPO_URL" "$CONFIG_DIR" -fi - -if [ ! -f "$PACKAGES_FILE" ]; then - echo "[sync] FEHLER: $PACKAGES_FILE nicht gefunden." - exit 1 -fi - -mkdir -p "$DEST" - -# --- 2. Pro Quelle: temporäres Repo aktivieren, Pakete gezielt ziehen -- -source_count=$(yq -o=json '.sources | length' "$PACKAGES_FILE") - -for i in $(seq 0 $((source_count - 1))); do - src=$(yq -o=json ".sources[$i]" "$PACKAGES_FILE") - name=$(echo "$src" | jq -r '.name') - baseurl=$(echo "$src" | jq -r '.baseurl') - gpgkey=$(echo "$src" | jq -r '.gpgkey // empty') - mapfile -t packages < <(echo "$src" | jq -r '.packages[]') - - if [ "${#packages[@]}" -eq 0 ]; then - echo "[sync] Quelle '$name': keine Pakete gelistet, überspringe." - continue - fi - - echo "[sync] Quelle '$name': ${#packages[@]} Paket(e) -> $baseurl" - - repofile="$TMP_REPO_DIR/tmp-${name}.repo" - { - echo "[tmp-${name}]" - echo "name=${name}" - echo "baseurl=${baseurl}" - echo "enabled=1" - if [ -n "$gpgkey" ]; then - echo "gpgcheck=1" - echo "gpgkey=${gpgkey}" - else - echo "gpgcheck=0" - fi - } > "$repofile" - - # Bei Fehlschlag (z.B. Paket nicht gefunden) diese Quelle nicht den - # gesamten Lauf abbrechen lassen, aber laut melden. - if ! dnf download --resolve --alldeps \ - --disablerepo='*' --enablerepo="tmp-${name}" \ - --destdir="$DEST" "${packages[@]}"; then - echo "[sync] WARNUNG: Download für Quelle '$name' teilweise fehlgeschlagen." - fi - - rm -f "$repofile" -done - -# --- 3. Alte Paketversionen aufräumen ----------------------------------- -echo "[sync] Räume veraltete Paketversionen auf" -dnf repomanage --old "$DEST" 2>/dev/null | xargs -r rm -f - -# --- 4. Repo-Metadaten neu erzeugen ------------------------------------- -echo "[sync] Aktualisiere Repo-Metadaten" -createrepo_c --update "$DEST" - -echo "[sync] $(date -Iseconds) Sync-Lauf abgeschlossen" \ No newline at end of file