diff --git a/README.md b/README.md index 9293967..f197aa4 100644 --- a/README.md +++ b/README.md @@ -1132,14 +1132,23 @@ sudo TESM_RELEASE_TAG=v1.0.0 ./update.sh sudo TESM_GITEA_USER=alientim TESM_GITEA_TOKEN= ./update.sh ``` -Das Skript stoppt und deaktiviert zunächst alle laufenden Dienste — sowohl -die aktuellen (`tesm.service`, `tesm-check.service`, -`tesm-check-restart.timer`) als auch, falls noch vorhanden, das -ursprüngliche Bash-only-Setup (`rpi-check.service`, -`rpi-check-restart.service`, `rpi-check-restart.timer`) —, verschiebt ein -bestehendes `/srv/tesm` **ohne es zu löschen** nach -`/srv/tesm-backup-` (bleibt inkl. `sqlite.db` als Rückfall- -option und Datenquelle erhalten), lädt dann das Release-Paket +Das Skript erkennt und ersetzt dabei jede der drei historischen Ausbaustufen +dieses Hosts, egal welche gerade aktiv ist: + +1. das ursprüngliche, reine Bash-Setup aus dem separaten Repo + [WiS/Aruba-PoE](https://gitea.int.eertmoed.net/WiS/Aruba-PoE) + (`rpi-check.service`/`rpi-check-restart.*`, statische `ips.list`, keine + Datenbank/Web-UI), +2. die spätere Flask-App „PoE Manager" unter `/srv/poe_manager` + (`poe_web.service`, der Vorgänger von TESM in diesem Repo vor der + Umbenennung), +3. eine bereits während der Entwicklung ad-hoc gepflegte TESM-Instanz unter + `/srv/tesm`. + +Es stoppt/deaktiviert alle davon vorhandenen Dienste, verschiebt jedes +vorhandene `/srv/tesm` bzw. `/srv/poe_manager` **ohne es zu löschen** nach +`-backup-` (bleibt inkl. `sqlite.db` als +Rückfalloption und Datenquelle erhalten), lädt dann das Release-Paket (`tesm-.tar.gz`, standardmäßig `latest`) von den Gitea-Releases dieses Repos herunter und führt darin `install.sh` aus. diff --git a/update.sh b/update.sh index 9d5180c..e349879 100644 --- a/update.sh +++ b/update.sh @@ -1,16 +1,24 @@ #!/bin/bash # ============================================================================ # TESM — Update/Reinstall -# Ersetzt eine bestehende Installation -- egal ob eine während der -# Entwicklung ad-hoc gepflegte TESM-Instanz ODER das ursprüngliche, viel -# ältere reine Bash-Setup ("aruba-poe": rpi-check.service + statische -# ips.list, keine Datenbank/Web-UI) -- durch eine frische Installation aus -# einem gepackten Gitea-Release. Lädt dafür NUR den Release-Tarball per HTTP -# herunter (kein "git clone", kein Git auf dem Zielsystem nötig). +# Ersetzt eine bestehende Installation -- ganz gleich welche der drei +# historischen Stufen dieses Hosts gerade aktiv ist: +# 1. Das ursprüngliche, reine Bash-Setup aus dem separaten Repo +# https://gitea.int.eertmoed.net/WiS/Aruba-PoE (rpi-check.service + +# statische ips.list, keine Datenbank/Web-UI). +# 2. Die spätere Flask-App "PoE Manager" unter /srv/poe_manager +# (poe_web.service, Vorgänger von TESM in diesem Repo vor der +# Umbenennung). +# 3. Eine bereits während der Entwicklung ad-hoc gepflegte TESM-Instanz +# unter /srv/tesm. +# -- durch eine frische Installation aus einem gepackten Gitea-Release. +# Lädt dafür NUR den Release-Tarball per HTTP herunter (kein "git clone", +# kein Git auf dem Zielsystem nötig). # -# Die ALTE Installation wird dabei NICHT gelöscht, sondern nur gestoppt/ -# deaktiviert und (falls vorhanden) beiseite verschoben (siehe BACKUP_DIR) -- -# als Rückfalloption UND als Datenquelle für einen späteren Export/Import. +# Alle ALTEN Installationen werden dabei NICHT gelöscht, sondern nur +# gestoppt/deaktiviert und (falls vorhanden) beiseite verschoben (siehe +# OLD_DIRS/BACKED_UP_DIRS) -- 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, …). @@ -36,8 +44,11 @@ GITEA_TOKEN="${TESM_GITEA_TOKEN:-}" PACKAGE_NAME="tesm-${RELEASE_TAG}.tar.gz" DOWNLOAD_URL="${GITEA_BASE}/${REPO_OWNER}/${REPO_NAME}/releases/download/${RELEASE_TAG}/${PACKAGE_NAME}" -INSTALL_DIR="/srv/tesm" -BACKUP_DIR="/srv/tesm-backup-$(date +%Y%m%d-%H%M%S)" +TIMESTAMP="$(date +%Y%m%d-%H%M%S)" +# Alle historischen Installationsorte, die dieser Host je nach Alter tragen +# kann -- siehe Kommentar oben. Jeder, der existiert, wird beiseite +# verschoben statt gelöscht. +OLD_DIRS=("/srv/tesm" "/srv/poe_manager") WORK_DIR="/tmp/tesm-update-$(date +%s)" PACKAGE_FILE="$WORK_DIR/${PACKAGE_NAME}" @@ -58,14 +69,15 @@ 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 "Eine ggf. vorhandene Installation unter ${INSTALL_DIR} wird dabei NICHT gelöscht," -echo "sondern nach dem Stoppen der Dienste nach folgendem Pfad verschoben (bleibt" -echo "vollständig erhalten, inkl. sqlite.db):" -echo " ${BACKUP_DIR}" +echo "Alle auf diesem Host ggf. vorhandenen älteren Installationen (/srv/tesm," +echo "/srv/poe_manager) werden dabei NICHT gelöscht, sondern nach dem Stoppen der" +echo "jeweiligen Dienste nach -backup-${TIMESTAMP} verschoben (bleiben" +echo "vollständig erhalten, inkl. sqlite.db)." echo -echo "Ebenfalls gestoppt/deaktiviert wird ein noch vorhandenes ursprüngliches" -echo "Bash-only-Setup (rpi-check.service/rpi-check-restart.*, falls vorhanden --" -echo "der Vorgänger von TESM ohne Datenbank/Web-UI)." +echo "Ebenfalls gestoppt/deaktiviert werden ältere Dienste, falls noch vorhanden:" +echo " - poe_web.service (Flask-App \"PoE Manager\" unter /srv/poe_manager)" +echo " - rpi-check.service / rpi-check-restart.* (das ursprüngliche reine" +echo " Bash-Setup aus dem Repo WiS/Aruba-PoE, ganz ohne Datenbank/Web-UI)" 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}" @@ -79,21 +91,27 @@ if [[ "$confirm" != "y" && "$confirm" != "Y" ]]; then fi echo -e "${RED}→${NC} Stoppe und deaktiviere bestehende Dienste..." -# Aktuelle TESM-Dienste UND das ursprüngliche, viel ältere Bash-only-Setup -# (rpi-check.service/rpi-check-restart.*) -- je nachdem, was auf diesem -# Host tatsächlich (noch) existiert. "|| true" macht nichts kaputt, falls +# Alle drei historischen Generationen -- je nachdem, was auf diesem Host +# tatsächlich (noch) existiert. "|| true" macht nichts kaputt, falls # einzelne Units gar nicht vorhanden sind. 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 +systemctl stop poe_web.service 2>/dev/null || true +systemctl disable poe_web.service 2>/dev/null || true systemctl stop rpi-check.service rpi-check-restart.service rpi-check-restart.timer 2>/dev/null || true systemctl disable rpi-check.service rpi-check-restart.service rpi-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 +BACKED_UP_DIRS=() +for dir in "${OLD_DIRS[@]}"; do + if [ -d "$dir" ]; then + dest="${dir}-backup-${TIMESTAMP}" + echo -e "${RED}→${NC} Sichere ${dir} nach ${dest}..." + mv "$dir" "$dest" + BACKED_UP_DIRS+=("$dest") + echo -e "${GREEN}✔${NC} Gesichert (nicht gelöscht)." + fi +done echo -e "${RED}→${NC} Lade Paket von ${DOWNLOAD_URL}..." mkdir -p "$WORK_DIR" @@ -122,10 +140,12 @@ 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 -if [ -d "$BACKUP_DIR" ]; then - 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)." +if [ "${#BACKED_UP_DIRS[@]}" -gt 0 ]; then + echo "Falls kein Export gemacht wurde: die alte(n) Datenbank(en) liegen unverändert unter:" + for dest in "${BACKED_UP_DIRS[@]}"; do + echo " ${dest}/sqlite.db" + done + echo "und können bei Bedarf manuell ausgelesen werden (z.B. mit sqlite3)." echo fi echo "Hinweis zum Admin-Konto der neuen Installation: siehe Ausgabe von install.sh oben"