Harden renovate runner: env-file, add-host, explicit DNS

Drei Issues beim Erstlauf gefunden und gefixt:

1. EAI_AGAIN: Renovate-Container konnte git.kaleschke.info nicht
   aufloesen. Analog zu Komodos extra_hosts mappen wir den Hostname
   per --add-host auf 192.168.178.58 (LAN-IP des Unraid-Hosts).
   Zusaetzlich --dns 1.1.1.1/8.8.8.8 fuer externe Image-Registries.

2. Token-Leak in ps und docker inspect: -e RENOVATE_TOKEN=... macht
   den Wert in Process-Listing sichtbar. Stattdessen --env-file mit
   einem 0600 tempfile unter $RENOVATE_STATE_DIR/.env, das nach dem
   Lauf via shred bzw. rm geloescht wird.

3. Doppelter rc=$? Block plus return innerhalb einer {}-Subshell
   waren Tot-Code; aufgeraeumt.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-05-29 20:04:24 +02:00
parent 30aa696e61
commit bdae014bff
+25 -6
View File
@@ -21,6 +21,11 @@ RENOVATE_TOKEN_FILE="${RENOVATE_TOKEN_FILE:-/mnt/user/appdata/secrets/renovate_t
RENOVATE_LOG_DIR="${RENOVATE_LOG_DIR:-/mnt/user/services/renovate/logs}"
RENOVATE_STATE_DIR="${RENOVATE_STATE_DIR:-/mnt/user/services/renovate/state}"
RENOVATE_CONFIG_FILE="${RENOVATE_CONFIG_FILE:-/mnt/user/services/homelab-infra/renovate.json}"
# Gitea sitzt hinter Traefik unter git.kaleschke.info; der WAN-Pfad geht
# ueber Public-IP -> FRITZBox. Vom Docker-Container aus loest der Standard-
# Resolver den Host moeglicherweise nicht auf (siehe `extra_hosts` im Komodo-
# Compose). Wir mappen direkt auf die LAN-IP des Unraid-Hosts.
GITEA_HOST_LAN_IP="${GITEA_HOST_LAN_IP:-192.168.178.58}"
if [ ! -r "$RENOVATE_TOKEN_FILE" ]; then
echo "Renovate token file missing or unreadable: $RENOVATE_TOKEN_FILE" >&2
@@ -48,18 +53,32 @@ LATEST_SYMLINK="$RENOVATE_LOG_DIR/latest.log"
echo "[renovate] log: $LOG_FILE"
echo
# Token wird ueber --env-file uebergeben, damit der Wert weder in
# `ps`-Ausgabe noch im docker inspect -Snapshot landet. Das Env-File
# liegt unter $RENOVATE_STATE_DIR/.env und wird mit 0600 angelegt.
ENV_FILE="$RENOVATE_STATE_DIR/.env"
umask 077
cat > "$ENV_FILE" <<EFEOF
RENOVATE_TOKEN=$(cat "$RENOVATE_TOKEN_FILE")
RENOVATE_CONFIG_FILE=/usr/src/app/config.json
RENOVATE_PLATFORM=gitea
RENOVATE_ENDPOINT=https://git.kaleschke.info/api/v1
LOG_LEVEL=${RENOVATE_LOG_LEVEL:-info}
EFEOF
chmod 600 "$ENV_FILE"
docker run --rm \
--name renovate-run \
--add-host "git.kaleschke.info:$GITEA_HOST_LAN_IP" \
--dns 1.1.1.1 \
--dns 8.8.8.8 \
-v "$RENOVATE_CONFIG_FILE":/usr/src/app/config.json:ro \
-v "$RENOVATE_STATE_DIR":/tmp/renovate \
-e RENOVATE_CONFIG_FILE=/usr/src/app/config.json \
-e RENOVATE_PLATFORM=gitea \
-e RENOVATE_ENDPOINT=https://git.kaleschke.info/api/v1 \
-e RENOVATE_TOKEN="$(cat "$RENOVATE_TOKEN_FILE")" \
-e LOG_LEVEL="${RENOVATE_LOG_LEVEL:-info}" \
--env-file "$ENV_FILE" \
"$RENOVATE_IMAGE" 2>&1
rc=$?
shred -u "$ENV_FILE" 2>/dev/null || rm -f "$ENV_FILE"
echo
echo "[renovate] finished rc=$rc"
exit $rc