update.sh: In-Place-Update statt Fresh-Install, wenn sich das DB-Schema nicht geändert hat
Neue Datei SCHEMA_VERSION (neben VERSION) markiert den DB-Schema-Stand. update.sh laedt/entpackt das Release-Paket jetzt VOR der Bestaetigungs- abfrage und vergleicht die SCHEMA_VERSION der bestehenden Installation mit der des neuen Pakets: - Stimmen beide ueberein (und existiert bereits eine sqlite.db) -- In-Place-Update: /srv/tesm bleibt bestehen, install.sh rsynct nur den neuen Code darueber (sqlite.db/fernet.key/secret.key waren dort schon immer von rsync ausgeschlossen). Geraete/Switche/Zugangsdaten/Benutzer/ Einstellungen bleiben vollstaendig erhalten, kein manuelles Neuanlegen oder Re-Import noetig. - Unterscheiden sie sich (oder ist eine der beiden Versionen unbekannt, z.B. eine Installation von vor dieser Aenderung) -- weiterhin der bisherige sichere Weg: /srv/tesm wird beiseite verschoben (nicht geloescht) und komplett frisch installiert. /srv/poe_manager (voellig andere App/Schema) wird davon unabhaengig immer beiseite verschoben, nie in-place uebernommen. create_db.py bekommt einen Hinweis-Kommentar, SCHEMA_VERSION bei jeder Schema-Aenderung mit hochzuzaehlen.
This commit is contained in:
@@ -0,0 +1 @@
|
||||
1
|
||||
+12
-1
@@ -1,5 +1,16 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Initialisiert die SQLite-Datenbank für TESM."""
|
||||
"""Initialisiert die SQLite-Datenbank für TESM.
|
||||
|
||||
WICHTIG: Wer hier eine neue Tabelle oder Spalte hinzufügt, muss auch die
|
||||
Datei SCHEMA_VERSION (daneben, im selben Verzeichnis) um 1 erhöhen.
|
||||
update.sh vergleicht diese Zahl zwischen der aktuell installierten und der
|
||||
neuen Version, um zu entscheiden, ob ein Update in-place laufen darf
|
||||
(bestehende Datenbank bleibt erhalten) oder eine frische Installation
|
||||
nötig ist (Datenbank wird beiseitegesichert). Ein vergessenes Hochzählen
|
||||
würde dazu führen, dass ein Host mit altem Schema faelschlich per
|
||||
In-Place-Update aktualisiert wird, statt frisch installiert zu werden --
|
||||
_ensure_schema() faengt die meisten Faelle zwar zur Laufzeit ab, ist aber
|
||||
kein Ersatz fuer eine korrekte Versionsnummer hier."""
|
||||
import os
|
||||
import sqlite3
|
||||
|
||||
|
||||
Reference in New Issue
Block a user