#!/bin/bash # Deklarix — postinst set -e SERVICE_USER="deklarix" CONFIG_DIR="/etc/deklarix" DATA_DIR="/var/lib/deklarix" LOG_DIR="/var/log/deklarix" case "$1" in configure) # ─── apt-Quelle einrichten/aktualisieren ──────────────────── # Gleiches Muster wie enconf: Gitea-Debian-Registry, Suite = # OS-Codename, Komponente = Kanal (aktuell nur "testing"). Ein # bereits gewählter Kanal bleibt über Upgrades hinweg erhalten. mkdir -p /etc/apt/keyrings curl -fsSL "https://git.netcell-it.de/api/packages/projekte/debian/repository.key" \ -o /etc/apt/keyrings/deklarix-gitea.asc 2>/dev/null || true if [ -f /etc/apt/keyrings/deklarix-gitea.asc ]; then DX_CODENAME="$(. /etc/os-release 2>/dev/null; echo "${VERSION_CODENAME:-}")" case "$DX_CODENAME" in bookworm|trixie) ;; *) DX_CODENAME="trixie" ;; esac DX_CHANNEL="$(grep -oE 'projekte/debian[[:space:]]+[a-z]+[[:space:]]+(stable|testing)' \ /etc/apt/sources.list.d/deklarix.list 2>/dev/null | awk '{print $NF}' | head -1)" case "$DX_CHANNEL" in stable|testing) ;; *) DX_CHANNEL="testing" ;; esac echo "deb [signed-by=/etc/apt/keyrings/deklarix-gitea.asc] https://git.netcell-it.de/api/packages/projekte/debian $DX_CODENAME $DX_CHANNEL" \ > /etc/apt/sources.list.d/deklarix.list fi # ─── System-User + Verzeichnisse ──────────────────────────── if ! id -u "$SERVICE_USER" >/dev/null 2>&1; then useradd -r -s /usr/sbin/nologin -d "$DATA_DIR" "$SERVICE_USER" fi mkdir -p "$DATA_DIR" "$LOG_DIR" "$CONFIG_DIR" chown "$SERVICE_USER:$SERVICE_USER" "$DATA_DIR" "$LOG_DIR" # ─── Konfiguration ─────────────────────────────────────────── # Erstinstall: Vorlage kopieren, nicht scharf schalten (Secrets # fehlen noch). Upgrade: bestehende deklarix.env bleibt unberührt. if [ ! -f "$CONFIG_DIR/deklarix.env" ]; then cp "$CONFIG_DIR/deklarix.env.example" "$CONFIG_DIR/deklarix.env" chmod 640 "$CONFIG_DIR/deklarix.env" chown "root:$SERVICE_USER" "$CONFIG_DIR/deklarix.env" fi # ─── Healing: fehlende Variablen aus älteren Installationen ─── # deklarix.env wird bei Upgrades nie überschrieben (Secrets/ # Anpassungen bleiben erhalten) — Variablen, die erst nach einer # Erstinstallation dazugekommen sind, fehlen dort sonst schlicht # und lassen den Dienst mit einem für den Admin überraschenden # Fehler abbrechen (z. B. RULES_DIR fehlt -> main.go sucht Regeln # im falschen Verzeichnis, obwohl DATABASE_URL längst gesetzt # war). Bekannte Variablen mit unkritischem Default werden hier # ergänzt, falls sie fehlen — nie überschrieben, nur angehängt. if [ -f "$CONFIG_DIR/deklarix.env" ]; then grep -q '^RULES_DIR=' "$CONFIG_DIR/deklarix.env" || \ echo "RULES_DIR=/usr/share/deklarix/rules" >> "$CONFIG_DIR/deklarix.env" fi systemctl daemon-reload 2>/dev/null || true systemctl enable deklarix.service >/dev/null 2>&1 || true # Nicht blind starten — ohne gesetzte DATABASE_URL würde der Dienst # nur in eine Restart-Schleife laufen (main.go bricht sonst bewusst # mit log.Fatal ab, siehe CLAUDE.md "keine stillen Fallbacks"). Die # Vorlage liefert sie auskommentiert aus — ein Treffer hier bedeutet # also wirklich "vom Admin gesetzt", nicht den Platzhalter. if grep -qE '^DATABASE_URL=.+' "$CONFIG_DIR/deklarix.env" 2>/dev/null; then systemctl restart deklarix.service else echo "" echo " → Deklarix installiert, aber noch nicht gestartet." echo " DATABASE_URL in $CONFIG_DIR/deklarix.env setzen, dann:" echo " systemctl start deklarix" echo "" fi ;; esac exit 0