#!/bin/bash # Laeuft als unprivilegierter User "mirror" (siehe entrypoint.sh, der als # root die Verzeichnisrechte setzt und dann per setpriv hierher wechselt). set -euo pipefail : "${GPG_NAME:?GPG_NAME muss gesetzt sein}" : "${GPG_EMAIL:?GPG_EMAIL muss gesetzt sein}" : "${SYNC_INTERVAL_SECONDS:=21600}" mkdir -p "$GNUPGHOME" chmod 700 "$GNUPGHOME" echo "allow-loopback-pinentry" > "$GNUPGHOME/gpg-agent.conf" echo "pinentry-mode loopback" > "$GNUPGHOME/gpg.conf" PASSPHRASE_FILE=/run/secrets/gpg_passphrase if [ -z "${GPG_PASSPHRASE:-}" ] && [ ! -f "$PASSPHRASE_FILE" ]; then PASSPHRASE_FILE="" fi # GPG-Key nur beim allerersten Start erzeugen. Das gnupg-Home liegt im # bind-gemounteten ./gpg-Ordner neben der docker-compose.yml - der Key (und # damit der Public Key, den alle Clients einmalig vertrauen) bleibt ueber # Container-Neustarts/-Updates hinweg gleich UND ist direkt auf dem Host # sichtbar/sicherbar, statt in einem anonymen Docker-Volume zu stecken. if ! gpg --batch --list-secret-keys "$GPG_NAME" >/dev/null 2>&1; then echo "[entrypoint] Erzeuge neuen Signing-Key fuer '$GPG_NAME <$GPG_EMAIL>' ..." KEYPARAMS=$(mktemp) { echo "%echo Generating mirror signing key" echo "Key-Type: RSA" echo "Key-Length: 4096" echo "Name-Real: $GPG_NAME" echo "Name-Email: $GPG_EMAIL" echo "Expire-Date: 0" if [ -n "$PASSPHRASE_FILE" ]; then echo "Passphrase: $(cat "$PASSPHRASE_FILE")" else echo "%no-protection" fi echo "%commit" } > "$KEYPARAMS" gpg --batch --gen-key "$KEYPARAMS" rm -f "$KEYPARAMS" else echo "[entrypoint] Signing-Key existiert bereits, wird wiederverwendet." fi mkdir -p /srv/dnf gpg --batch --yes --armor --export "$GPG_NAME" > /srv/dnf/RPM-GPG-KEY-mirror echo "[entrypoint] Public Key nach /srv/dnf/RPM-GPG-KEY-mirror exportiert." term_handler() { echo "[entrypoint] Beende nach aktuellem Sync-Lauf ..." exit 0 } trap term_handler SIGTERM SIGINT while true; do /usr/local/bin/sync.sh || echo "[entrypoint] sync.sh ist mit Fehler beendet, naechster Versuch in ${SYNC_INTERVAL_SECONDS}s" sleep "$SYNC_INTERVAL_SECONDS" & wait $! done