---
title: PSS Lic Perfect Streamer Toolkit v2.0 — Lizenz des Knotens
url: https://doc2.pstreamer.tv/de/manual/toolkit/pss_lic.html
lang: de
product: Perfect Streamer
version: 2.0.1.264
---

# PSS Lic Perfect Streamer Toolkit v2.0 — Lizenz des Knotens

Teil des **Perfect Streamer Toolkit** — [https://pstreamer.tv](https://pstreamer.tv)

Ein Kommandozeilen-Dienstprogramm zur Verwaltung der Lizenz eines Knotens: es wendet das vom Anbieter gesendete Lizenz-Update an, exportiert den Zustand des Schlüssels für eine Aktivierungsanfrage und überträgt die Lizenz von einem Knoten auf einen anderen.

Es arbeitet mit demselben Schlüssel des Schutzsystems wie der Streamer selbst — einem Software- (SL) oder einem Hardware-Schlüssel (HL). Der Zugriff auf den Schlüssel erfolgt über den Dienst **aksusbd** des Schutzsystems, deshalb funktioniert das Dienstprogramm nur dort, wo dieser Dienst läuft.

Das Werkzeug ist Bestandteil des Pakets **pstreamer** und befindet sich nach der Installation unter `/opt/pss/tools/pss_lic` — es muss nichts separat installiert werden.

## Wann das Dienstprogramm nötig ist

Der Bildschirm [Lizenz](../webui/administration.md#webui-license) kann das C2V exportieren und den zugesandten V2C-Schlüssel anwenden, mehr aber nicht. Über die Konsole sind alle Operationen am Schlüssel verfügbar, und nur von hier aus wird alles Übrige erledigt:

- Aktivierung und Aktualisierung der Lizenz auf einem Knoten ohne Zugang zur Weboberfläche;
- Automatisierung: Ausrollen eines Knotenparks, planmäßige Lizenzerneuerung, Prüfungen aus einem Überwachungssystem;
- Übertragung einer Lizenz zwischen Knoten — dauerhaft oder vorübergehend.

Das Dienstprogramm braucht keine Root-Rechte: das Schreiben in den geschützten Speicher übernimmt der Dienst des Schutzsystems, nicht das Dienstprogramm. Root wird nur benötigt, um die Ausgabedatei in ein Systemverzeichnis zu schreiben und um den Dienst **pss** nach dem Lizenzwechsel neu zu starten.

Die Erstaktivierung der Testlizenz führt nicht dieses Dienstprogramm aus, sondern das Skript `/opt/pss/tools/activate.sh` — siehe [Temporäre Aktivierung und Start](../first_start/index.md#first-start-activation). Das Skript ruft **pss_lic** selbst auf, startet anschließend den Dienst **pss** neu und aktiviert dessen Autostart. Wie eine dauerhafte Lizenz zu beziehen ist, beschreibt [Dauerhafte Aktivierung](../first_start/index.md#first-start-permanent-activation).

## Verwendung

```
pss_lic <Befehl> [Optionen]
```

Ohne Argumente, mit `-h` oder mit `--help` gestartet, gibt es die eingebaute Hilfe aus und endet mit Code `0`. Optionen stehen nach dem Befehl; vor dem Befehl sind nur `-h`, `--help`, `-V` und `--version` zulässig. Positionsargumente werden nicht angenommen — alles wird über Optionen angegeben.

### Befehle

| Befehl | Zweck | Erforderliche Optionen |
| --- | --- | --- |
| `apply` | Ein Lizenz-Update auf den Knoten anwenden — eine V2C-, H2R- oder R2H-Datei | `--in` |
| `c2v` | Den Zustand des Schlüssels (C2V) für den Versand an den Anbieter exportieren | — |
| `fingerprint` | Den Fingerabdruck des Knotens exportieren | — |
| `recipient` | Den Recipient-Block des Knotens exportieren — die Beschreibung des Knotens als Empfänger einer Übertragung | — |
| `keys` | Die von diesem Knoten aus sichtbaren Schlüssel des Schutzsystems auflisten | — |
| `detach` | Eine Produktlizenz vorübergehend auf einen anderen Knoten übertragen; das Ergebnis ist eine H2R-Datei | `--product-id` |
| `rehost` | Den Schlüssel auf einen anderen Knoten übertragen; das Ergebnis ist eine V2C-Datei, und die Lizenz wird vom aktuellen Knoten entfernt | `--key-id` |
| `cancel` | Eine vorübergehend übertragene Lizenz vorzeitig zurückgeben; das Ergebnis ist eine R2H-Datei | `--key-id` |
| `version` | Version des Dienstprogramms und API-Version des Schutzsystems anzeigen | — |
| `help` | Die eingebaute Hilfe anzeigen | — |

### Optionen

| Option | Beschreibung | Akzeptiert von |
| --- | --- | --- |
| `-i, --in <Datei>` | Eingabedaten | `apply` |
| `-o, --out <Datei>` | Ausgabedaten; standardmäßig `-`, also stdout | alle außer `version` und `help` |
| `-r, --recipient <Datei>` | Recipient-Block des empfangenden Knotens | `detach`, `rehost` |
| `-k, --key-id <id>` | Schlüssel-ID, dezimal | `c2v`, `keys`, `detach`, `rehost`, `cancel` |
| `-p, --product-id <id>` | Produkt-ID, dezimal | `detach` |
| `--duration <Sek>` | Dauer der vorübergehenden Übertragung in Sekunden; standardmäßig `120`, höchstens `31536000` | `detach` |
| `--fast` | Verkürzter Zustandsabzug; bei einem Hardware-Schlüssel (HL) eine kleinere Datei | `c2v` |
| `--ids` | Nur die Schlüssel-IDs ausgeben, eine pro Zeile | `keys` |
| `-y, --yes` | Keine Bestätigung anfordern | `rehost`, `cancel` |
| `-q, --quiet` | Nur Fehler | alle |
| `-v, --verbose` | Ausführliches Protokoll der Zugriffe auf das Schutzsystem | alle |
| `-V, --version` | Versionen anzeigen und beenden | alle |
| `-h, --help` | Hilfe anzeigen | alle |

Eine Option, die in der Zeile ihres Befehls nicht aufgeführt ist, ist ein Syntaxfehler und kein stillschweigend ignoriertes Flag: das Dienstprogramm meldet beispielsweise `--key-id is not valid for 'fingerprint'` und fügt häufig eine Zeile mit der Ursache hinzu. Die Werte von `--key-id`, `--product-id` und `--duration` sind ausschließlich Dezimalzahlen ab `1`; null ist unzulässig.

### Ein- und Ausgabe

Jedes Dateiargument — `--in`, `--out`, `--recipient` — akzeptiert `-`: Lesen von stdin, Schreiben nach stdout. Standardmäßig geht die Ausgabe nach stdout.

Auf **stdout** gelangen nur die Daten selbst — der Lizenzblock. Erfolgsmeldungen, Warnungen und Fehler gehen auf **stderr** und beginnen mit dem Präfix `pss_lic:`. Dadurch lässt sich jeder Befehl in eine Datei oder eine Pipeline umleiten, ohne die Ausgabe auswerten zu müssen.

Ist keine Ausgabedatei angegeben und stdout ein Terminal, warnen die Befehle `detach`, `rehost` und `cancel`, dass das Ergebnis der Übertragung auf dem Bildschirm landet und verloren geht:

```
pss_lic: writing the V2C to the terminal; use --out <file> to keep it
```

Die Eingabedatei wird geprüft, bevor das Schutzsystem angesprochen wird: eine leere Datei, eine Datei, die ein Nullbyte enthält, und eine Datei über 8 MiB werden abgewiesen. Eine UTF-8-Bytereihenfolge-Markierung am Dateianfang — manche Mail-Clients und Editoren fügen sie hinzu — wird automatisch entfernt.

## Anwenden eines Lizenz-Updates

Die vom Anbieter gesendete Datei wird mit einem einzigen Befehl angewendet:

```bash
# apply a licence update sent by the vendor
/opt/pss/tools/pss_lic apply --in license.v2c

# the same file through a pipe
cat license.v2c | /opt/pss/tools/pss_lic apply --in -
```

Bei Erfolg erscheint auf stderr:

```
pss_lic: update applied
```

**Das Dienstprogramm startet den Dienst nicht neu.** Ein laufender Streamer hält die bisherige Lizenz im Speicher, deshalb ist der Dienst nach einem Lizenzwechsel von Hand neu zu starten:

```bash
sudo systemctl restart pss
```

Das erneute Anwenden derselben Datei gilt nicht als Fehler: das Dienstprogramm meldet `this V2C is already installed, nothing to do` und beendet sich mit Code `0`. Auf dieser Eigenschaft beruht die Wiederholbarkeit des Skripts `activate.sh`.

Verwechseln Sie diese Meldung nicht mit der Ablehnung `the update is older than the one already installed (stale or rolled-back V2C)` (Status 54) — diese bedeutet, dass eine veraltete Datei angewendet wird, und endet mit Code `1`. Fordern Sie in diesem Fall beim Anbieter ein aktuelles V2C an.

Mit dem Befehl `apply` werden alle drei Arten von Updates angewendet: das V2C vom Anbieter, das H2R bei einer vorübergehenden Übertragung und das R2H bei deren Rückgabe.

## Export der Daten für den Anbieter

Eine Aktivierungsanfrage oder eine Anfrage zur Erweiterung der Lizenz wird aus einer C2V-Datei erstellt — einer Momentaufnahme des aktuellen Zustands des Schlüssels:

```bash
# export the key state for the vendor
/opt/pss/tools/pss_lic c2v --out host.c2v
```

Sieht der Knoten mehrere Schlüssel, rät das Schutzsystem nicht, welcher gemeint ist, und antwortet mit der Ablehnung `too many keys match the scope` (Status 37). Die Schlüssel-IDs listet der Befehl `keys` auf:

```bash
# list the key ids visible on this host, then scope the export to one of them
/opt/pss/tools/pss_lic keys --ids
/opt/pss/tools/pss_lic c2v --key-id <id> --out host.c2v
```

Ohne `--ids` gibt der Befehl `keys` die Liste der Schlüssel und ihrer Lizenzen in der Form aus, in der das Schutzsystem sie liefert — als XML-Dokument, nicht als Tabelle. Für die Wahl eines Wertes für `--key-id` genügt die Form `--ids`.

Die Option `--fast` fordert beim Schlüssel einen verkürzten Zustandsabzug an. Bei einem Hardware-Schlüssel (HL) fällt diese Datei etwa um eine Größenordnung kleiner aus als die vollständige; bei einem Software-Schlüssel (SL) ist die Größe dieselbe — es unterscheidet sich nur der Umfang der Daten.

**Der Inhalt eines C2V lässt sich auf dem Knoten nicht lesen**, deshalb wird die Schlüssel-ID mit dem Befehl `keys` ermittelt und nicht aus der Datei selbst.

**Ein C2V — eine Anfrage.** Senden Sie dem Anbieter nicht zweimal dasselbe C2V: das zweite daraufhin ausgestellte V2C lässt sich möglicherweise nur teilweise anwenden. Für eine erneute Anfrage das C2V neu exportieren.

Die Befehle `fingerprint` und `recipient` exportieren den Fingerabdruck des Knotens und den Recipient-Block. Der Fingerabdruck beschreibt die Maschine und wird vom Anbieter benötigt, solange auf dem Knoten noch keine Lizenz vorhanden ist: an ihn wird ein neuer Software-Schlüssel gebunden. Der Recipient-Block beschreibt den Knoten als Empfänger einer Übertragung und wird nicht vom Anbieter, sondern vom zweiten Knoten gebraucht — siehe Übertragung der Lizenz auf einen anderen Knoten. Beide beziehen sich auf den Knoten als Ganzes und nicht auf einen einzelnen Schlüssel, deshalb ist die Option `--key-id` für sie unzulässig.

## Übertragung der Lizenz auf einen anderen Knoten

Eine Lizenz lässt sich nur bei einem Software-Schlüssel (SL) zwischen Knoten übertragen: ein Hardware-Schlüssel wandert mit dem Gerät selbst und wird von den Befehlen des Dienstprogramms nicht berührt. Eine Testlizenz ist nicht übertragbar. Ob eine Übertragung möglich ist, legen die Lizenzbedingungen fest; ist sie nicht vorgesehen, antwortet das Schutzsystem mit der Ablehnung `rehost is not allowed for this licence`. Klären Sie das vorab mit dem Anbieter.

> **Warnung**
>
> `rehost` nimmt die Lizenz vom aktuellen Knoten. Die erzeugte Datei lässt sich nur auf dem Knoten anwenden, dessen Recipient-Block in `--recipient` übergeben wurde. Geht die Datei verloren oder ist der empfangende Knoten nicht erreichbar, ist die Lizenz mit ihr verloren: einen lokalen Rückweg gibt es nicht. Geben Sie stets `--recipient` an und speichern Sie das Ergebnis in einer Datei, nicht auf dem Bildschirm.

Die Übertragung erfolgt in drei Schritten und betrifft beide Knoten. Im Folgenden ist A der Knoten, den die Lizenz verlässt, und B der Knoten, auf den sie übergeht.

1. Auf Knoten **B** den Recipient-Block exportieren und die Datei an Knoten A übergeben:

   ```bash
   /opt/pss/tools/pss_lic recipient --out b.rcp
   ```
2. Auf Knoten **A** den Schlüssel übertragen. Das Dienstprogramm fragt nach einer Bestätigung:

   ```bash
   /opt/pss/tools/pss_lic rehost --key-id <id> --recipient b.rcp --out a2b.v2c
   ```

   ```
   pss_lic: about to move the licence off this host. This cannot be undone. Continue? [y/N]
   ```

   Als Bestätigung gilt eine Antwort, die mit `y` oder `Y` beginnt: `yes` bestätigt genauso wie `y`. Jede andere Antwort, auch eine leere Zeile, bricht die Operation ab. Die Frage wird direkt auf dem Terminal gestellt, eine Umleitung der Ausgabe verbirgt sie also nicht. Fehlt ein Terminal — etwa weil der Befehl aus einem Scheduler gestartet wurde —, verweigert das Dienstprogramm die Übertragung und schlägt `--yes` vor.
3. Auf Knoten **B** die erhaltene Datei anwenden und den Dienst neu starten:

   ```bash
   /opt/pss/tools/pss_lic apply --in a2b.v2c
   sudo systemctl restart pss
   ```

Von dem Moment an, in dem Schritt 2 ausgeführt ist, bis Schritt 3 durchgelaufen ist, liegt die Lizenz auf keinem der beiden Knoten. Planen Sie die Übertragung so, dass dieser Zeitraum kurz bleibt.

Die erzeugte Datei ist überall außer auf Knoten B nutzlos: auf einer anderen Maschine ergibt sie eine Ablehnung mit Status 62. Der Versuch, auf Knoten A eine alte Datei desselben Schlüssels anzuwenden, ergibt Status 70 oder 71 — der Schlüssel wurde bereits übertragen.

## Vorübergehende Übertragung der Lizenz

`detach` überträgt eine Produktlizenz für eine festgelegte Frist auf einen anderen Knoten, `cancel` gibt sie vorzeitig zurück. Wie die dauerhafte Übertragung funktioniert auch die vorübergehende nur mit einem Software-Schlüssel und nur, wenn die Lizenzbedingungen es zulassen; andernfalls antwortet das Schutzsystem mit einer Ablehnung mit Status 67. Bei einer Testlizenz ist eine solche Ablehnung das erwartete Ergebnis und kein Defekt.

Die Produkt-ID von Perfect Streamer ist `2`. Die Frist wird in Sekunden mit der Option `--duration` angegeben; **der Standardwert beträgt 120 Sekunden**, geben Sie ihn im Betrieb daher stets ausdrücklich an. Die Obergrenze des Dienstprogramms selbst liegt bei `31536000` Sekunden (einem Jahr), die tatsächliche Grenze setzt jedoch die Lizenz: bei einer zu langen Frist antwortet das Schutzsystem mit der Ablehnung `invalid duration specified`. Die angeforderte Frist ist genau das — eine Anfrage: den endgültigen Wert bestimmt der Schlüssel, und er kann kürzer ausfallen.

1. Auf Knoten **B** den Recipient-Block exportieren und die Datei an Knoten A übergeben:

   ```bash
   /opt/pss/tools/pss_lic recipient --out b.rcp
   ```
2. Auf Knoten **A** die Lizenz für einen Tag übertragen:

   ```bash
   /opt/pss/tools/pss_lic detach --product-id 2 --duration 86400 --recipient b.rcp --out b.h2r
   ```

   ```
   pss_lic: product 2 detached, 86400 s requested
   ```
3. Auf Knoten **B** die erhaltene Datei anwenden und den Dienst neu starten:

   ```bash
   /opt/pss/tools/pss_lic apply --in b.h2r
   sudo systemctl restart pss
   ```

Nach Ablauf der Frist kehrt die Lizenz von selbst auf Knoten A zurück. Die vorzeitige Rückgabe verläuft in umgekehrter Richtung: die R2H-Datei entsteht auf dem empfangenden Knoten und wird auf dem ursprünglichen angewendet. Ist die Frist bis dahin bereits abgelaufen, gibt es nichts zurückzugeben — das Dienstprogramm meldet `the R2H: nothing to write` und endet mit Code `1`.

1. Auf Knoten **B** die ID des übertragenen Schlüssels ermitteln und die Übertragung abbrechen:

   ```bash
   /opt/pss/tools/pss_lic keys --ids
   /opt/pss/tools/pss_lic cancel --key-id <id> --out back.r2h
   ```
2. Auf Knoten **A** die erhaltene Datei anwenden und den Dienst neu starten:

   ```bash
   /opt/pss/tools/pss_lic apply --in back.r2h
   sudo systemctl restart pss
   ```

Die Option `--recipient` ist für `cancel` unzulässig: die Lizenz kehrt dorthin zurück, woher sie kam. Wie `rehost` fragt auch der Befehl `cancel` nach einer Bestätigung. `detach` selbst fragt nicht — die Übertragung ist zeitlich begrenzt und umkehrbar.

Bewahren Sie die Zwischendateien ebenso sorgfältig auf wie bei einer dauerhaften Übertragung: solange das H2R nicht auf Knoten B und das R2H nicht auf Knoten A angewendet ist, steht die Lizenz auf keinem von beiden zur Verfügung und kehrt erst nach Ablauf der Übertragungsdauer zurück.

## Exit-Codes

| Code | Bedeutung |
| --- | --- |
| `0` | Die Operation wurde ausgeführt. Derselbe Code wird zurückgegeben, wenn das Update bereits zuvor angewendet wurde |
| `1` | Das Schutzsystem hat die Operation abgelehnt — die Meldung nennt die Statusnummer. Derselbe Code wird zurückgegeben, wenn die Operation ohne Daten endete, zum Beispiel `the R2H: nothing to write` |
| `2` | Syntaxfehler: ein unbekannter Befehl, eine für den Befehl unzulässige Option, eine fehlende Pflichtoption, ein unzulässiger Wert. Derselbe Code wird zurückgegeben, wenn der Bediener die Bestätigungsabfrage mit „nein“ beantwortet hat |
| `3` | Ein-/Ausgabefehler: die Datei lässt sich nicht öffnen, lesen oder schreiben |

Zwei Fälle sollten Skripte berücksichtigen. Verweigert der Bediener die Bestätigung, ist das Code `2` und nicht `0`: eine Prüfung „Code ungleich null bedeutet Störung“ hält den Abbruch für einen Fehler. Eine nicht lesbare Eingabedatei ist Code `3` und nicht `1`: bis zum Schutzsystem kam es gar nicht.

```bash
# distinguish a refusal by the key from a bad command line or a missing file
/opt/pss/tools/pss_lic apply --in license.v2c || {
    case $? in
        1) echo "the key refused the update" >&2 ;;
        2) echo "wrong command line, or the operator declined" >&2 ;;
        3) echo "the file could not be read" >&2 ;;
    esac
}
```

## Meldungen und Diagnose

Meldungen erscheinen auf stderr mit dem Präfix `pss_lic:`. Eine Ablehnung des Schutzsystems wird immer in derselben Form ausgegeben — was misslungen ist, eine Beschreibung der Ursache im Klartext und die Statusnummer — und bei häufigen Ursachen kommt eine Hinweiszeile hinzu:

```
pss_lic: reading the key state (C2V) failed: too many keys match the scope (status 37)
pss_lic:   hint: this host holds several keys; run 'pss_lic keys --ids' and pass --key-id
```

Die Option `-q` entfernt die Erfolgsmeldungen — auch die Warnung vor der Ausgabe auf das Terminal —, nicht aber die Fehler und nicht die Hinweise. Die Option `-v` ergänzt ein Protokoll der Zugriffe auf das Schutzsystem: die Anfragen, die Zahl der gelesenen und geschriebenen Bytes, den Namen der aufgerufenen Funktion. Legen Sie beim Support genau die Ausgabe mit `-v` bei.

Die häufigste Gruppe von Ablehnungen ist ein nicht sichtbarer Schlüssel oder ein nicht antwortender Dienst des Schutzsystems (Status 7, 14, 33, 50 und 80). Prüfen Sie, ob der Dienst läuft (`systemctl status aksusbd`), ob der USB-Schlüssel angeschlossen ist und ob die Bibliotheken des Anbieters im Verzeichnis `/var/hasplm` vorhanden sind — sie installiert das Paket **pstreamer**. Die übrigen Ablehnungen stehen in der Tabelle unten; in der ersten Spalte die Statusnummer aus der Ablehnungszeile, in der zweiten deren Text.

| Status | Text der Ablehnung | Ursache und Abhilfe |
| --- | --- | --- |
| 37 | `too many keys match the scope` | Der Knoten sieht mehrere Schlüssel. Die Liste mit `keys --ids` abrufen und `--key-id` angeben |
| 42 | `License Manager version is too old` | Die Version von **aksusbd** ist niedriger als 9.12; das Paket des Schutzsystems aktualisieren |
| 47 | `secure storage contains garbage` | Der Lizenzspeicher ist beschädigt; ein neues V2C vom Anbieter ist erforderlich |
| 48 | `vendor library cannot be found` | Im Verzeichnis `/var/hasplm` fehlen die Bibliotheken des Anbieters; sie werden vom Paket **pstreamer** installiert |
| 54 | `the update is older than the one already installed (stale or rolled-back V2C)` | Es wird ein veraltetes V2C angewendet; ein aktuelles beim Anbieter anfordern |
| 55 | `another update must be installed first` | Die Update-Datei ist dem Zustand des Schlüssels voraus — ein Zwischenupdate wurde übersprungen; ein aktuelles C2V exportieren und das dafür ausgestellte V2C anwenden |
| 58 | `invalid XML recipient parameter` | Der Recipient-Block ist beschädigt; ihn auf dem empfangenden Knoten erneut exportieren |
| 60 | `the scope does not select a unique Product` | `--product-id` prüfen und auf einem Knoten mit mehreren Schlüsseln `--key-id` ergänzen |
| 61 | `invalid Product information` | `--product-id` prüfen; bei Perfect Streamer ist sie `2` |
| 62 | `unknown recipient; this blob may only be applied on the recipient it was made for` | Die Datei wurde für eine andere Maschine ausgestellt und ist nur dort anwendbar |
| 63 | `invalid duration specified` | Die Übertragungsdauer ist länger als die Lizenz zulässt |
| 64 | `cloned secure storage detected` | Der Lizenzspeicher wurde als Kopie erkannt — eine Folge des Klonens einer Festplatte oder einer virtuellen Maschine; beim Anbieter eine Neuausstellung der Lizenz für diese Maschine anfordern |
| 66 | `the specified key is inactive` | Der Schlüssel ist inaktiv |
| 67 | `no detachable Feature exists` | Die vorübergehende Übertragung ist durch die Lizenzbedingungen nicht erlaubt |
| 68 | `the scope does not select a unique host` | Der Knoten sieht mehrere Dienste des Schutzsystems; `fingerprint` und `recipient` beziehen sich auf den Dienst, nicht auf den Schlüssel |
| 69 | `rehost is not allowed for this licence` | Die Übertragung ist durch die Lizenzbedingungen nicht erlaubt |
| 70 | `the licence was rehosted to another machine` | Der Schlüssel wurde bereits von diesem Knoten übertragen |
| 71 | `an old rehost licence is being applied` | Es wird eine alte Übertragungsdatei angewendet; der Schlüssel wurde bereits von diesem Knoten übertragen |
| 77 | `the recipient of the requested operation is older than expected` | Auf dem empfangenden Knoten läuft ein veralteter Dienst des Schutzsystems; ihn aktualisieren |
| 78 | `secure storage ID mismatch` | Der Lizenzspeicher gehört zu einer anderen Maschine; ein neues V2C vom Anbieter ist erforderlich |
| 79 | `duplicate host name while the key uses host name fingerprinting` | Im Netz gibt es einen zweiten Knoten mit demselben Namen; den Knoten umbenennen oder die Lizenz neu ausstellen lassen |
| 94 | `the key and the update are out of sync (update counters diverged)` | Die Update-Zähler von Schlüssel und Datei sind auseinandergelaufen; ein aktuelles C2V exportieren und das dafür ausgestellte V2C anwenden |

Für jeden bekannten Status gibt das Dienstprogramm eine Beschreibung im Klartext aus; ein nicht erkannter Status wird als `unrecognised status` mit seiner Nummer ausgegeben.

Ein Sonderfall ist der Befehl `keys`: hat das Schutzsystem das ausführliche Format der Liste nicht angenommen, gibt das Dienstprogramm die Ablehnungszeile aus und wiederholt die Anfrage dann im Kurzformat. Die Liste wird dabei ausgegeben und der Exit-Code bleibt null, eine solche Ablehnungszeile vor einem normalen Ergebnis ist daher nicht als Störung zu lesen.

Der Befehl `version` funktioniert auch bei defektem Schutzsystem — genau das macht ihn als ersten Diagnoseschritt nützlich. Er gibt das Banner des Dienstprogramms und die API-Version des Schutzsystems aus; ist der Dienst des Schutzsystems nicht erreichbar, erscheint statt der Version `unavailable` mit einer Statusnummer, und der Exit-Code bleibt null.

## Umstieg von Version 1.2

In Version 2.0 wurde die positionale Syntax durch Befehle und lange Optionen ersetzt; die früheren Formen werden nicht unterstützt. Bei ihrer Eingabe gibt das Dienstprogramm den Ersatz aus und beendet sich mit Code `2`.

| Bis 1.2 | Ab 2.0 |
| --- | --- |
| `pss_lic u <Datei>` | `pss_lic apply --in <Datei>` |
| `pss_lic i [Schlüssel] [Datei]` | `pss_lic c2v [--key-id <Schlüssel>] [--out <Datei>]` |
| `pss_lic d <Produkt> [Datei]` | `pss_lic detach --product-id <Produkt> [--out <Datei>]` |
| `pss_lic r <Schlüssel> [Datei]` | `pss_lic rehost --key-id <Schlüssel> [--out <Datei>]` |
| `pss_lic f [Datei]` | `pss_lic fingerprint [--out <Datei>]` |

Auch das Verhalten der Ausgabe hat sich geändert: in 2.0 gelangen nur die Daten nach stdout, die Meldungen nach stderr. Skripte, die die gemischte Ausgabe der Version 1.2 ausgewertet haben, müssen angepasst werden.
