Il container è la sola forma di esecuzione (ADR-0008): Dockerfile multi-stage con i test dentro la build, entrypoint con TZ e PUID/PGID, compose per le prove locali, healthcheck via --health. Il template Unraid installa dall'immagine sul registro di Gitea con l'icona servita dal repository (D-29). La catena di rilascio pubblica la cartella portabile, costruisce l'immagine, tagga a pacchetto pronto e spinge l'immagine sul registro con lo stesso token della release; l'installatore Windows non ha più senso e viene tolto. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
36 lines
1.2 KiB
Bash
36 lines
1.2 KiB
Bash
#!/bin/sh
|
|
# Encelado — entrypoint del container.
|
|
#
|
|
# 1. Fuso orario da TZ (tzdata è nell'immagine).
|
|
# 2. Utente e gruppo da PUID/PGID (default 99/100, i «nobody:users» di Unraid):
|
|
# /config e /data vengono riassegnati a quell'utente, così i file scritti dal
|
|
# bot sono leggibili dalla share appdata senza giochi di permessi.
|
|
# 3. exec del processo finale con gosu: PID 1 è dotnet, SIGTERM arriva a lui.
|
|
#
|
|
# Con PUID=0 il bot resta root: sconsigliato, ma ammesso per il debug.
|
|
set -eu
|
|
|
|
PUID="${PUID:-99}"
|
|
PGID="${PGID:-100}"
|
|
|
|
if [ -n "${TZ:-}" ] && [ -f "/usr/share/zoneinfo/${TZ}" ]; then
|
|
ln -sf "/usr/share/zoneinfo/${TZ}" /etc/localtime
|
|
echo "${TZ}" > /etc/timezone
|
|
fi
|
|
|
|
if [ "${PUID}" != "0" ]; then
|
|
if ! getent group "${PGID}" >/dev/null 2>&1; then
|
|
groupadd -g "${PGID}" encelado
|
|
fi
|
|
if ! getent passwd "${PUID}" >/dev/null 2>&1; then
|
|
useradd -r -o -u "${PUID}" -g "${PGID}" -M -d /data -s /usr/sbin/nologin encelado
|
|
fi
|
|
mkdir -p /config /data
|
|
chown -R "${PUID}:${PGID}" /config /data
|
|
echo "encelado: avvio come uid ${PUID} gid ${PGID}, fuso ${TZ:-UTC}"
|
|
exec gosu "${PUID}:${PGID}" "$@"
|
|
fi
|
|
|
|
echo "encelado: avvio come root (PUID=0), fuso ${TZ:-UTC}"
|
|
exec "$@"
|