Eigenstaendiges Repo: install.sh/update.sh auf tesm-license umgestellt, README + .gitignore
Ausgelagert aus dem TESM-Hauptrepo (srv/tesm-license/, install-license.sh, update-license.sh, zugehoerige systemd-/nginx-Vorlagen) per git-filter-repo, komplette bisherige Historie erhalten. install-license.sh und update-license.sh wurden zu install.sh/update.sh (jetzt die einzigen Skripte in diesem Repo, keine Namenskollision mit TESM mehr noetig). update.sh zeigt jetzt auf dieses eigene Repo/Release-Paket (tesm-license-vX.Y.Z.tar.gz) statt auf das gemeinsame TESM-Paket. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
# TESM-Lizenzserver
|
||||
|
||||
Master-Lizenzserver für [TESM (TimEShepManager)](https://gitea.int.eertmoed.net/alientim/tesm) —
|
||||
verwaltet Kunden und deren Lizenzen, statt Netzwerkgeräte. Ursprünglich als
|
||||
Teil des TESM-Hauptrepos gebaut (gleiche Codebasis: Login/Benutzer/Gruppen,
|
||||
LDAP/AD, NGINX- und Systemeinstellungen, Live-Log/Verlauf/Auditlog,
|
||||
Im-/Export-Grundgerüst, das komplette Rechtesystem) und in dieses eigene
|
||||
Repo ausgelagert.
|
||||
|
||||
**Das Projekt ist ausschließlich für Linux ausgelegt** (Zielsystem: eine
|
||||
Linux-VM, identisches Deployment-Muster wie TESM selbst).
|
||||
|
||||
## Kernfunktionen
|
||||
|
||||
- **Kunden-/Lizenzübersicht** als Dashboard (Typ, Module, Ablaufdatum,
|
||||
Aktivierungsstatus, letzter Heartbeat)
|
||||
- **Lizenz-Ausstellung**: Trial/Standard/Custom/Enterprise, frei wählbare
|
||||
Gültigkeitsdauer, bei Custom einzeln wählbare Module
|
||||
- **Ed25519-signierte Lizenzdateien** (siehe `srv/tesm-license/licensing.py`)
|
||||
— dieselbe Datei existiert byte-identisch im TESM-Repo, da Client
|
||||
(TESM) und Master (dieses Repo) exakt dasselbe Signier-/
|
||||
Verifikationsprotokoll sprechen müssen
|
||||
- **Online-Aktivierung/-Deaktivierung/-Heartbeat** über eine schlanke
|
||||
JSON-API (`/api/activate`, `/api/deactivate`, `/api/heartbeat`,
|
||||
unauthentifiziert per Design — die Signatur der Anfrage selbst ist der
|
||||
Berechtigungsnachweis)
|
||||
- **Offline-Fallback**: dieselbe Aktivierungs-/Deaktivierungs-/Heartbeat-
|
||||
Logik auch als manuell kopierbarer Code für Kunden ohne Netzwerkzugriff
|
||||
auf den Lizenzserver
|
||||
- **E-Mail-Versand** ausgestellter Lizenzen per Microsoft Graph
|
||||
(Client-Credentials-Flow, keine zusätzliche Abhängigkeit) inkl.
|
||||
Einrichtungsanleitung und Verbindungstest in der GUI
|
||||
- Eigene Bootstrap-Lizenz des Masters selbst (`create_master_license.py`,
|
||||
rein lokal, kein externer Super-Master nötig)
|
||||
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
sudo ./install.sh
|
||||
```
|
||||
|
||||
Richtet System-Pakete, die Flask-App (systemd: `tesm-license.service`)
|
||||
sowie nginx als Reverse-Proxy unter `/srv/tesm-license` ein. Erkennt
|
||||
selbstständig, ob dort bereits eine Installation existiert, und
|
||||
aktualisiert sie entsprechend (In-Place bei unverändertem
|
||||
Datenbank-Schema, sonst mit automatischem Backup + Health-Check +
|
||||
Rückroll bei Fehlschlag — siehe Kommentarkopf in `install.sh`).
|
||||
|
||||
Nach der Erstinstallation:
|
||||
|
||||
```bash
|
||||
sudo /srv/tesm-license/venv/bin/python3 /srv/tesm-license/create_admin.py
|
||||
sudo /srv/tesm-license/venv/bin/python3 /srv/tesm-license/create_master_license.py
|
||||
```
|
||||
|
||||
## Update (von einem bereits installierten System aus)
|
||||
|
||||
```bash
|
||||
sudo ./update.sh
|
||||
# oder für eine bestimmte Version statt "latest":
|
||||
TESM_RELEASE_TAG=v1.0.0 sudo -E ./update.sh
|
||||
```
|
||||
|
||||
Lädt das aktuelle Gitea-Release herunter und übergibt an `install.sh`.
|
||||
|
||||
## Zusammenspiel mit TESM
|
||||
|
||||
Eine TESM-Instanz aktiviert sich gegen genau einen Lizenzserver
|
||||
(`master_endpoint`, in der Lizenzdatei hinterlegt). Ein Protokoll, zwei
|
||||
Transportwege: online automatisch per HTTPS/JSON, offline als manuell
|
||||
auszutauschender Code — beide Seiten nutzen dieselben Funktionen aus
|
||||
`licensing.py`. Details zum kryptografischen Format und Ablauf siehe die
|
||||
Docstrings in `srv/tesm-license/licensing.py` bzw. dem identischen Modul
|
||||
im [TESM-Repo](https://gitea.int.eertmoed.net/alientim/tesm).
|
||||
Reference in New Issue
Block a user