78 lines
2.1 KiB
Bash
78 lines
2.1 KiB
Bash
#!/bin/sh
|
|
# stream-recorder - Container-Entrypoint
|
|
#
|
|
# Läuft der Container als root, werden UID/GID des Users "app" an PUID/PGID
|
|
# angepasst, die Datenverzeichnisse übernommen und der Prozess anschließend
|
|
# ohne Root-Rechte gestartet. Läuft der Container bereits als Nicht-root
|
|
# (z.B. "user:" in docker-compose), wird der Befehl direkt ausgeführt.
|
|
set -eu
|
|
|
|
PUID="${PUID:-1000}"
|
|
PGID="${PGID:-1000}"
|
|
DATA_DIR="${DATA_DIR:-/app/data}"
|
|
RECORDING_ROOTS="${RECORDING_ROOTS:-/app/data/recordings:/recordings}"
|
|
|
|
log() {
|
|
echo "[entrypoint] $*"
|
|
}
|
|
|
|
# Nur Dateien/Verzeichnisse umschreiben, die noch nicht PUID:PGID gehören.
|
|
fix_owner() {
|
|
if [ -d "$1" ]; then
|
|
find "$1" \( ! -user "$PUID" -o ! -group "$PGID" \) \
|
|
-exec chown "$PUID:$PGID" {} + 2>/dev/null \
|
|
|| log "WARNUNG: Besitzrechte in $1 konnten nicht vollständig angepasst werden"
|
|
fi
|
|
}
|
|
|
|
if [ "$(id -u)" != "0" ]; then
|
|
exec "$@"
|
|
fi
|
|
|
|
case "$PUID" in
|
|
''|*[!0-9]*) log "FEHLER: PUID muss numerisch sein (aktuell: $PUID)"; exit 1 ;;
|
|
esac
|
|
case "$PGID" in
|
|
''|*[!0-9]*) log "FEHLER: PGID muss numerisch sein (aktuell: $PGID)"; exit 1 ;;
|
|
esac
|
|
|
|
if [ "$PUID" = "0" ]; then
|
|
log "WARNUNG: PUID=0 - Anwendung läuft als root"
|
|
exec "$@"
|
|
fi
|
|
|
|
# UID/GID des app-Users anpassen (-o erlaubt bereits vergebene IDs)
|
|
if [ "$(id -g app)" != "$PGID" ]; then
|
|
log "Setze GID von app auf $PGID"
|
|
groupmod -o -g "$PGID" app
|
|
fi
|
|
if [ "$(id -u app)" != "$PUID" ]; then
|
|
log "Setze UID von app auf $PUID"
|
|
usermod -o -u "$PUID" app
|
|
fi
|
|
|
|
mkdir -p "$DATA_DIR"
|
|
fix_owner "$DATA_DIR"
|
|
|
|
OLD_IFS="$IFS"
|
|
IFS=':'
|
|
for root in $RECORDING_ROOTS; do
|
|
IFS="$OLD_IFS"
|
|
if [ -n "$root" ]; then
|
|
fix_owner "$root"
|
|
fi
|
|
done
|
|
IFS="$OLD_IFS"
|
|
|
|
if [ -f "$DATA_DIR/config.yml" ]; then
|
|
chmod 600 "$DATA_DIR/config.yml" || log "WARNUNG: chmod 600 auf config.yml fehlgeschlagen"
|
|
fi
|
|
|
|
if ! command -v setpriv >/dev/null 2>&1; then
|
|
log "FEHLER: setpriv nicht gefunden (Paket util-linux) - Rechteabgabe nicht möglich"
|
|
exit 1
|
|
fi
|
|
|
|
export HOME=/tmp
|
|
exec setpriv --reuid="$PUID" --regid="$PGID" --init-groups "$@"
|