HL-PRC-011 — Proxmox VE — désactivation du message de souscription

HOMELAB
Infrastructure auto-hébergée

PROCÉDURE TECHNIQUE

Désactivation du message de souscription Proxmox VE

Neutralisation de la boîte de dialogue « No valid subscription » à l’ouverture de l’interface web d’administration Proxmox VE sur l’ensemble des nœuds de la grappe.

Référence
HL-PRC-011
Version
1.0
Date d’édition
24/10/2026
Auteur
Administrateur système et réseaux
Classification
Interne
Statut
Validé

Sommaire

Désactivation du message de souscription Proxmox VE — HL-PRC-011

1 Objet

Cette procédure formalise la neutralisation définitive de l’avertissement modal « No valid subscription » apparaissant systématiquement lors de chaque connexion d’un opérateur à l’interface d’administration web (HTTPS/8006) de Proxmox Virtual Environment 9.x. L’opération consiste à modifier la fonction de vérification dans la bibliothèque JavaScript partagée de l’interface graphique (/usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js) puis à recharger le démon mandataire d’interface pveproxy sans interruption de service pour les instances virtualisées.

À l’issue de l’intervention sur les trois hyperviseurs physiques de la grappe (pve1, pve2 et pve3), l’authentification redirige immédiatement vers le tableau de bord sans exiger l’acquittement manuel de la boîte de dialogue. La principale difficulté réside dans le caractère volatil du fichier de toolkit JavaScript, celui-ci étant réécrit à l’identique lors de toute mise à jour du paquet système proxmox-widget-toolkit via le dépôt communautaire pve-no-subscription. La procédure intègre la création d’une copie de sauvegarde horodatée et la méthode de reconduction automatique ou manuelle.

2 Périmètre et prérequis

Périmètre

Couvert : intervention sur l’ensemble des hyperviseurs membres du cluster (pve1, pve2, pve3), modification chirurgicale in-place du fichier proxmoxlib.js par substitution d’expression rationnelle multiligne, redémarrage propre de l’unité systemd pveproxy.service, et validation par rafraîchissement forcé du cache du navigateur client.

Hors périmètre : modification des dépôts de paquets APT (déjà traitée en HL-PRC-003 pour la désactivation de pve-enterprise et l’activation de pve-no-subscription), souscription à une licence commerciale payante de support Proxmox Server Solutions GmbH, modification des composants Proxmox Backup Server (PBS port 8007) ou Proxmox Mail Gateway.

Note Version validée et environnement réel. Intervention validée sur Proxmox VE 9.2.21 (cluster dozylab, nœuds pve1, pve2, pve3 sur Debian 13 trixie avec noyau Linux 7.0.14-12-pve). La syntaxe de substitution est strictement calibrée pour le composant proxmox-widget-toolkit de la branche 9.x.

Prérequis

• Accès privilégié : session interactive root ouverte en local, par console Web shell Proxmox ou par clé SSH directe (pas de sudo) sur chacun des nœuds de la grappe.

• Intégrité du paquet : présence du fichier /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js sur le système de fichiers racine.

• Disponibilité des utilitaires : binaire sed supportant les options étendues (-E, -z) fourni par le paquet standard sed GNU de la base Debian.

• Droit de gestion systemd : autorité sur le service pveproxy.service pour recharger les processus d’écoute.

3 Rôles et responsabilités

RôleResponsabilité
AdministrateurExécute la substitution sed sur chaque nœud, relance le service proxy, valide l’intégrité du code JS.
Détenteur des secretsMaintient les clés de chiffrement et accès d’administration de la grappe dans le coffre Vaultwarden.
ExploitantEffectue les contrôles d’accès web post-modification et signale le retour de la popup après mise à jour système.

Note Homelab individuel. Dans le cadre d’un homelab individuel, l’ensemble de ces rôles est assumé par la même personne physique. La distinction fonctionnelle est conservée afin d’assurer la traçabilité des opérations de maintenance.

4 Procédure de neutralisation de l’avertissement

Paramètres de la procédure

ParamètreDescriptionValeur de référenceContrainte
CLUSTER_NAMENom de la grappe ProxmoxdozylabImmuable
NODES_LISTListe des nœuds de la grappepve1, pve2, pve3Membres actifs
TARGET_FILEChemin absolu du toolkit JS/usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.jsFichier existant
SERVICE_NAMEUnité systemd du serveur web PVEpveproxy.serviceDémon de gestion
BACKUP_EXTExtension de sauvegarde automatique.bakPréservé in-place

Attention Substitution des paramètres. Les blocs de commandes ci-dessous reprennent directement les valeurs réelles appliquées sur le lab (nœud pve3 et répliqué sur pve1 et pve2). Ne jamais coller d’instructions sans avoir confirmé le nœud cible en cours d’administration.

Étapes d’exécution

1. Se connecter au nœud cible et vérifier l’intégrité de la bibliothèque

Avant toute altération, il convient de localiser l’appel à la boîte de dialogue d’abonnement dans le fichier JavaScript du toolkit Proxmox afin de s’assurer que le motif attendu est strictement conforme.

grep -n -C 2 "No valid sub" /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js

Vérification : La commande retourne l’emplacement de la méthode Ext.Msg.show appelant la chaîne gettext('No valid sub'). Si la chaîne n’apparaît pas, le fichier est soit déjà neutralisé, soit d’une version non répertoriée.

2. Appliquer la substitution sed et redémarrer pveproxy

La substitution neutralise l’affichage de la boîte modale en remplaçant l’appel d’affichage Ext.Msg.show({ title: gettext('No valid sub') par une fonction vide void({ //…. L’option -z traite le flux avec des séparateurs nuls pour autoriser les correspondances multilignes, et -i.bak génère immédiatement le fichier de secours proxmoxlib.js.bak.

Exécution de la substitution avec sauvegarde automatique et redémarrage du proxy :
sed -Ezi.bak "s/(Ext.Msg.show\(\{\s+title: gettext\('No valid sub)/void\(\{ \/\/\1/g" /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js && systemctl restart pveproxy.service

Vérification : Le code de retour doit être 0 (commande silencieuse en cas de succès). Vérifier la présence du fichier de sauvegarde .bak et le statut de fonctionnement du démon pveproxy :

ls -l /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js*
systemctl status pveproxy.service --no-pager

3. Répéter l’opération sur l’ensemble des nœuds de la grappe

Chaque serveur de la grappe servant sa propre interface web lors de la navigation sur son adresse IP ou son FQDN d’administration, la commande doit être exécutée à l’identique sur pve1, pve2 et pve3.

Sur le nœud pve1 :
sed -Ezi.bak "s/(Ext.Msg.show\(\{\s+title: gettext\('No valid sub)/void\(\{ \/\/\1/g" /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js && systemctl restart pveproxy.service

Sur le nœud pve2 :
sed -Ezi.bak "s/(Ext.Msg.show\(\{\s+title: gettext\('No valid sub)/void\(\{ \/\/\1/g" /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js && systemctl restart pveproxy.service

4. Purger le cache du navigateur client

Le fichier JavaScript étant agressivement mis en cache par les navigateurs modernes (Chrome, Firefox, Edge), l’interface peut continuer à afficher la popup tant que la ressource locale n’est pas renouvelée.

• Action opérateur : Depuis le navigateur web connecté sur https://<IP_PVE>:8006, exécuter un rechargement forcé en ignorant le cache (raccourci clavier Ctrl + F5 ou Shift + F5).

• Résultat attendu : Après saisie des identifiants root@pam, la console de gestion s’ouvre directement sur le sommaire ou la vue serveur sans qu’aucun encadré « No valid subscription » ne s’interpose.

Retour arrière

En cas d’erreur de syntaxe, d’affichage altéré de l’interface web ou de régression suite à une fausse manipulation, restaurer immédiatement le fichier d’origine depuis la copie de sauvegarde .bak créée à l’étape 2 :

SituationAction
Interface web inaccessible ou erreur JavaScriptcp -a /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js.bak /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js && systemctl restart pveproxy.service
Fichier de sauvegarde .bak manquant ou altéréapt-get install –reinstall proxmox-widget-toolkit && systemctl restart pveproxy.service

Pièges connus

SymptômeCauseRésolution
La boîte de dialogue persiste après exécution de la commandeLe navigateur utilise la version mise en mémoire cache du fichier proxmoxlib.js.Forcer le rafraîchissement complet par Ctrl + F5 ou vider le cache du navigateur.
Le message réapparaît quelques semaines plus tardUne mise à niveau système (apt upgrade) a remplacé le paquet proxmox-widget-toolkit.Réexécuter la commande sed ou placer un script de déclenchement APT post-invoke.
Erreur HTTP 500 ou console blanche au chargement de l’interfaceCorruption accidentelle de la syntaxe JS lors d’une édition manuelle hors expression sed testée.Restaurer immédiatement le fichier .bak ou réinstaller le paquet avec apt-get install –reinstall.

5 Intégration réseau

L’intervention est purement locale à chaque hyperviseur et n’altère aucun paramétrage réseau, table de routage, ni segmentation VLAN (VLAN d’administration 10 / lien d’isolation Corosync 99 établis en HL-PRC-003). Le service pveproxy réouvre instantanément son port d’écoute TCP 8006 sur les adresses du nœud.

NœudRôle dans la grappeAdresse d’administration (VLAN 10)Port d’écoute HTTPS
pve1Nœud cluster PVE 110.10.10.10 (indicatif lab)TCP 8006
pve2Nœud cluster PVE 210.10.10.11 (indicatif lab)TCP 8006
pve3Nœud cluster PVE 3 (hôte PBS)10.10.10.12TCP 8006

6 Durcissement et sécurité

• Non-altération du chiffrement TLS : Le démon pveproxy continue d’utiliser les certificats et clés privées internes situés sous /etc/pve/local/pve-ssl.pem sans aucune modification des contextes de sécurité SSL.

• Gestion stricte des permissions : Le fichier proxmoxlib.js conserve son propriétaire root:root et ses droits de lecture publique (mode 0644), réduisant le risque que le code exécuté par les navigateurs tiers soit altéré.

• Intégrité du code : Aucun binaire externe ou script tiers non audité (style script bash en curl/wget non vérifié) n’est injecté sur l’hyperviseur de production. La substitution est strictement circonscrite à la méthode d’affichage de la souscription.

Dettes techniques

PointImpactÉtat
Écrasement lors des mises à jour systèmeToute nouvelle version de proxmox-widget-toolkit rétablit la popup d’origine.Accepté. Reconduction manuelle ou hook APT /etc/apt/apt.conf.d/99pve-subscription à qualifier.
Support éditeur Proxmox officielEnvironnement sans souscription commerciale, utilisant les dépôts pve-no-subscription.Conforme aux choix du Homelab documentés dans HL-PRC-003.

7 Vérifications finales

ContrôleCritère d’acceptationStatut
Vérification syntaxique dans proxmoxlib.jsgrep "void({ //Ext.Msg.show" /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js retourne 1 résultat☐
Sauvegarde locale préservéetest -f /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js.bak retourne 0 (fichier présent) avec taille cohérente☐
Statut opérationnel du service websystemctl is-active pveproxy.service retourne "active"☐
Test d’accès interface web pve3Connexion sur https://10.10.10.12:8006 : aucune popup affichée après login☐
Test d’accès interface web pve1 & pve2Connexion sur les nœuds 1 et 2 : aucune popup affichée après login☐
Fonctionnement des conteneurs et VMLXC 8010 (hermes) et autres instances restent en état running☐

8 Références et historique des révisions

Documentation éditeur

• Proxmox Server Solutions GmbH : Documentation officielle Proxmox VE Administration Guide 9.x — Package Repositories and Subscriptions.

• Debian Project : Manuel GNU sed(1) — Édition de flux en place et drapeaux de compatibilité POSIX/GNU.

Documents associés

• HL-PRC-003 : Mise en service d’une grappe de virtualisation à trois nœuds (gestion des dépôts pve-no-subscription).

• HL-PRC-009 : Proxmox Backup Server sur hôte Proxmox VE (contexte stockage pve3).

Historique des révisions

VersionDateAuteurModifications
1.024/10/2026Administrateur système et réseauxCréation du document à partir de l’intervention réelle sur le cluster.
Défiler vers le haut