Dateien und Dienste¶
- /usr/local/bin/pss
Ausführbare Datei.
- /opt/pss/config/pss.properties
Globale Einstellungen, Protokolle, Ordnerpfade usw. Nach Änderungen den Dienst neu starten.
- /opt/pss/config/pss.json
Haupt-Einstellungsdatei. Wird automatisch erstellt und aktualisiert. Beim Start versucht der Dienst, genau diese Datei zu laden. Aufbau der Datei — siehe Die Einstellungsdatei pss.json.
- /opt/pss/config/pss_last.json
Eine Kopie der letzten pss.json, die sauber geladen wurde. Sie wird bei jedem Start neu geschrieben, bei dem tatsächlich pss.json geladen wurde; ein Start auf einer Ausweichdatei aktualisiert sie nicht — sonst wäre sie nicht mehr die letzte funktionierende. Sie dient als erste Rückfallebene, wenn die Hauptdatei nicht ausgewertet werden konnte. Auf einem Knoten, der seit der Installation nie neu gestartet wurde, und dort, wo das Einstellungsverzeichnis schreibgeschützt ist, gibt es diese Datei nicht.
- /opt/pss/config/pss_back.json
Sicherungskopie der vorherigen funktionierenden Konfiguration. Sie entsteht nur beim Wiederherstellen der Einstellungen aus einer zuvor gespeicherten Kopie in der Weboberfläche (Wartung) und dient als Rückfallebene nach pss_last.json. Eine regelmäßige Sicherung führt der Dienst nicht, auf einem Knoten, auf dem die Einstellungen nie wiederhergestellt wurden, gibt es diese Datei daher nicht.
- /opt/pss/config/pss_default.json
Standard-Einstellungsdatei. Wird mit dem Paket ausgeliefert und als letzte Ausweichoption verwendet, wenn weder pss.json noch pss_last.json noch pss_back.json geladen werden können. Aus ihr wird auch beim allerersten Start die betriebsbereite pss.json erzeugt: Die Datei legt den Port der Weboberfläche
8808sowie das Konto admin / admin fest.- /opt/pss/config/bad/
Archiv beschädigter pss.json-Dateien. Wenn die Haupt-Einstellungsdatei beim Start nicht ausgewertet werden kann, wird sie mit einem Namen der Form pss_YYYYMMDD_HHMMSS.json hierher verschoben. Das Verzeichnis wird automatisch erstellt und wächst nicht unbegrenzt: es bleiben die zwanzig Dateien mit den höchsten Namen. Näheres siehe Abschnitt Verhalten beim Start und bei Konfigurationsfehlern.
- /opt/pss/data
Ordner zur Datenablage. Wird automatisch erstellt und aktualisiert. Kann in der Datei mit den globalen Einstellungen geändert werden.
- /usr/lib/systemd/system/pss.service
systemd-Unit-Datei des Dienstes.
- /var/log/pss
Ordner für die Protokollausgabe. Kann in der Datei mit den globalen Einstellungen geändert werden.
Der Dienstname lautet pss. Wird unter dem Benutzer pss ausgeführt.
Die Arbeit mit dem Schlüssel übernimmt das Paket des Schutzsystems aksusbd — es umfasst die Dienste hasplmd und aksusbd. Das Paket pstreamer deklariert eine Abhängigkeit davon, Version 10.33 oder neuer: es enthält den Schutzdienst selbst nicht, liegt aber mit ihm im selben Repository, sodass der Paketmanager ihn zusammen mit ihm installiert. Ein älterer Schutzdienst kann die Bibliotheken des Herstellers, die pstreamer in /var/hasplm ablegt, nicht laden.
Verhalten beim Start und bei Konfigurationsfehlern¶
Beim Start versucht der Dienst nacheinander, die Einstellungsdateien aus dem Ordner /opt/pss/config zu laden:
pss.json — Haupt-Einstellungsdatei.
pss_last.json — eine Kopie der letzten Konfiguration, die sauber geladen wurde.
pss_back.json — Sicherungskopie der vorherigen funktionierenden Konfiguration.
pss_default.json — mit dem Paket ausgelieferte Standardeinstellungen.
Verwendet wird die erste erfolgreich geladene Datei. Fehlen alle vier Dateien oder sind sie beschädigt, startet der Dienst mit leeren Einstellungen — in ihnen gibt es kein einziges Konto. Der Administrator wird in diesem Fall von Hand angelegt: den Dienst stoppen, in pss.json unter web-server.login einen Eintrag mit den Schlüsseln id, login und password ergänzen und den Dienst wieder starten — eine Änderung am laufenden Dienst überschreibt dieser aus dem Speicher (API oder Einstellungsdatei).
Aus der Existenz von pss_last.json folgen zwei Dinge. Erstens: das Löschen von pss.json setzt den Knoten nicht mehr auf einen leeren Stand zurück — der Dienst kommt auf pss_last.json hoch und schreibt sie in pss.json zurück. Einen Alarm gibt es dabei nicht, unbemerkt bleibt es aber auch nicht: im Protokoll bleibt ein Eintrag, und in der Weboberfläche erscheint eine Startmeldung. Um den Knoten wirklich zurückzusetzen, löscht man pss.json zusammen mit pss_last.json und pss_back.json — dann kommt der Dienst auf pss_default.json hoch. Alles Übrige im Einstellungsverzeichnis darf nicht angerührt werden: ohne pss.properties startet der Dienst überhaupt nicht. Zweitens: pss_last.json ist genau so gut, wie der letzte saubere Start frisch ist. Einstellungen, die über die Weboberfläche geändert wurden und nie einen Neustart überstanden haben, gibt es nur in pss.json, und ein Rückfall auf die letzte funktionierende Konfiguration bewahrt sie nicht.
Eine nicht annehmbare Einstellungsdatei. Konnte pss.json nicht gelesen werden, verschiebt der Dienst sie in das Archiv /opt/pss/config/bad/ unter dem Namen pss_YYYYMMDD_HHMMSS.json; Datum und Uhrzeit im Namen sind der Zeitpunkt der Archivierung in UTC, dieselbe Zeitrechnung, die das Protokoll standardmäßig verwendet. Danach setzt der Dienst das Laden in der üblichen Reihenfolge fort und speichert die funktionierende Konfiguration aus derjenigen Datei, die geladen wurde, erneut in pss.json. Die Einzelheiten (Name des Schlüssels, Beschreibung des Fehlers, Name der Datei im Archiv) werden in das Betriebsprotokoll geschrieben, und den Archivpfad nennt auch der Alarm über das fehlgeschlagene Laden direkt.
Das Laden wird abgebrochen bei: einem JSON-Syntaxfehler, dem Wert null, einer falschen Form des Wertes (ein Objekt dort, wo ein einzelner Wert erwartet wird, und umgekehrt), einer Zahl oder einem fremden Wort anstelle von true und false, einer zu langen Zeichenkette, einem fehlenden oder doppelten Bezeichner eines Array-Eintrags, der Wiederholung eines als eindeutig deklarierten Wertes. Ein unbekannter Schlüssel verwirft die Datei nicht: er wird ignoriert, im Protokoll erscheint eine Warnung mit Namen von Abschnitt und Schlüssel, und beim nächsten Speichern verschwindet der Schlüssel aus der Datei. Die vollständige Darstellung dessen, was der Dienst beim Lesen der Datei annimmt und was er ablehnt, steht in Was der Dienst beim Lesen der Datei tut.
In das Archiv gelangt nur die Haupt-pss.json. Die Dateien pss_last.json, pss_back.json und pss_default.json werden bei Beschädigung nicht archiviert — die Protokolleinträge reichen für die Diagnose aus, und die Dateien selbst bleiben an ihrem Platz und können manuell korrigiert werden.
Liegt in /opt/pss/config/bad/ bereits eine Datei mit demselben Zeitstempel (etwa bei zwei fehlgeschlagenen Starts in ein und derselben Sekunde), erhält die neue ein Zählsuffix — pss_YYYYMMDD_HHMMSS_2.json und weiter; die zuvor gespeicherte Kopie geht dabei nicht verloren. Das Verzeichnis kann nicht überwuchern: mit dem Erscheinen einer neuen Kopie bleiben die zwanzig Dateien mit den höchsten Namen darin, die übrigen werden gelöscht. Für die Archive, die der Dienst nach der Zeit benennt, sind das genau die zwanzig jüngsten; fremde Dateien, die im Verzeichnis liegen bleiben, zählen ebenfalls mit und belegen diese Plätze, deshalb sollte in bad/ nichts Überflüssiges aufbewahrt werden. Eine fehlgeschlagene Änderung — eine Kopie; ein Neustart für sich erzeugt keine neuen Kopien, denn die abgelehnte Datei ist bereits verschoben und an ihrer Stelle eine funktionierende geschrieben.
Numerische Werte außerhalb des zulässigen Bereichs. Wenn in der Einstellungsdatei ein numerischer Wert vorkommt, der kleiner als der zulässige Mindestwert oder größer als der zulässige Höchstwert für diesen Parameter ist, verwirft der Dienst die Datei nicht vollständig. Stattdessen wird eine Warnung in das Protokoll geschrieben, die den Parameternamen, den gelesenen Wert und die angewendete Grenze angibt, und der Wert selbst wird auf die nächstgelegene zulässige Bereichsgrenze (den Mindest- oder Höchstwert) gesetzt. Nach Abschluss des Ladevorgangs speichert der Dienst pss.json automatisch mit den bereits korrigierten Werten erneut, sodass diese Warnungen beim erneuten Start nicht mehr erscheinen.
Neben dem Protokoll meldet die Startbenachrichtigung des Dienstes in der Weboberfläche die Korrektur: Sie nennt die Anzahl der auf einen Grenzwert gesetzten Werte und verweist für Einzelheiten auf das Protokoll. Lesen Sie sie nach einem Update, das einen Bereich verengt hat: Die Korrektur erfolgt still, und bei einem Aufbewahrungsparameter bedeutet sie, dass die Daten jenseits der neuen Grenze beim nächsten Bereinigungslauf gelöscht werden.
Dieses Verhalten gilt nur beim erstmaligen Laden der Einstellungsdatei. Beim Ändern der Einstellungen über die Weboberfläche oder die HTTP API (Steuerung über die HTTP API) werden Werte außerhalb des zulässigen Bereichs weiterhin mit einem Fehler abgelehnt — ohne automatische Korrektur.
Eine Ablehnung versetzt den Knoten dabei nicht in den vorherigen Zustand zurück: Was der Knoten vor dem ungültigen Wert gelesen hat, bleibt angewendet, und eine Meldung über ein abgelehntes Speichern bedeutet nicht, dass sich nichts geändert hat (Wie Fehler eintreffen).
Die Datei von Hand bearbeiten, sie gegen die Schema prüfen und die Einstellungen auf einen anderen Knoten oder eine andere Version übertragen — Die Einstellungsdatei pss.json und Einstellungen bearbeiten, prüfen und übertragen.