---
title: PSS Lic Perfect Streamer Toolkit v2.0 — licence du nœud
url: https://doc2.pstreamer.tv/fr/manual/toolkit/pss_lic.html
lang: fr
product: Perfect Streamer
version: 2.0.1.264
---

# PSS Lic Perfect Streamer Toolkit v2.0 — licence du nœud

Composant de **Perfect Streamer Toolkit** — [https://pstreamer.tv](https://pstreamer.tv)

Utilitaire en ligne de commande pour la gestion de la licence d’un nœud : il applique la mise à jour de licence envoyée par le fournisseur, exporte l’état de la clé pour une demande d’activation et transfère la licence d’un nœud à un autre.

Il travaille avec la même clé du système de protection que le streamer lui-même — logicielle (SL) ou matérielle (HL). L’accès à la clé passe par le service **aksusbd** du système de protection ; l’utilitaire ne fonctionne donc que là où ce service tourne.

L’outil fait partie du paquet **pstreamer** et se trouve après l’installation dans `/opt/pss/tools/pss_lic` — rien n’est à installer séparément.

## Quand l’utilitaire est nécessaire

L’écran [Licence](../webui/administration.md#webui-license) sait exporter le C2V et appliquer la clé V2C reçue, mais rien de plus. Depuis la console, toutes les opérations sur la clé sont disponibles, et le reste ne se fait que d’ici :

- activation et mise à jour de la licence sur un nœud sans accès à l’interface web ;
- automatisation : déploiement d’un parc de nœuds, renouvellement planifié des licences, contrôles depuis un système de supervision ;
- transfert d’une licence entre nœuds — permanent ou temporaire.

L’utilitaire n’a pas besoin des droits root : l’écriture dans le stockage sécurisé est réalisée par le service du système de protection, et non par l’utilitaire. Root n’est nécessaire que pour écrire le fichier de sortie dans un répertoire système et pour redémarrer le service **pss** après un changement de licence.

L’activation initiale de la licence d’essai n’est pas réalisée par cet utilitaire mais par le script `/opt/pss/tools/activate.sh` — voir [Activation temporaire et démarrage](../first_start/index.md#first-start-activation). Le script appelle lui-même **pss_lic**, puis redémarre le service **pss** et active son démarrage automatique. La marche à suivre pour obtenir une licence permanente est décrite dans [Activation permanente](../first_start/index.md#first-start-permanent-activation).

## Utilisation

```
pss_lic <commande> [options]
```

Lancé sans argument, avec `-h` ou avec `--help`, il imprime l’aide intégrée et se termine avec le code `0`. Les options se placent après la commande ; avant la commande, seuls `-h`, `--help`, `-V` et `--version` sont admis. Les arguments positionnels ne sont pas acceptés — tout se donne par options.

### Commandes

| Commande | Rôle | Options obligatoires |
| --- | --- | --- |
| `apply` | Appliquer au nœud une mise à jour de licence — un fichier V2C, H2R ou R2H | `--in` |
| `c2v` | Exporter l’état de la clé (C2V) à envoyer au fournisseur | — |
| `fingerprint` | Exporter l’empreinte du nœud | — |
| `recipient` | Exporter le bloc recipient du nœud — la description du nœud en tant que destinataire d’un transfert | — |
| `keys` | Lister les clés du système de protection visibles depuis ce nœud | — |
| `detach` | Transférer temporairement la licence du produit vers un autre nœud ; le résultat est un fichier H2R | `--product-id` |
| `rehost` | Transférer la clé vers un autre nœud ; le résultat est un fichier V2C, et la licence est retirée du nœud courant | `--key-id` |
| `cancel` | Restituer par anticipation une licence transférée temporairement ; le résultat est un fichier R2H | `--key-id` |
| `version` | Afficher la version de l’utilitaire et la version de l’API du système de protection | — |
| `help` | Afficher l’aide intégrée | — |

### Options

| Option | Description | Acceptée par |
| --- | --- | --- |
| `-i, --in <fichier>` | Données d’entrée | `apply` |
| `-o, --out <fichier>` | Données de sortie ; par défaut `-`, c’est-à-dire stdout | toutes sauf `version` et `help` |
| `-r, --recipient <fichier>` | Bloc recipient du nœud destinataire | `detach`, `rehost` |
| `-k, --key-id <id>` | Identifiant de la clé, décimal | `c2v`, `keys`, `detach`, `rehost`, `cancel` |
| `-p, --product-id <id>` | Identifiant du produit, décimal | `detach` |
| `--duration <durée>` | Durée du transfert temporaire en secondes ; par défaut `120`, au maximum `31536000` | `detach` |
| `--fast` | Instantané d’état réduit ; sur une clé matérielle (HL), un fichier plus petit | `c2v` |
| `--ids` | Afficher uniquement les identifiants des clés, un par ligne | `keys` |
| `-y, --yes` | Ne pas demander de confirmation | `rehost`, `cancel` |
| `-q, --quiet` | Erreurs uniquement | toutes |
| `-v, --verbose` | Journal détaillé des appels au système de protection | toutes |
| `-V, --version` | Afficher les versions et quitter | toutes |
| `-h, --help` | Afficher l’aide | toutes |

Une option qui ne figure pas sur la ligne de sa commande est une erreur de syntaxe, et non un drapeau silencieusement ignoré : l’utilitaire signale par exemple `--key-id is not valid for 'fingerprint'`, et ajoute souvent une ligne indiquant la cause. Les valeurs de `--key-id`, `--product-id` et `--duration` sont uniquement des nombres décimaux à partir de `1` ; zéro est interdit.

### Entrée et sortie

Tout argument de fichier — `--in`, `--out`, `--recipient` — accepte `-` : lecture depuis stdin, écriture sur stdout. Par défaut, la sortie va sur stdout.

Seules les données elles-mêmes — le bloc de licence — vont sur **stdout**. Les messages de succès, les avertissements et les erreurs vont sur **stderr** et commencent par le préfixe `pss_lic:`. Grâce à cela, toute commande peut être redirigée vers un fichier ou un tube sans avoir à analyser la sortie.

Si aucun fichier de sortie n’est indiqué et que stdout est un terminal, les commandes `detach`, `rehost` et `cancel` avertissent que le résultat du transfert se retrouvera à l’écran et sera perdu :

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

Le fichier d’entrée est vérifié avant tout appel au système de protection : un fichier vide, un fichier contenant un octet nul et un fichier de plus de 8 Mio sont rejetés. Une marque d’ordre des octets UTF-8 en début de fichier — certains clients de messagerie et éditeurs en ajoutent une — est supprimée automatiquement.

## Application d’une mise à jour de licence

Le fichier envoyé par le fournisseur est appliqué en une seule commande :

```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 -
```

En cas de succès, stderr affiche :

```
pss_lic: update applied
```

**L’utilitaire ne redémarre pas le service.** Un streamer en fonctionnement conserve l’ancienne licence en mémoire ; après un changement de licence, redémarrez donc le service à la main :

```bash
sudo systemctl restart pss
```

Réappliquer le même fichier n’est pas une erreur : l’utilitaire signale `this V2C is already installed, nothing to do` et se termine avec le code `0`. C’est sur cette propriété que repose la répétabilité du script `activate.sh`.

Ne confondez pas ce message avec le refus `the update is older than the one already installed (stale or rolled-back V2C)` (statut 54) — celui-ci signifie qu’un fichier périmé est appliqué, et il se termine avec le code `1`. Demandez alors un V2C récent au fournisseur.

La commande `apply` applique les trois types de mise à jour : le V2C du fournisseur, le H2R d’un transfert temporaire et le R2H de sa restitution.

## Export des données pour le fournisseur

Une demande d’activation ou d’extension de la licence se construit à partir d’un fichier C2V — un instantané de l’état courant de la clé :

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

Si le nœud voit plusieurs clés, le système de protection ne devinera pas laquelle est visée et répond par le refus `too many keys match the scope` (statut 37). La commande `keys` énumère les identifiants des clés :

```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
```

Sans `--ids`, la commande `keys` imprime la liste des clés et de leurs licences telle que le système de protection la renvoie — un document XML, et non un tableau. Pour choisir une valeur de `--key-id`, la forme `--ids` suffit.

L’option `--fast` demande à la clé un instantané d’état réduit. Sur une clé matérielle (HL), ce fichier est environ un ordre de grandeur plus petit que le fichier complet ; sur une clé logicielle (SL), la taille est la même — seules les données qu’il contient diffèrent.

**Le contenu d’un C2V ne peut pas être lu sur le nœud**, l’identifiant de la clé s’obtient donc avec la commande `keys` et non à partir du fichier lui-même.

**Un C2V — une demande.** N’envoyez pas deux fois le même C2V au fournisseur : le second V2C émis à partir de celui-ci risque de ne s’appliquer que partiellement. Pour une nouvelle demande, réexportez le C2V.

Les commandes `fingerprint` et `recipient` exportent l’empreinte du nœud et le bloc recipient. L’empreinte décrit la machine et est ce dont le fournisseur a besoin lorsqu’il n’y a pas encore de licence sur le nœud : c’est à elle qu’une nouvelle clé logicielle est liée. Le bloc recipient décrit le nœud en tant que destinataire d’un transfert et n’est pas nécessaire au fournisseur mais au second nœud — voir Transfert de la licence vers un autre nœud. Tous deux se rapportent au nœud dans son ensemble et non à une clé particulière ; l’option `--key-id` leur est donc interdite.

## Transfert de la licence vers un autre nœud

Le transfert d’une licence entre nœuds n’est possible que pour une clé logicielle (SL) : une clé matérielle voyage avec l’appareil lui-même et n’est pas concernée par les commandes de l’utilitaire. Une licence d’essai n’est pas transférable. La possibilité du transfert est fixée par les conditions de la licence ; si elle n’est pas prévue, le système de protection répond par le refus `rehost is not allowed for this licence`. Renseignez-vous à l’avance auprès du fournisseur.

> **Avertissement**
>
> `rehost` retire la licence du nœud courant. Le fichier obtenu ne peut être appliqué que sur le nœud dont le bloc recipient a été passé à `--recipient`. Si le fichier est perdu ou si le nœud destinataire est injoignable, la licence est perdue avec lui : il n’existe pas de retour en arrière local. Indiquez toujours `--recipient` et enregistrez le résultat dans un fichier, pas à l’écran.

Le transfert se déroule en trois étapes et concerne les deux nœuds. Ci-dessous, A est le nœud que la licence quitte et B celui vers lequel elle est transférée.

1. Sur le nœud **B**, exporter le bloc recipient et transmettre le fichier au nœud A :

   ```bash
   /opt/pss/tools/pss_lic recipient --out b.rcp
   ```
2. Sur le nœud **A**, transférer la clé. L’utilitaire demandera une confirmation :

   ```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]
   ```

   Vaut confirmation toute réponse commençant par `y` ou `Y` : `yes` confirme aussi bien que `y`. Toute autre réponse, y compris une ligne vide, annule l’opération. La question est posée directement sur le terminal, une redirection de la sortie ne la masque donc pas. En l’absence de terminal — par exemple si la commande est lancée depuis un planificateur — l’utilitaire refuse d’effectuer le transfert et propose d’indiquer `--yes`.
3. Sur le nœud **B**, appliquer le fichier reçu et redémarrer le service :

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

Entre le moment où l’étape 2 est exécutée et celui où l’étape 3 aboutit, la licence n’est présente sur aucun des deux nœuds. Planifiez le transfert de sorte que cet intervalle reste court.

Le fichier obtenu est inutile partout ailleurs que sur le nœud B : sur une autre machine, il donne un refus avec le statut 62. Appliquer sur le nœud A un ancien fichier de la même clé donne le statut 70 ou 71 — la clé a déjà été transférée.

## Transfert temporaire de la licence

`detach` transfère la licence du produit vers un autre nœud pour une durée donnée, `cancel` la restitue par anticipation. Comme le transfert permanent, le transfert temporaire ne fonctionne qu’avec une clé logicielle et seulement si les conditions de la licence l’autorisent ; sinon le système de protection répond par un refus portant le statut 67. Avec une licence d’essai, un tel refus est le résultat attendu, non une défaillance.

L’identifiant du produit Perfect Streamer est `2`. La durée se donne en secondes avec l’option `--duration` ; **la valeur par défaut est de 120 secondes**, indiquez-la donc toujours explicitement en exploitation. La borne supérieure de l’utilitaire lui-même est de `31536000` secondes (un an), mais la limite réelle est fixée par la licence : pour une durée trop longue, le système de protection répond par le refus `invalid duration specified`. La durée demandée n’est qu’une demande : la valeur définitive est déterminée par la clé et peut s’avérer plus courte.

1. Sur le nœud **B**, exporter le bloc recipient et transmettre le fichier au nœud A :

   ```bash
   /opt/pss/tools/pss_lic recipient --out b.rcp
   ```
2. Sur le nœud **A**, transférer la licence pour une journée :

   ```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. Sur le nœud **B**, appliquer le fichier reçu et redémarrer le service :

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

À l’expiration du délai, la licence revient d’elle-même sur le nœud A. La restitution anticipée va dans l’autre sens : le fichier R2H est créé sur le nœud destinataire et appliqué sur le nœud d’origine. Si le délai a déjà expiré à ce moment-là, il n’y a rien à restituer — l’utilitaire signale `the R2H: nothing to write` et se termine avec le code `1`.

1. Sur le nœud **B**, relever l’identifiant de la clé transférée et annuler le transfert :

   ```bash
   /opt/pss/tools/pss_lic keys --ids
   /opt/pss/tools/pss_lic cancel --key-id <id> --out back.r2h
   ```
2. Sur le nœud **A**, appliquer le fichier reçu et redémarrer le service :

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

L’option `--recipient` n’est pas valide pour `cancel` : la licence revient là d’où elle vient. Comme `rehost`, la commande `cancel` demande une confirmation. `detach` elle-même n’en demande pas — le transfert est borné par sa durée et réversible.

Conservez les fichiers intermédiaires avec le même soin que lors d’un transfert permanent : tant que le H2R n’est pas appliqué sur le nœud B, et le R2H sur le nœud A, la licence n’est disponible ni sur l’un ni sur l’autre et ne revient qu’à l’expiration de la durée du transfert.

## Codes de sortie

| Code | Signification |
| --- | --- |
| `0` | L’opération a réussi. Le même code est renvoyé lorsque la mise à jour avait déjà été appliquée |
| `1` | Le système de protection a refusé l’opération — le message indique le numéro de statut. Le même code est renvoyé lorsque l’opération s’est terminée sans données, par exemple `the R2H: nothing to write` |
| `2` | Erreur de syntaxe : commande inconnue, option non valide pour la commande, option obligatoire manquante, valeur non valide. Le même code est renvoyé lorsque l’opérateur a répondu « non » à la demande de confirmation |
| `3` | Erreur d’entrée-sortie : le fichier ne peut pas être ouvert, lu ou écrit |

Deux cas méritent d’être pris en compte dans les scripts. Le refus de l’opérateur de confirmer donne le code `2`, et non `0` : un contrôle « code non nul = panne » prendra l’annulation pour une défaillance. Un fichier d’entrée illisible donne le code `3`, et non `1` : on n’est pas allé jusqu’au système de protection.

```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
}
```

## Messages et diagnostic

Les messages sortent sur stderr avec le préfixe `pss_lic:`. Un refus du système de protection est toujours imprimé sous la même forme — ce qui a échoué, une description en clair de la cause et le numéro de statut — et, pour les causes courantes, une ligne d’indication s’y ajoute :

```
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
```

L’option `-q` supprime les messages de succès — y compris l’avertissement sur l’écriture vers le terminal — mais ni les erreurs ni les indications. L’option `-v` ajoute un journal des appels au système de protection : les requêtes, le nombre d’octets lus et écrits, le nom de la fonction appelée. Lors d’un contact avec le support, joignez précisément la sortie obtenue avec `-v`.

Le groupe de refus le plus fréquent est celui où la clé n’est pas visible ou le service du système de protection ne répond pas (statuts 7, 14, 33, 50 et 80). Vérifiez que le service tourne (`systemctl status aksusbd`), que la clé USB est branchée et que les bibliothèques du fournisseur sont bien dans le répertoire `/var/hasplm` — elles sont installées par le paquet **pstreamer**. Les autres refus figurent dans le tableau ci-dessous ; la première colonne donne le numéro de statut de la ligne de refus, la seconde son texte.

| Statut | Texte du refus | Cause et solution |
| --- | --- | --- |
| 37 | `too many keys match the scope` | Le nœud voit plusieurs clés. Obtenir la liste avec `keys --ids` et préciser `--key-id` |
| 42 | `License Manager version is too old` | La version de **aksusbd** est antérieure à 9.12 ; mettre à jour le paquet du système de protection |
| 47 | `secure storage contains garbage` | Le stockage de la licence est endommagé ; un nouveau V2C du fournisseur est nécessaire |
| 48 | `vendor library cannot be found` | Le répertoire `/var/hasplm` ne contient pas les bibliothèques du fournisseur ; elles sont installées par le paquet **pstreamer** |
| 54 | `the update is older than the one already installed (stale or rolled-back V2C)` | Un V2C périmé est appliqué ; en demander un nouveau au fournisseur |
| 55 | `another update must be installed first` | Le fichier de mise à jour est en avance sur l’état de la clé — une mise à jour intermédiaire a été omise ; exporter un C2V récent et appliquer le V2C émis pour celui-ci |
| 58 | `invalid XML recipient parameter` | Le bloc recipient est corrompu ; le réexporter sur le nœud destinataire |
| 60 | `the scope does not select a unique Product` | Vérifier `--product-id` et, sur un nœud comportant plusieurs clés, ajouter `--key-id` |
| 61 | `invalid Product information` | Vérifier `--product-id` ; pour Perfect Streamer, il vaut `2` |
| 62 | `unknown recipient; this blob may only be applied on the recipient it was made for` | Le fichier a été émis pour une autre machine et n’est applicable que sur elle |
| 63 | `invalid duration specified` | La durée du transfert dépasse ce que la licence autorise |
| 64 | `cloned secure storage detected` | Le stockage de la licence est reconnu comme une copie — conséquence du clonage d’un disque ou d’une machine virtuelle ; demander au fournisseur de rééditer la licence pour cette machine |
| 66 | `the specified key is inactive` | La clé est inactive |
| 67 | `no detachable Feature exists` | Le transfert temporaire n’est pas autorisé par les conditions de la licence |
| 68 | `the scope does not select a unique host` | Le nœud voit plusieurs services du système de protection ; `fingerprint` et `recipient` se rapportent au service, pas à la clé |
| 69 | `rehost is not allowed for this licence` | Le transfert n’est pas autorisé par les conditions de la licence |
| 70 | `the licence was rehosted to another machine` | La clé a déjà été transférée depuis ce nœud |
| 71 | `an old rehost licence is being applied` | Un ancien fichier de transfert est appliqué ; la clé a déjà été transférée depuis ce nœud |
| 77 | `the recipient of the requested operation is older than expected` | Le nœud destinataire exécute un service du système de protection périmé ; le mettre à jour |
| 78 | `secure storage ID mismatch` | Le stockage de la licence appartient à une autre machine ; un nouveau V2C du fournisseur est nécessaire |
| 79 | `duplicate host name while the key uses host name fingerprinting` | Il existe un second nœud portant le même nom sur le réseau ; renommer le nœud ou faire réémettre la licence |
| 94 | `the key and the update are out of sync (update counters diverged)` | Les compteurs de mises à jour de la clé et du fichier ont divergé ; exporter un C2V récent et appliquer le V2C émis pour celui-ci |

Pour chaque statut connu, l’utilitaire imprime une description en clair ; un statut non reconnu est imprimé sous la forme `unrecognised status` avec son numéro.

La commande `keys` est un cas à part : si le système de protection n’a pas accepté le format détaillé de la liste, l’utilitaire imprime la ligne de refus puis répète la demande au format court. La liste est tout de même produite et le code de sortie reste nul ; une telle ligne de refus précédant un résultat normal ne doit donc pas être lue comme une panne.

La commande `version` fonctionne même lorsque le système de protection est en panne — c’est précisément ce qui la rend utile comme première étape du diagnostic. Elle imprime la bannière de l’utilitaire et la version de l’API du système de protection ; si le service du système de protection est indisponible, `unavailable` est imprimé à la place de la version avec un numéro de statut, et le code de sortie reste nul.

## Passage depuis la version 1.2

Dans la version 2.0, la syntaxe positionnelle a été remplacée par des commandes et des options longues ; les anciennes formes ne sont pas prises en charge. À leur saisie, l’utilitaire imprime le remplacement et se termine avec le code `2`.

| En 1.2 | En 2.0 |
| --- | --- |
| `pss_lic u <fichier>` | `pss_lic apply --in <fichier>` |
| `pss_lic i [clé] [fichier]` | `pss_lic c2v [--key-id <clé>] [--out <fichier>]` |
| `pss_lic d <produit> [fichier]` | `pss_lic detach --product-id <produit> [--out <fichier>]` |
| `pss_lic r <clé> [fichier]` | `pss_lic rehost --key-id <clé> [--out <fichier>]` |
| `pss_lic f [fichier]` | `pss_lic fingerprint [--out <fichier>]` |

Le comportement de la sortie a lui aussi changé : en 2.0, seules les données vont sur stdout et les messages sur stderr. Les scripts qui analysaient la sortie mixte de la version 1.2 doivent être corrigés.
