#!/bin/bash # ============================================================================ # TESM — Update/Reinstall # Ersetzt eine bestehende Installation (z.B. eine während der Entwicklung # manuell gepflegte) durch eine frische, paketbasierte Installation aus dem # Git-Repository (Tag/Release statt Ad-hoc-Dateikopien). Die ALTE # Installation wird dabei NICHT gelöscht, sondern nur gestoppt/deaktiviert # und beiseite verschoben (siehe BACKUP_DIR) -- als Rückfalloption UND als # Datenquelle für einen späteren Export/Import. # # WICHTIG: Das Ergebnis ist eine FRISCHE Installation OHNE die Daten der # alten Instanz (Geräte, Switche, Zugangsdaten, Benutzer, Einstellungen, …). # Vor dem Ausführen unbedingt unter Einstellungen -> Im-/Export ein Backup # der alten Instanz exportieren -- danach entweder alles neu einrichten oder # dieses Backup in die neue Installation importieren. # # Auszuführen als root auf dem Zielsystem (z.B. POETEST): # sudo ./update.sh # Optional übersteuerbar: # TESM_REPO_URL=https://user:token@gitea.../alientim/tesm.git \ # TESM_RELEASE_TAG=v1.0.0 sudo -E ./update.sh # ============================================================================ set -e REPO_URL="${TESM_REPO_URL:-https://gitea.int.eertmoed.net/alientim/tesm.git}" RELEASE_TAG="${TESM_RELEASE_TAG:-v1.0.0}" INSTALL_DIR="/srv/tesm" BACKUP_DIR="/srv/tesm-backup-$(date +%Y%m%d-%H%M%S)" CLONE_DIR="/tmp/tesm-update-$(date +%s)" 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 Update/Reinstall — Release ${RELEASE_TAG}${NC}" echo -e "${YELLOW}============================================================================${NC}" echo echo -e "${RED}ACHTUNG:${NC} Dies richtet TESM KOMPLETT NEU ein — frische Datenbank, KEINE" echo "Geräte/Switche/Zugangsdaten/Benutzer/Einstellungen aus der aktuellen Installation." echo echo "Die aktuelle Installation unter ${INSTALL_DIR} wird dabei NICHT gelöscht, sondern" echo "nach dem Stoppen der Dienste nach folgendem Pfad verschoben (bleibt vollständig" echo "erhalten, inkl. sqlite.db):" echo " ${BACKUP_DIR}" echo echo -e "${YELLOW}Falls noch nicht geschehen: JETZT abbrechen und zuerst unter${NC}" echo -e "${YELLOW}Einstellungen -> Im-/Export ein Backup der aktuellen Daten exportieren!${NC}" echo "Nach dem Update entweder dieses Backup importieren, oder alles manuell neu anlegen." 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} Stoppe und deaktiviere die bestehenden Dienste..." systemctl stop tesm.service tesm-check.service tesm-check-restart.timer 2>/dev/null || true systemctl disable tesm.service tesm-check.service tesm-check-restart.timer 2>/dev/null || true echo -e "${GREEN}✔${NC} Dienste gestoppt und deaktiviert." if [ -d "$INSTALL_DIR" ]; then echo -e "${RED}→${NC} Sichere bestehende Installation nach ${BACKUP_DIR}..." mv "$INSTALL_DIR" "$BACKUP_DIR" echo -e "${GREEN}✔${NC} Alte Installation gesichert (nicht gelöscht)." fi echo -e "${RED}→${NC} Lade Release ${RELEASE_TAG} von ${REPO_URL}..." git clone --branch "$RELEASE_TAG" --depth 1 "$REPO_URL" "$CLONE_DIR" echo -e "${GREEN}✔${NC} Release heruntergeladen." echo -e "${RED}→${NC} Starte install.sh aus dem heruntergeladenen Release..." bash "$CLONE_DIR/install.sh" echo echo -e "${GREEN}============================================================================${NC}" echo -e "${GREEN} Frische TESM-Installation (${RELEASE_TAG}) abgeschlossen.${NC}" echo -e "${GREEN}============================================================================${NC}" echo echo -e "${YELLOW}WICHTIG — dies ist eine FRISCHE Installation ohne die Daten der alten Instanz.${NC}" echo "Bitte jetzt eines von beidem tun:" echo " a) Alle Geräte/Switche/Zugangsdaten/Benutzer/Einstellungen manuell neu anlegen, oder" echo " b) Ein vor dem Update exportiertes Backup unter Einstellungen -> Im-/Export importieren." echo echo "Falls kein Export gemacht wurde: die alte Datenbank liegt unverändert unter" echo " ${BACKUP_DIR}/sqlite.db" echo "und kann bei Bedarf manuell ausgelesen werden (z.B. mit sqlite3)." echo echo "Hinweis zum Admin-Konto der neuen Installation: siehe Ausgabe von install.sh oben" echo "(bei einer frischen Datenbank wird dort auf create_admin.py hingewiesen)."