Update/Reinstall-Skript für frische Release-Installationen (update.sh)
Ergänzt install.sh (das ein bestehendes Checkout voraussetzt) um einen Weg, eine bisher ad-hoc gepflegte Installation (z.B. per manuellem Datei-Upload während der Entwicklung) durch eine frische, aus einem Git-Tag geklonte Installation zu ersetzen: - Stoppt/deaktiviert tesm.service, tesm-check.service, tesm-check-restart.timer. - Verschiebt das bestehende /srv/tesm NICHT gelöscht, sondern nach /srv/tesm-backup-<Zeitstempel> -- bleibt als Rückfalloption und Datenquelle für einen späteren Export/Import vollständig erhalten. - Klont den angegebenen Release-Tag frisch und führt darin install.sh aus. - Weist sowohl vor dem Start als auch am Ende deutlich darauf hin, dass das Ergebnis eine FRISCHE Installation ohne die Daten der alten Instanz ist -- vorher exportieren (Einstellungen -> Im-/Export) oder danach alles neu einrichten. README um den entsprechenden Abschnitt ergänzt.
This commit is contained in:
@@ -0,0 +1,97 @@
|
||||
#!/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)."
|
||||
Reference in New Issue
Block a user