Dateien nach "mirror" hochladen

This commit is contained in:
2026-09-03 14:40:58 +02:00
parent 89a8f46b7c
commit aab58f5b6c
4 changed files with 778 additions and 0 deletions
+62
View File
@@ -0,0 +1,62 @@
#!/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