#!/bin/bash # ============================================================================ # TESM-Lizenzserver — Update/Reinstall (Bootstrapper) # Lädt ein gepacktes Gitea-Release per HTTP herunter (kein "git clone" # nötig) und übergibt die eigentliche Installations-/Update-Logik an # install.sh aus dem Paket -- das erkennt selbstständig, ob unter # /srv/tesm-license schon eine Installation existiert, und aktualisiert # sie entsprechend (In-Place bei unverändertem Datenbank-Schema, sonst mit # automatischem Backup + Migrations-Sicherheitsnetz samt Rückroll- # Möglichkeit -- siehe install.sh für Details). # # Auszuführen als root auf dem Zielsystem: # sudo ./update.sh # Optional übersteuerbar (z.B. für eine bestimmte Version statt "latest"): # TESM_RELEASE_TAG=v1.0.0 sudo -E ./update.sh # Für ein privates Repo wird ein Zugriffstoken benötigt: # TESM_GITEA_USER=alientim TESM_GITEA_TOKEN= sudo -E ./update.sh # ============================================================================ set -e GITEA_BASE="${TESM_GITEA_BASE:-https://gitea.int.eertmoed.net}" REPO_OWNER="${TESM_REPO_OWNER:-alientim}" REPO_NAME="${TESM_REPO_NAME:-tesm-license}" RELEASE_TAG="${TESM_RELEASE_TAG:-latest}" GITEA_USER="${TESM_GITEA_USER:-}" GITEA_TOKEN="${TESM_GITEA_TOKEN:-}" PACKAGE_NAME="tesm-license-${RELEASE_TAG}.tar.gz" DOWNLOAD_URL="${GITEA_BASE}/${REPO_OWNER}/${REPO_NAME}/releases/download/${RELEASE_TAG}/${PACKAGE_NAME}" WORK_DIR="/tmp/tesm-license-update-$(date +%s)" PACKAGE_FILE="$WORK_DIR/${PACKAGE_NAME}" RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' if [ "$(id -u)" -ne 0 ]; then echo "Bitte als root ausführen (sudo ./update.sh)." >&2 exit 1 fi echo -e "${YELLOW}============================================================================${NC}" echo -e "${YELLOW} TESM-Lizenzserver Update/Reinstall — Release \"${RELEASE_TAG}\"${NC}" echo -e "${YELLOW}============================================================================${NC}" echo echo "Lädt das Release-Paket herunter und übergibt Installation/Update an" echo "install.sh daraus -- das erkennt selbst, ob es sich um eine frische" echo "Installation oder ein Update einer bestehenden handelt, und sichert" echo "die Datenbank bei einer Schema-Änderung automatisch vorsorglich ab." echo read -r -p "Fortfahren? [y/N] " confirm if [[ "$confirm" != "y" && "$confirm" != "Y" ]]; then echo "Abgebrochen — nichts wurde verändert." exit 0 fi echo -e "${RED}→${NC} Lade Paket von ${DOWNLOAD_URL}..." mkdir -p "$WORK_DIR" CURL_AUTH=() if [ -n "$GITEA_USER" ] && [ -n "$GITEA_TOKEN" ]; then CURL_AUTH=(-u "${GITEA_USER}:${GITEA_TOKEN}") fi curl -fsSL "${CURL_AUTH[@]}" -o "$PACKAGE_FILE" "$DOWNLOAD_URL" echo -e "${GREEN}✔${NC} Paket heruntergeladen ($(du -h "$PACKAGE_FILE" | cut -f1))." echo -e "${RED}→${NC} Entpacke Paket..." mkdir -p "$WORK_DIR/pkg" tar xzf "$PACKAGE_FILE" -C "$WORK_DIR/pkg" --strip-components=1 echo -e "${GREEN}✔${NC} Paket entpackt." echo -e "${RED}→${NC} Starte install.sh aus dem Paket..." bash "$WORK_DIR/pkg/install.sh" echo echo -e "${GREEN}============================================================================${NC}" echo -e "${GREEN} TESM-Lizenzserver Update/Reinstall (Release \"${RELEASE_TAG}\") abgeschlossen.${NC}" echo -e "${GREEN}============================================================================${NC}" echo "Siehe Ausgabe von install.sh oben für Details (In-Place-Update, frische" echo "Installation, oder Migrationsergebnis inkl. eventuellem Rückroll-Hinweis)."