| 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ôle | Responsabilité |
| Administrateur | Exécute la substitution sed sur chaque nœud, relance le service proxy, valide l’intégrité du code JS. |
| Détenteur des secrets | Maintient les clés de chiffrement et accès d’administration de la grappe dans le coffre Vaultwarden. |
| Exploitant | Effectue 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ètre | Description | Valeur de référence | Contrainte |
| CLUSTER_NAME | Nom de la grappe Proxmox | dozylab | Immuable |
| NODES_LIST | Liste des nœuds de la grappe | pve1, pve2, pve3 | Membres actifs |
| TARGET_FILE | Chemin absolu du toolkit JS | /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js | Fichier existant |
| SERVICE_NAME | Unité systemd du serveur web PVE | pveproxy.service | Démon de gestion |
| BACKUP_EXT | Extension de sauvegarde automatique | .bak | Pré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 :
| Situation | Action |
| Interface web inaccessible ou erreur JavaScript | cp -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ôme | Cause | Résolution |
| La boîte de dialogue persiste après exécution de la commande | Le 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 tard | Une 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’interface | Corruption 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œud | Rôle dans la grappe | Adresse d’administration (VLAN 10) | Port d’écoute HTTPS |
| pve1 | Nœud cluster PVE 1 | 10.10.10.10 (indicatif lab) | TCP 8006 |
| pve2 | Nœud cluster PVE 2 | 10.10.10.11 (indicatif lab) | TCP 8006 |
| pve3 | Nœud cluster PVE 3 (hôte PBS) | 10.10.10.12 | TCP 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
| Point | Impact | État |
| Écrasement lors des mises à jour système | Toute 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 officiel | Environnement 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ôle | Critère d’acceptation | Statut |
| Vérification syntaxique dans proxmoxlib.js | grep "void({ //Ext.Msg.show" /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js retourne 1 résultat | ☐ |
| Sauvegarde locale préservée | test -f /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js.bak retourne 0 (fichier présent) avec taille cohérente | ☐ |
| Statut opérationnel du service web | systemctl is-active pveproxy.service retourne "active" | ☐ |
| Test d’accès interface web pve3 | Connexion sur https://10.10.10.12:8006 : aucune popup affichée après login | ☐ |
| Test d’accès interface web pve1 & pve2 | Connexion sur les nœuds 1 et 2 : aucune popup affichée après login | ☐ |
| Fonctionnement des conteneurs et VM | LXC 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
| Version | Date | Auteur | Modifications |
| 1.0 | 24/10/2026 | Administrateur système et réseaux | Création du document à partir de l’intervention réelle sur le cluster. |