• v2.0.9 160675e368

    TESM 2.0.9 Stable

    alientim released this 2026-09-03 16:18:53 +02:00 | 0 commits to main since this release

    Eine Datei genügt

    upgrade.sh und update.sh holen sich das Release jetzt selbst. Auf einem
    System, auf dem noch nichts von dieser Fassung liegt -- und das ist bei einem
    Upgrade von 1.2.8 der Regelfall:

    curl -fsSLO https://gitea.int.eertmoed.net/alientim/tesm/raw/branch/main/deploy/upgrade.sh
    sudo bash upgrade.sh --app tesm
    

    Bisher verlangte upgrade.sh ein entpacktes Release daneben und brach sonst ab
    -- die falsche Voraussetzung für genau den Fall, für den es gedacht ist. Liegt
    das Skript doch in einem entpackten Release, wird dieses benutzt statt
    eines Downloads: wer ein Paket ausgepackt hat, will nicht, dass ungefragt ein
    anderes geladen wird. Mit --tag v2.0.9 lässt sich eine Version festlegen.

    Der Bootstrap steht wortgleich in beiden Skripten; zwei eigenständige Dateien
    können sich keine dritte teilen. Drei Tests halten das zusammen: die Blöcke
    müssen gleich sein, upgrade.sh darf kein Release daneben verlangen, und mit
    leerem PATH muss der Block das fehlende Werkzeug benennen.

    update.sh ruft install.sh nicht mehr per exec auf -- dadurch lief die
    Aufräumfalle nie, und jedes Update liess ein entpacktes Release unter /tmp
    liegen.

    Geprüft, nicht behauptet

    Die einzelne upgrade.sh hat eine echte 1.2.8 in dasselbe Verzeichnis auf
    diese Fassung gebracht: Release geladen, Clients, Zugangsdaten und die
    DHCP-Konfiguration übernommen, Dienst läuft. Die Sicherung enthält die alte
    Installation samt sqlite.db und fernet.key (Verzeichnis 0700, Passphrase
    0600), /tmp bleibt leer.

    Kleinigkeit

    opus ist aus allen Beispielen verschwunden. Das war der Name einer
    Testinstanz; seit die Installationen wie ihre Anwendung heissen, ist er in
    einer Hilfe nur ein Rätsel. In der Betriebsdoku stand dabei zweimal /opt
    statt /srv.

    Installation

    sudo bash /srv/tesm/deploy/update.sh tesm
    
    Downloads
  • v2.0.8 3bbddd7d29

    TESM 2.0.8 Stable

    alientim released this 2026-09-03 14:53:37 +02:00 | 1 commits to main since this release

    Upgrade von 1.2.8 (Branch SONNET5)

    upgrade.sh findet die alte Fassung jetzt auch dann, wenn sie nicht mehr unter
    ihrem Hauptnamen liegt. Nach einem rename.sh steht unter /srv/tesm die
    laufende Installation und die Fassung 1.x unter /srv/tesm-sonnet5 --
    die Vorgabe zeigte danach auf die neue Installation und brach ab (sauber, aber
    unbrauchbar). Gesucht wird nun an beiden Orten; erkannt wird eine 1.x an der
    sqlite.db im Wurzelverzeichnis, denn diese Fassung legt ihre Datenbank unter
    data/app.db ab.

    Der Weg selbst ist gegen echte Altdaten geprüft: aus einer 1.2.8 kamen Clients,
    Zugangsdaten und die DHCP-Konfiguration in eine Probeinstallation, aus einem
    1.2.7-Lizenzserver Kunden, Tickets und neu signierte Lizenzen samt
    übernommenem Signaturschlüssel und Anbieterblock.

    sudo bash deploy/upgrade.sh --app tesm
    

    Installation

    sudo bash /srv/tesm/deploy/update.sh tesm
    
    Downloads
  • v2.0.7 7407f4bc00

    TESM 2.0.7 Stable

    alientim released this 2026-09-03 14:44:33 +02:00 | 2 commits to main since this release

    Anmeldeseite

    • Die Wortmarke steht jetzt auf beiden Anmeldeseiten -- bisher hing sie an
      der Funktionszeile, und die hatte der Lizenzserver nicht. Die Zeile darunter
      ist optional: bei TESM ÜBERWACHEN · BOOTEN · ANBINDEN, beim Lizenzserver
      LIZENZIEREN.
    • Der Kartenkopf ist weg: eine Kachel mit zwei Buchstaben, die Überschrift
      "Anmelden" und der Anwendungsname darunter sagten dasselbe wie die Marke
      darüber und der Knopf darunter.
    • Marke und Karte stehen übereinander im Fluss statt gestapelt -- auf einem
      flachen Fenster schnitt die Karte mitten durch den Schriftzug.
    • Die Marke ist kürzer, symmetrisch um die Mitte aufgebaut und hat volle
      Deckkraft (sie ist kein Wasserzeichen hinter der Karte mehr).
    • Der Farbverlauf im Hintergrund hat wieder Geometrie und Stärke der
      Fassung 1.x.
    • "Bitte melden Sie sich an." ist weg -- auf einer Seite aus Anmeldefeld,
      Passwortfeld und einem Knopf "Anmelden" sagte das nichts. Wessen Sitzung
      gerade ablief, erfährt jetzt stattdessen, warum er wieder hier ist.

    Drei Dinge, die lautlos nichts taten

    • Die Versionsnummer in der Fusszeile war falsch. __version__ stand fest
      verdrahtet in drei Dateien: angezeigt wurde vier Releases lang 2.0.2. Die
      Nummer kommt jetzt aus den Metadaten des installierten Pakets, Quelle ist
      pyproject.toml.
    • gap: var(--sp-7) -- die Skala kennt kein --sp-7. Eine undefinierte
      CSS-Variable verwirft die ganze Deklaration ohne Meldung.
    • Ein Test dagegen fand sofort --surface-0: dreimal benutzt, nie
      definiert. Die Schrift auf der Kachel "kritisch" blieb dunkelgrau auf Rot,
      die Dateivorschau hatte keinen Grund, und das Feld "Recht nicht vorhanden" in
      der Rechtematrix war durchsichtig -- also so hell wie die Karte, obwohl es
      dunkler sein sollte.

    Installation

    sudo bash /srv/tesm/deploy/update.sh tesm
    
    Downloads
  • v2.0.6 635722089e

    TESM 2.0.6 Stable

    alientim released this 2026-09-03 14:12:41 +02:00 | 3 commits to main since this release

    Installation umbenennen

    Neu: deploy/rename.sh. Aus einer Instanz wird die Hauptinstallation (oder
    umgekehrt):

    sudo bash deploy/rename.sh --app tesm --from tesm-opus --to tesm
    

    Der Name steckt an mehr Stellen als im Verzeichnisnamen, und drei davon sind
    leicht zu übersehen: der SITE_KEY in der Umgebungsdatei (daraus entsteht der
    Name des Sitzungscookies), die Zertifikats- und ACME-Pfade in der Datenbank,
    und der server_name der nginx-Site -- install.sh schreibt die Site aus
    seiner Vorlage neu, sobald sich die alias-Pfade ändern, und ohne den Namen
    aus der Datenbank stehen danach zwei Sites mit server_name _ auf Port 80.

    Das venv wird verworfen und neu gebaut: seine Konsolenskripte tragen den
    absoluten Pfad im Shebang, und danach zeigt venv/bin/gunicorn auf einen
    Interpreter, den es nicht mehr gibt.

    Belegt der Zielname noch eine Installation der Fassung 1.x, wandert alles,
    was ihn belegt, in ein Archiv /srv/<ziel>-sonnet5 -- Verzeichnis, Protokolle,
    ACME-Pfad, logrotate-Datei, systemd-Units und nginx-Site. Gelöscht wird nichts.

    Ports und HTTPS bleiben wie sie waren, ein vorhandenes Zertifikat zieht mit.
    Alle angemeldeten Benutzer werden abgemeldet: das Sitzungscookie heisst
    danach anders.

    Installation

    sudo bash /srv/tesm/deploy/update.sh tesm
    
    Downloads
  • v2.0.5 6dff1ed137

    TESM 2.0.5 Stable

    alientim released this 2026-09-03 12:48:33 +02:00 | 5 commits to main since this release

    Anmeldebanner (MOTD)

    Der Zustand der Installation steht wieder im SSH-Login-Banner:

    TESM · TimEShepManager
    UEBERWACHEN · BOOTEN · ANBINDEN (DHCP) · BETRIEBSSYSTEM GEBEN (PXE)
    
    3 Clients online · 0 nicht erreichbar · DHCP: 2 Leases aktiv
    

    Das Banner der Fassung 1.x hing am alten Quellverzeichnis und importierte
    dafür die ganze Anwendung samt venv. Nach einem Umstieg zeigte es damit die
    Zahlen einer Datenbank, die niemand mehr füllt -- eingefroren, aber
    unverdächtig.

    Diese Fassung benutzt nur die Standardbibliothek: kein venv, kein Import
    der Anwendung, die Datenbank wird nur lesend geöffnet. Ein Lauf dauert
    Millisekunden statt eines Flask-Starts, und der Aufruf ist mit timeout 3
    abgesichert -- ein Banner darf eine Anmeldung nie blockieren.

    install.sh legt es an; ein Banner der Vorgängerfassung wird entfernt, aber
    nur, wenn es genau auf dessen motd_banner.py zeigt. Von Hand prüfen:

    sudo /usr/local/lib/tesm/tesm-motd --app tesm --root /srv/<name>
    

    Damit es nicht zwei Wahrheiten über "online" gibt, steht die Zählung der
    Statusübersicht jetzt an einer Stelle; das Banner trägt sie wortgleich, und ein
    Test vergleicht beide.

    Installation

    sudo bash /opt/tesm/deploy/update.sh tesm latest --instance <name>
    
    Downloads
  • v2.0.4 313eb4bbf9

    TESM 2.0.4 Stable

    alientim released this 2026-09-03 12:21:37 +02:00 | 6 commits to main since this release

    Automatische Abmeldung -- jetzt wirklich

    In 2.0.3 war die Ursache nur halb behoben. Zwei Gruende, beide fuer sich
    ausreichend:

    • Eine zweite Schreibstelle. Die Sitzung wird nicht nur beim Lesen einer
      Anfrage verlängert, sondern auch beim Speichern -- und das geschieht, sobald
      eine Anfrage die Sitzung anfasst. Ein neu erzeugtes CSRF-Token genügt dafür.
      Die Prüfung an der ersten Stelle lief damit ins Leere. Sitzungsdaten werden
      weiter gespeichert, nur die Fristen bleiben stehen. Dieselbe Stelle benutzte
      ausserdem die fest eingebaute Zeit statt der einstellbaren; bei der Vorgabe
      von 30 Minuten fiel das nicht auf.
    • Ein Tab, der noch das alte Skript fährt. Die Kennzeichnung automatischer
      Anfragen kam bisher nur vom Browser -- wer seit gestern Abend angemeldet ist,
      hat die Seite seit gestern Abend nicht neu geladen und schickt sie deshalb
      nicht. Genau dieser Tab ist der Fall, um den es geht. Der Server weiss es
      jetzt ohne Zutun des Browsers: die Endpunkte, die eine Kachel oder ein
      Protokoll nachlädt, sind als Aktualisierungsausschnitt gekennzeichnet und
      gelten damit immer als automatisch.

    Dass es auf dem Lizenzserver zuverlässig funktionierte, war der entscheidende
    Hinweis: dort pollt keine Kachel.

    Ein Neuladen des Tabs ist damit nicht mehr nötig -- die Abmeldung greift
    auch bei einem Tab, der seit Stunden offen steht.

    Sichtbares Ende einer abgelaufenen Sitzung

    Die Statusübersicht antwortet auch öffentlich. Nach dem Ablauf kam deshalb eine
    200 mit den öffentlichen Kacheln zurück, und der offene Tab zeigte weiter eine
    Oberfläche, als sei alles in Ordnung. Ein zusätzlicher Kopf sagt es unabhängig
    vom Statuscode; der Browser lädt daraufhin neu und zeigt die Anmeldemaske.

    Installation

    sudo bash /opt/tesm/deploy/update.sh tesm latest --instance <name>
    
    Downloads
  • v2.0.3 51ae39dd53

    TESM 2.0.3 Stable

    alientim released this 2026-09-03 11:43:03 +02:00 | 7 commits to main since this release

    Upgrade von der Fassung 1.x

    Neu: deploy/upgrade.sh -- ein Weg vom Stand SONNET5 auf diese Fassung,
    mit Daten. Der Ablauf braucht keine Schalter:

    sudo bash deploy/upgrade.sh --app tesm
    

    Sichern -> abschalten -> installieren -> exportieren -> übersetzen ->
    einspielen. Die Sicherung steht bewusst vor dem Export: ohne --instance
    installiert install.sh in dasselbe Verzeichnis, und wer erst exportiert und
    dann sichert, sichert im schlechtesten Fall nichts mehr. Gelesen wird
    ausschliesslich aus der Kopie -- die alte Installation wird nie verändert.

    Übernommen werden Clients, Switche, Zugangsdaten und DHCP. Lokale Konten,
    Gruppen, LDAP und Webserver kommen nicht mit; der Bericht sagt es beim Namen.

    Zwei neue Befehle stehen auch einzeln zur Verfügung:

    • tesm-admin legacy-export --source /srv/tesm --out datei.json liest eine
      alte Installation unmittelbar -- der Vorgänger kann nur über die
      Weboberfläche exportieren, und das geht nicht mehr, wenn er nicht startet.
      Die Datei ist ein echter Export des Vorgängers und taugt deshalb als
      Rückweg.
    • tesm-admin legacy-import datei.json liest eine Datei im neuen Format ein --
      über denselben Import wie die Seite "Sicherung".

    Automatische Abmeldung -- sie hat nie ausgelöst

    Ein offener Tab fragt seine Kacheln alle 15 Sekunden neu ab, und jede
    Abfrage verlängerte das Leerlauffenster
    . Nachweisbar an einer Sitzung, deren
    last_seen_at eine Minute alt war, obwohl seit zehn Stunden niemand am Rechner
    sass. Der Browser kennzeichnet automatische Anfragen jetzt, der Server
    verlängert daraufhin nichts, und last_seen_at bleibt, was der Name sagt: der
    letzte Zeitpunkt, an dem ein Mensch da war.

    Fällt die Sitzung während des Pollens, antwortet der Server mit 401 statt mit
    einer Umleitung: der Tab lädt neu und zeigt die Anmeldemaske, statt stumm mit
    beliebig alten Zahlen stehenzubleiben.

    Ein bereits offener Tab muss einmal neu geladen werden -- bis dahin läuft
    dort noch das alte Skript.

    Audit

    Der Name einer Konsolen-Mitschrift ist jetzt ein Verweis auf die Datei. Es ist
    derselbe Weg wie zuvor, nur einen Klick weit. Verlinkt wird nur, wenn die Datei
    noch existiert und der Betrachter Protokolldateien lesen darf.

    Installation

    tar xzf tesm-v2.0.3.tar.gz && cd tesm
    sudo bash deploy/install.sh --app tesm --https
    

    Bestehende Installation:

    sudo bash /opt/tesm/deploy/update.sh tesm latest --instance <name>
    
    Downloads
  • v2.0.2 a8bd5763fb

    TESM 2.0.2 Stable

    alientim released this 2026-09-03 00:17:00 +02:00 | 8 commits to main since this release

    Oberfläche

    • Echte Umlaute in allen Texten -- Seiten und Dokumentation.
    • "Änderungen" heisst jetzt Audit; die Ampel dort ist eindeutig: Info grün,
      Hinweis orange, Warnung rot. Ein erfolgreicher Heartbeat wird nicht mehr
      protokolliert, ein fehlgeschlagener schon.
    • Kopfzeile: ein Zeitgeber bis zur nächsten Prüfung -- der Knopf darin löst sie
      sofort aus -- und die Restlaufzeit der Lizenz: unter 90 Tagen grün als
      Hinweis, unter 30 orange, abgelaufen rot. Der doppelte Knopf "Jetzt prüfen"
      auf der Statusübersicht ist entfallen.
    • Millisekunden werden ab einer Sekunde als Sekunden mit zwei Nachkommastellen
      und ab einer Minute als m:ss dargestellt -- auch auf den Switch-Seiten.
    • Der Neustartstatus erscheint unmittelbar nach dem Auslösen -- bei PoE, RPC und
      SSH, manuell wie automatisch -- und ebenso in der Clientliste.
    • Ein Gerät, das nicht antwortet, bietet nur noch Einschalten (PoE) an:
      Neustart über SSH oder RPC setzt ein erreichbares Gerät voraus.
    • Dateivorschau in einem Fenster statt in einem neuen Tab, der Dateiname ist
      anklickbar, Umbenennen ist möglich, Zuordnungen sind bearbeitbar.
    • Der Knopf im Dateifeld ist im dunklen Thema wieder lesbar.
    • In der Rechtematrix ist dunkler jetzt nicht vorhanden -- und nicht mehr
      anhakbar.

    Sitzung und Freigaben

    • Eingebundene Freigaben hängen an der Sitzung: wird sie widerrufen oder läuft
      sie ab, verschwinden die Einbindungen mit ihr.
    • Neu einstellbar: automatische Abmeldung bei Leerlauf, Vorgabe 30 Minuten.
      Aktivität setzt den Zähler zurück.
    • Freigaben nehmen beide Schreibweisen an -- \\dc2022\share und
      //dc2022/share. Kurze Hostnamen werden über die AD-Domäne aufgelöst.

    DHCP

    • Option 225 ist je Auto-Reservierung setzbar, nicht mehr nur global.
    • Reservierungen entstehen nur für Bereiche, die es wirklich gibt; was
      übersprungen wurde, wird benannt.
    • Belegte Reservierungen sind gekennzeichnet, wie es Windows-DHCP tut.
    • Ablaufzeiten als Datum und Uhrzeit statt als Unix-Zeitstempel.

    Übernahme aus dem Vorgänger

    Ein Export des alten TESM lässt sich übersetzen und dann über den normalen
    Import einspielen: Clients, Switche, Zugangsdaten und DHCP. Der Bericht nennt
    ausdrücklich, was nicht übersetzt werden kann.

    Aktualisierung

    update.sh funktioniert jetzt tatsächlich: die Bezugsquelle war auf einen
    Platzhalter voreingestellt, das Repository heisst jetzt wie die Anwendung, und
    alles nach dem Tag geht unverändert an install.sh weiter -- nur so lässt sich
    eine benannte Instanz aktualisieren:

    sudo bash /opt/tesm-opus/deploy/update.sh tesm latest --instance opus
    

    Ohne --instance entstünde daneben eine zweite Installation. Ausserdem bleiben
    die Ports einer bestehenden Installation erhalten: eine benannte Instanz
    fiel bisher auf 8080/8443 zurück, auch wenn sie auf Port 80 lief -- ein Reverse
    Proxy davor hätte danach ins Leere gezeigt.

    Zwei Prüfungen darin hatten nie zugegriffen: die Suche nach install.sh im
    entpackten Paket lief eine Ebene zu flach und meldete den Fehler als
    unbrauchbaren Download, und die CRLF-Prüfung rief file auf -- ein Paket, das
    auf einem schlanken Server fehlt, worauf die Prüfung stillschweigend zustimmte.

    Installation

    tar xzf tesm-v2.0.2.tar.gz && cd tesm
    sudo bash deploy/install.sh --app tesm --https
    

    Bestehende Installation:

    sudo bash /opt/tesm/deploy/update.sh tesm
    
    Downloads
  • v2.0.1 5bb0809009

    TESM 2.0.1 Stable

    alientim released this 2026-09-02 21:21:08 +02:00 | 17 commits to main since this release

    Behebt: Dateifreigaben wurden nie eingebunden ("mount error(1): Operation not permitted"). Ursache war der eigene Mount-Namensraum des Dienstes; der Mount laeuft jetzt ueber nsenter im Namensraum des Wirts und wird von dort in den Dienst weitergegeben. Die Haertung bleibt vollstaendig erhalten.

    SHA-256: 5ca50be135799bc5fbda73b331fc91e78aeda6f24b4ef7cb363de30dbac13b0b

    Downloads
  • v2.0.0 64e25bb9ae

    TESM 2.0.0 Stable

    alientim released this 2026-09-02 18:37:39 +02:00 | 18 commits to main since this release

    Vollstaendiger Neubau. Der vorherige Stand liegt im Zweig SONNET5.

    Dieses Archiv enthaelt nur, was zum Installieren und Betreiben von TESM noetig ist -- keine Tests, keine Serverhaelfte des Lizenzprotokolls.

    sudo bash deploy/install.sh --app tesm --https
    sudo -u tesm tesm-admin create-admin
    

    SHA-256: 8f0a5d54c628b6398294d2cf4167b02eede1f9c5365de092a3b90960eed50ee0

    Downloads