Merge remote-tracking branch 'origin/develop' into HEAD

# Conflicts:
#	web/messages/es/docs/monitor/access-auth.json
#	web/messages/es/docs/monitor/api-reference.json
#	web/messages/es/docs/monitor/dashboard/vms-lxcs-app.json
#	web/messages/es/docs/monitor/integrations.json
#	web/messages/es/docs/monitor/notifications.json
#	web/messages/sk/docs/monitor/dashboard/vms-lxcs-updates.json
This commit is contained in:
MacRimi
2026-10-18 16:50:21 +02:00
968 changed files with 124165 additions and 3377 deletions
+254
View File
@@ -0,0 +1,254 @@
{
"site": {
"name": "ProxMenux",
"tagline": "Menu interactif et tableau de bord web pour Proxmox VE"
},
"nav": {
"home": "Accueil",
"docs": "Documentation",
"documentation": "Documentation",
"guides": "Guides",
"changelog": "Journal des modifications",
"github": "GitHub",
"rss": "RSS",
"rssTitle": "Flux RSS",
"menuOpen": "Ouvrir le menu"
},
"footer": {
"sponsorHeading": "Soutenir le projet",
"sponsorBody": "Si vous souhaitez soutenir le projet.",
"sponsorAlt": "Soutenez-moi sur Ko-fi",
"connectHeading": "Communauté",
"connectBody": "Rejoignez les discussions de la communauté sur GitHub pour obtenir de l’aide, partager vos idées et contribuer au projet. Toutes les idées sont les bienvenues !",
"joinDiscussion": "Participer à la discussion",
"copyrightPrefix": "ProxMenux, un projet collaboratif et open source créé par",
"copyrightSuffix": "."
},
"language": {
"switcher": "Langue",
"en": "English",
"es": "Español",
"sk": "Slovenčina",
"de": "Deutsch",
"fr": "Français",
"it": "Italiano",
"pt": "Português",
"sv": "Svenska"
},
"resources": {
"documentation": {
"title": "Documentation",
"description": "Présentation du système et guides d’utilisation"
},
"changelog": {
"title": "Journal des modifications",
"description": "Informations sur les dernières mises à jour"
},
"guides": {
"title": "Guides",
"description": "Tutoriels et guides pas à pas pour les tâches courantes"
},
"github": {
"title": "Dépôt GitHub",
"description": "Consultez le code source."
}
},
"docSidebar": {
"documentation": "Documentation",
"items": {
"introduction": "Introduction",
"installation": "Installation",
"proxmenuxMonitor": "ProxMenux Monitor",
"monitorOverview": "Vue d’ensemble",
"architecture": "Architecture",
"accessAuth": "Accès et authentification",
"dashboard": "Tableau de bord",
"dashboardSystemOverview": "Onglet Vue d’ensemble du système",
"dashboardApps": "Onglet Applications",
"dashboardStorage": "Onglet Stockage",
"dashboardNetwork": "Onglet Réseau",
"dashboardVmsLxcs": "Onglet VM et LXC",
"dashboardVmsLxcsApp": "Application",
"dashboardVmsLxcsUpdates": "Mises à jour",
"dashboardHardware": "Onglet Matériel",
"dashboardSystemLogs": "Onglet Journaux système",
"dashboardTerminal": "Onglet Terminal",
"dashboardSecurity": "Onglet Sécurité",
"dashboardSettings": "Onglet Paramètres",
"healthMonitor": "Surveillance de l’état du système",
"auditReport": "Audit et rapports",
"auditReportOverview": "Vue d’ensemble",
"auditReportAssessment": "Évaluation et inventaire",
"auditReportPolicy": "Politique",
"auditReportChanges": "Modifications",
"auditReportReports": "Rapports et comparaisons",
"auditReportScope": "Périmètre et garanties",
"notifications": "Notifications",
"aiAssistant": "Assistant IA",
"apiReference": "Référence de l’API",
"integrations": "Intégrations",
"ociManager": "OCI manager Apps",
"ociOverview": "Vue d’ensemble",
"ociArchitecture": "Comment une image OCI est adaptée",
"ociCustomImage": "Image absente du catalogue",
"ociStorageNetwork": "Données, chemins et réseau",
"ociHardware": "Périphériques et accélération",
"ociStacks": "Applications à plusieurs conteneurs",
"ociLifecycle": "Installer, mettre à jour et modifier",
"ociMonitor": "Dans ProxMenux Monitor",
"proxmenuxScripts": "ProxMenux Scripts",
"postInstallScript": "Script de post-installation",
"postInstallOverview": "Vue d’ensemble",
"postInstallAutomated": "Automatique",
"postInstallCustomizable": "Personnalisable",
"postInstallBasicSettings": "Paramètres de base",
"postInstallSystem": "Système",
"postInstallVirtualization": "Virtualisation",
"postInstallNetwork": "Réseau",
"postInstallStorage": "Stockage",
"postInstallSecurity": "Sécurité",
"postInstallCustomization": "Personnalisation",
"postInstallMonitoring": "Surveillance",
"postInstallPerformance": "Performances",
"postInstallOptional": "Facultatif",
"postInstallUpdates": "Appliquer les mises à jour disponibles",
"postInstallUninstall": "Supprimer les optimisations",
"gpusCoralTpu": "GPU et Coral TPU",
"nvidiaHost": "Installer les pilotes NVIDIA sur l’hôte",
"coralHost": "Installer Coral TPU sur l’hôte",
"addGpuLxc": "Donner accès à un GPU dans un LXC",
"addCoralLxc": "Donner accès à Coral TPU dans un LXC",
"addGpuVm": "Attribuer un GPU à une VM (passthrough)",
"switchGpuMode": "Changer le mode du GPU (VM ↔ LXC)",
"createVm": "Créer une VM",
"createVmOverview": "Vue d’ensemble",
"createVmSystemNas": "Systèmes NAS",
"createVmSynology": "VM Synology",
"createVmNasOthers": "Autres systèmes NAS",
"createVmSystemWindows": "Systèmes Windows",
"createVmSystemLinux": "Systèmes Linux",
"diskManager": "Gestionnaire de disques",
"diskManagerOverview": "Vue d’ensemble",
"diskImportVm": "Importer un disque dans une VM",
"diskImportImageVm": "Importer une image disque dans une VM",
"diskAddController": "Ajouter un contrôleur ou un périphérique NVMe à une VM",
"diskImportLxc": "Importer un disque dans un LXC",
"diskFormat": "Formater ou effacer un disque physique",
"diskSmart": "État SMART et tests du disque",
"storageShareManager": "Gestion du stockage et des partages",
"storageShareOverview": "Vue d’ensemble",
"hostStorage": "Intégration du stockage à l’hôte",
"hostNfs": "Ajouter un partage NFS comme stockage Proxmox",
"hostSamba": "Ajouter un partage Samba comme stockage Proxmox",
"hostIscsi": "Ajouter une cible iSCSI comme stockage Proxmox",
"hostLocalDisk": "Ajouter un disque local comme stockage Proxmox",
"hostLocalShared": "Créer un répertoire partagé sur l’hôte",
"lxcMountPoints": "Points de montage LXC (hôte ↔ CT)",
"lxcNetworkSharing": "Partages réseau dans LXC",
"lxcNfsClient": "Client NFS dans LXC",
"lxcSambaClient": "Client Samba dans LXC",
"lxcNfsServer": "Serveur NFS dans LXC",
"lxcSambaServer": "Serveur Samba dans LXC",
"network": "Réseau",
"networkOverview": "Vue d’ensemble",
"networkDiagnostics": "Diagnostic",
"networkMonitoring": "Outils de surveillance en temps réel",
"networkBridge": "Analyse et réparation des ponts réseau",
"networkConfig": "Analyse et nettoyage de la configuration",
"networkPersistent": "Noms persistants des interfaces",
"networkBackup": "Sauvegarde et redémarrage des interfaces",
"security": "Sécurité",
"securityOverview": "Vue d’ensemble",
"securityFail2ban": "Fail2Ban",
"securityLynis": "Lynis",
"utilities": "Utilitaires",
"utilsOverview": "Vue d’ensemble",
"utilsUupDump": "Création d’ISO avec UUP Dump",
"utilsSystemUtils": "Installation d’utilitaires système",
"utilsSystemUpdate": "Mise à jour du système Proxmox",
"utilsUpgradePve": "Passer de PVE 8 à PVE 9",
"utilsExportVm": "Exporter une VM au format OVA/OVF",
"utilsImportVm": "Importer une VM depuis OVA/OVF",
"settingsProxmenux": "Paramètres de ProxMenux",
"settingsOverview": "Vue d’ensemble",
"settingsMonitor": "ProxMenux Monitor",
"settingsBeta": "Changer de canal de publication",
"settingsVersion": "Afficher les informations de version",
"settingsUninstall": "Désinstaller ProxMenux",
"commandsReference": "Référence des commandes",
"commandsOverview": "Vue d’ensemble",
"commandsSystem": "Commandes système utiles",
"commandsVmCt": "Gestion des VM et CT",
"commandsStorage": "Stockage et disques",
"commandsNetwork": "Commandes réseau",
"commandsUpdates": "Mises à jour et paquets",
"commandsGpu": "Passthrough GPU",
"commandsZfs": "Gestion de ZFS",
"commandsBackup": "Sauvegarde et restauration",
"commandsTools": "Outils système en ligne de commande",
"glossary": "Glossaire",
"about": "À propos",
"aboutOverview": "Vue d’ensemble",
"aboutFaq": "FAQ",
"aboutContributors": "Contributeurs",
"aboutContributing": "Contribuer",
"aboutCodeOfConduct": "Code de conduite",
"externalRepositories": "Dépôts externes",
"backupRestore": "Sauvegarde et restauration",
"backupRestoreOverview": "Vue d’ensemble",
"backupRestoreHowItWorks": "Fonctionnement",
"backupRestoreDestinations": "Destinations",
"backupRestoreDestOverview": "Vue d’ensemble",
"backupRestoreDestLocal": "Archive locale",
"backupRestoreDestPbs": "Proxmox Backup Server",
"backupRestoreDestBorg": "Borg",
"backupRestoreCreating": "Créer des sauvegardes",
"backupRestoreJobs": "Tâches planifiées",
"backupRestoreRestoring": "Restaurer",
"backupRestoreCrossKernel": "Restauration entre versions du noyau",
"backupRestoreGlossary": "Glossaire"
}
},
"hero": {
"title": "ProxMenux",
"tagline": "Un menu interactif et un tableau de bord web pour Proxmox VE",
"description": "ProxMenux réunit un menu interactif et un tableau de bord web pour Proxmox VE. Exécutez des commandes, des scripts et des assistants depuis le terminal, ou consultez l’état de l’hôte, ses métriques et ses notifications dans un navigateur.",
"installButton": "Installer maintenant",
"whatIsButton": "Qu’est-ce que ProxMenux ?",
"logoAlt": "Logo ProxMenux"
},
"docNav": {
"previous": "Précédent",
"next": "Suivant"
},
"tocPanel": {
"onThisPage": "Sur cette page"
},
"supportProject": {
"heading": "Soutenez le projet !",
"body": "Si <strong>ProxMenux</strong> vous est utile, donnez-lui une ⭐ sur GitHub pour aider d’autres personnes à le découvrir.",
"button": "Ajouter une étoile sur GitHub"
},
"rssLink": {
"heading": "Suivez les nouveautés !",
"body": "Abonnez-vous à notre flux RSS pour être informé des nouveautés.",
"copy": "Copier",
"copied": "Copié !",
"copyTitle": "Copier l’URL du flux RSS",
"openFeed": "Ouvrir le flux RSS",
"openTitle": "Ouvrir le flux RSS"
},
"changelog": {
"pageTitle": "Journal des modifications",
"meta": {
"title": "Journal des modifications de ProxMenux",
"titleSuffix": "Notes de version",
"latest": "Dernière version",
"mostRecent": "Version la plus récente",
"description": "Notes de version et historique des mises à jour de ProxMenux, le script à menus pour administrer Proxmox VE.",
"descriptionTail": "Nouvelles fonctionnalités, corrections de bugs, mises à jour de sécurité, améliorations de ProxMenux Monitor, compatibilité avec les fournisseurs d’IA, sécurisation du passthrough GPU et bien plus.",
"ogDescription": "Notes de version de ProxMenux.",
"ogTail": "Abonnez-vous au flux RSS ou revenez consulter les nouvelles versions."
}
}
}
@@ -0,0 +1,13 @@
{
"meta": {
"title": "Code de conduite | Documentation ProxMenux",
"description": "Code de conduite et bonnes pratiques de ProxMenux pour les contributeurs, les testeurs et les utilisateurs.",
"ogTitle": "Code de conduite | Documentation ProxMenux",
"ogDescription": "Attentes concernant la responsabilité du code, le signalement des vulnérabilités et le périmètre des PR du projet ProxMenux."
},
"errors": {
"notFound": "Erreur : fichier CODE_OF_CONDUCT.md introuvable.",
"loadFailed": "Erreur : Impossible de charger le contenu du Code de conduite."
},
"contentMarkdown": "# 📝 Code de conduite et bonnes pratiques\n\nCe document définit les **principes et les consignes** d’utilisation de **ProxMenux**, afin de promouvoir le **respect, la collaboration et la sécurité** dans le développement.\n\n## 📌 1. Attribution du code et reconnaissance\n\n- Si des **scripts, extraits de code ou idées** proviennent d’autres dépôts ou développeurs, leur auteur d’origine sera toujours cité.\n- Un commentaire dans le code ou la documentation indiquera la source et, si possible, un lien vers le dépôt original.\n- Lors de l’utilisation de code soumis à une **licence** particulière, ses conditions doivent être respectées.\n\n### ✅ Exemple d’attribution correcte dans le code :\n\n```bash\n# Script fondé sur le travail de [Auteur] dans [Lien du dépôt]\n```\n\n## 🔒 2. Sécurité et responsabilité du code\n\n- Tout le code de ce dépôt suit les bonnes pratiques de développement sécurisé.\n- Les contributions introduisant volontairement des vulnérabilités ou des pratiques dangereuses sont interdites.\n- Les scripts ne doivent jamais compromettre la sécurité du système ni les données des utilisateurs.\n- Avant leur mise en œuvre, les contributions doivent être examinées pour vérifier leur sécurité et leur stabilité.\n\n### ⚠️ Divulgation responsable des vulnérabilités\n\nSi vous découvrez une vulnérabilité de sécurité, ne la signalez PAS dans des issues ou forums publics.\n\nSignalez-la plutôt en privé par e-mail :\n\n📧 proxmenux@macrimi.pro\n\nPour en savoir plus sur les vulnérabilités et leur signalement, consultez notre [politique de sécurité](./SECURITY.md).\n\n## 🤝 3. Règles de la communauté\n\nPour maintenir un cadre respectueux et professionnel, tous les utilisateurs doivent suivre ces règles :\n\n- ✅ Restez respectueux et constructifs dans les discussions.\n- ❌ Le harcèlement, les propos haineux et les comportements offensants ne seront pas tolérés.\n- ✅ Formulez vos retours de manière professionnelle, sans attaques personnelles.\n- ❌ Les manquements peuvent entraîner des avertissements ou des exclusions selon leur gravité.\n\n##\n\nCe document encourage un usage éthique du code, la vigilance en matière de sécurité et une communauté respectueuse.\n\n📢 Construisons ensemble quelque chose de remarquable !\n"
}
@@ -0,0 +1,293 @@
{
"meta": {
"title": "Contribution à ProxMenux | ProxMenux Documentation",
"description": "Comment contribuer à ProxMenux : modèle de branches (main / develop / feature/*), processus de pull request, en-tête de script avec attribution et lien de soutien facultatif, interface en deux phases, fonctions de message et passage d’une branche de fonctionnalité à une version stable.",
"ogTitle": "Contribuer à ProxMenux",
"ogDescription": "Modèle de branches, processus, attribution dans l’en-tête et règle d’interface en deux phases à respecter pour contribuer."
},
"header": {
"title": "Contribuer à ProxMenux",
"description": "ProxMenux accueille les contributions de la communauté : nouveaux scripts, corrections, amélioration des dialogues, traductions et intégrations. Cette page présente la structure du dépôt, le modèle de branches, le processus de pull request, l’en-tête avec attribution et lien de soutien facultatif, ainsi que les conventions à respecter.",
"section": "À propos"
},
"twoPagesCallout": {
"title": "Deux pages connexes, un projet",
"body": "Ne confondez pas cette page avec <contributorsLink>Contributeurs</contributorsLink>, qui met à l’honneur les testeurs, relecteurs et développeurs déjà impliqués. Cette page s’adresse à <em>vous</em>, futur contributeur, et explique comment préparer une pull request en vue de son intégration."
},
"branching": {
"heading": "Modèle de branchement",
"intro": "ProxMenux utilise un modèle de branchement à trois niveaux :",
"headerBranch": "Branche",
"headerPurpose": "Objet",
"rows": [
{
"branch": "main",
"purposeRich": "Code stable, prêt pour la production. Seules les modifications prêtes à être publiées sont intégrées ici. C’est la version obtenue lors d’une installation normale de ProxMenux."
},
{
"branch": "develop",
"purposeRich": "Branche de développement actif : tous les nouveaux changements y sont intégrés en premier. Elle correspond au canal « bêta ». Lorsqu’une version stable est prête, elle est publiée dans <code>main</code> à partir de cette branche."
},
{
"branch": "feature/*",
"purposeRich": "Branches temporaires pour une fonctionnalité, une correction ou une amélioration. Créées à partir de <code>develop</code>, puis fusionnées dans <code>develop</code> par pull request après relecture."
}
],
"calloutTitle": "Ce que cela signifie pour les utilisateurs",
"calloutBody": "Les utilisateurs qui suivent <code>main</code> reçoivent des versions testées. Ceux qui souhaitent les nouveautés plus tôt et acceptent quelques imperfections peuvent suivre <code>develop</code>. Les nouvelles fonctions passent toujours d’abord par <code>develop</code> ; rien n’arrive dans <code>main</code> sans ce cycle."
},
"workflow": {
"heading": "Processus de pull request",
"intro": "De l'idée à la version fusionnée en cinq étapes:",
"step1Lead": "<strong>Créer une branche de fonction à partir de <code>develop</code></strong>:",
"step1Code": "git clone https://github.com/MacRimi/ProxMenux.git\ncd ProxMenux\ngit checkout develop\ngit pull origin develop\ngit checkout -b feature/your-feature-name",
"step1Trail": "Utilisez un nom descriptif de branche : <code>feature/zfs-arc-tuning</code>, <code>feature/fix-iommu-detection</code>, <code>feature/add-tailscale-script</code>.",
"step2Lead": "<strong>Travailler sur vos changements et pousser la branche:</strong>",
"step2Code": "# Make your changes, then:\ngit add scripts/...\ngit commit -m \"Add ZFS ARC tuning script\"\ngit push -u origin feature/your-feature-name",
"step3": "<strong>Ouvrez une pull request vers <code>develop</code></strong>, pas vers <code>main</code>. Vérifiez sur GitHub que la branche de base est <code>develop</code>. Décrivez le rôle du script, ses modifications et les versions de Proxmox VE utilisées pour les tests.",
"step4": "<strong>Après relecture, les modifications sont fusionnées dans <code>develop</code>.</strong> Un responsable vérifie le code, les conventions d’en-tête et la règle d’interface en deux phases. S’il demande des corrections, envoyez de nouveaux commits dans la même branche : la PR se met à jour automatiquement.",
"step5": "<strong>Les versions stables passent de <code>develop</code> à <code>main</code>.</strong> Lors d’une publication, <code>main</code> est avancée jusqu’à <code>develop</code> par fast-forward, puis étiquetée. Votre contribution entre dans la prochaine version stable."
},
"scriptHeader": {
"heading": "En-tête de script — métadonnées et description",
"intro": "Chaque script de ProxMenux s'ouvre avec deux blocs de commentaires adjacents qui forment ensemble l'en-tête. Ils sont <strong>tous les deux requis</strong> — ensemble, ils font savoir à tout lecteur qui a écrit le script et ce qu'il fait, le tout sans ouvrir le code lui-même.",
"bullets": [
"<strong>Bloc supérieur : métadonnées.</strong> Auteur, liens GitHub/de soutien facultatifs, responsable, copyright, licence, version et date de mise à jour. C’est aussi la <em>reconnaissance des contributeurs</em> : pour un nouveau script, ajoutez votre nom et, si vous le souhaitez, votre page GitHub et un profil de soutien tel que Ko-fi, GitHub Sponsors ou Buy Me a Coffee.",
"<strong>Bloc inférieur : description.</strong> Un court paragraphe en anglais simple explique le rôle du script. Il se lit <em>avant</em> le code et doit se suffire à lui-même : objectif, actions principales, ressources concernées et prérequis."
],
"licenseCalloutTitle": "La ligne de licence est fixe — GPL-3.0",
"licenseCalloutBody": "ProxMenux est publié sous la licence publique générale <strong>GNU v3.0</strong>. Chaque script du projet est livré sous cette même licence; la ligne <code>License</code> dans l'en-tête est toujours la référence GPL-3.0 montrée dans l'exemple ci-dessous — ce n'est pas un choix par script. En contribuant un script, vous acceptez de le publier sous GPL-3.0, ce qui signifie que n'importe qui peut le lire, le modifier et le redistribuer (y compris les modifications) tant qu'ils le conservent sous la même licence. Le texte entier vit à <licenseLink>MacRimi/ProxMenux/LICENSE</licenseLink>.",
"templateCode": "#!/bin/bash\n\n# ==========================================================\n# ProxMenux - A menu-driven script for Proxmox VE management\n# ==========================================================\n# Author : Your Name\n# GitHub : github.com/yourhandle\n# Sponsor : ko-fi.com/yourhandle\n# Maintainer : MacRimi\n# Copyright : (c) 2026 MacRimi & contributors\n# License : (GPL-3.0) (https://github.com/MacRimi/ProxMenux/blob/main/LICENSE)\n# Version : 1.0\n# Last Updated: DD/MM/YYYY\n# ==========================================================\n# Description:\n# Short paragraph explaining what the script does.\n# Mention the main actions (e.g. \"creates a ZFS pool\",\n# \"configures IOMMU and reboots\", \"imports an ISO into a VM\"),\n# the resources it touches, and any prerequisites the user\n# should be aware of before running it.\n# ==========================================================",
"optionalNote": "Les lignes <code>GitHub</code> et <code>Sponsor</code> sont optionnelles — laissez-les dehors si vous ne voulez pas les publier. Tout le reste est nécessaire.",
"whyCalloutTitle": "Pourquoi cela est important",
"whyCalloutBody": "Contribuer à l’open source est un travail bénévole. Le nom et le lien de soutien éventuel dans le code rendent l’auteur visible à chaque lecture, au lieu de le cacher derrière le projet. La description a un autre rôle : c’est la première chose qu’un futur responsable ou utilisateur curieux lit. Sa clarté détermine souvent si le script inspire confiance ou est évité."
},
"structure": {
"heading": "Structure du projet",
"intro": "Où chaque type de script vit dans le dépôt :",
"treeCode": "scripts/\n├── menus/ # Top-level menu scripts (entry points)\n├── storage/ # Disk, storage and passthrough scripts\n├── share/ # NFS, Samba, local share scripts\n├── vm/ # VM creation and configuration scripts\n├── gpu_tpu/ # GPU / TPU passthrough scripts\n├── post_install/ # Post-install automation scripts\n├── backup_restore/ # Backup and restore scripts\n├── utilities/ # System utility scripts\n├── global/ # Shared helper libraries (sourced by other scripts)\n├── utils.sh # Shared utility functions and message helpers\n└── help_info_menu.sh # Interactive help and command reference",
"outro": "Chaque script charge <code>utils.sh</code> au démarrage avec source pour obtenir les fonctions de message, l’indicateur d’attente, les couleurs et le système de traduction. Les bibliothèques communes dans <code>scripts/global/</code> sont chargées explicitement par les scripts qui les utilisent."
},
"twoPhase": {
"heading": "La règle de conception de l’interface en deux phases",
"intro": "C’est la convention la plus importante de ProxMenux et celle qui entraîne le plus souvent des demandes de correction dans les PR. Chaque script est divisé en <strong>exactement deux phases</strong> :",
"headerPhase": "Phase",
"headerPurpose": "Objet",
"headerScreen": "État de l'écran",
"rows": [
{
"phaseRich": "<strong>Phase 1 — Sélection</strong>",
"purposeRich": "Recueillir chaque décision de l'utilisateur. Effectuer tout travail préparatoire nécessaire (sondes, scans, vérifications).",
"screenRich": "<code>dialog</code> superpositions. Si une sonde entre deux menus prend plus d'une seconde ou deux, montrez un spinner <code>msg_info</code> afin que l'utilisateur sache que le script n'a pas gelé, puis appelez <code>stop_spinner</code> juste avant la boîte de dialogue suivante."
},
{
"phaseRich": "<strong>Phase 2 — Exécution</strong>",
"purposeRich": "Exécutez toutes les opérations. Affichez l'historique complet des progrès accumulés à l'écran.",
"screenRich": "Messages visibles <code>msg_info</code> / <code>msg_ok</code>; jamais <code>dialog</code>."
}
],
"principle": "Le principe: <strong> collecte tout d'abord, puis exécute tout</strong>. L'utilisateur voit un menu de dialogue propre (phase 1), puis une vue d'exécution propre (phase 2). Pas de mélange — pas de dialogue apparaissant au milieu de l'exécution, pas de bruit de progression pendant la sélection.",
"phase1Heading": "Phase 1 — modèle typique",
"phase1Code": "# Silent preparatory work between dialogs\nmsg_info \"$(translate \"Checking disk assignments...\")\"\nASSIGNED_TO=$(check_assignments \"$DISK\")\nstop_spinner # ← clears line silently, result saved in variable\n\n# Next dialog can now use ASSIGNED_TO\nif [ -n \"$ASSIGNED_TO\" ]; then\n dialog --yesno \"$(translate \"Disk already assigned. Continue?\")\" $UI_YESNO_H $UI_YESNO_W\nfi\n\n# Collect multiple decisions per item with parallel arrays\ndeclare -a DISK_LIST=()\ndeclare -a DISK_FORMAT_TYPES=()\ndeclare -a DISK_MOUNT_POINTS=()\nfor DISK in $SELECTED; do\n msg_info \"$(translate \"Analyzing disk...\")\"\n CURRENT_FS=$(lsblk -no FSTYPE \"$DISK\" | xargs)\n stop_spinner\n\n FORMAT=$(dialog --backtitle \"$BACKTITLE\" \\\n --title \"$(translate \"Select Filesystem\")\" \\\n --menu \"...\" $UI_SHORT_MENU_H $UI_SHORT_MENU_W $UI_SHORT_MENU_LIST_H \\\n \"ext4\" \"...\" \"xfs\" \"...\" \"btrfs\" \"...\" \\\n 2>&1 >/dev/tty)\n [ -z \"$FORMAT\" ] && continue\n\n DISK_LIST+=(\"$DISK\")\n DISK_FORMAT_TYPES+=(\"$FORMAT\")\ndone",
"phase1RulesIntro": "Règles <strong> pour la phase 1:</strong>",
"phase1Rules": [
"Si un spinner <code>msg_info</code> est en cours d'exécution et que vous devez ouvrir un menu <code>dialog</code> ou <code>whiptail</code>, appelez d'abord <code>stop_spinner</code> — le spinner ne peut pas coexister avec la superposition dessinée par l'un ou l'autre des outils. Si aucun spinner n'est actif, vous n'avez pas besoin de l'appeler.",
"Utilisez <code>show_proxmenux_logo</code> + <code>msg_title</code> + <code>msg_info</code> pour donner un contexte visuel à une opération longue en phase 1, par exemple une vérification de plus de cinq secondes. La fonction efface déjà l’écran : n’appelez pas <code>clear</code> avant.",
"N'appelez pas <code>show_proxmenux_logo</code> entre les menus de dialogue où il n'y a rien à afficher — le nettoyage de l'écran pour un terminal vide n'est que du bruit visuel.",
"Conservez toutes les décisions et les résultats de la sonde dans des variables ou des tableaux parallèles. La récapitulation visible se produit au début de la phase 2, pas dans la phase 1."
],
"phase2Heading": "Phase 2 — modèle typique",
"phase2Code": "# ── PHASE 2 — EXECUTION ─────────────────────────────\nshow_proxmenux_logo\nmsg_title \"$(translate \"My Script Title\")\"\n\n# Recap Phase 1 preparatory results — show what was already done\nmsg_ok \"$(translate \"CT $CTID selected.\")\"\nmsg_ok \"$(translate \"Repositories verified.\")\"\nmsg_ok \"$(translate \"Disks to process: ${#DISK_LIST[@]}\")\"\n\n# Now execute operations\nfor i in \"${!DISK_LIST[@]}\"; do\n DISK=\"${DISK_LIST[$i]}\"\n FORMAT=\"${DISK_FORMAT_TYPES[$i]}\"\n\n msg_info \"$(translate \"Formatting\") $DISK $(translate \"as\") $FORMAT...\"\n mkfs.\"$FORMAT\" \"$DISK\" >/dev/null 2>&1\n msg_ok \"$(translate \"Formatted.\")\"\ndone\n\nmsg_ok \"$(translate \"Completed. ${#DISK_LIST[@]} disk(s) processed.\")\"\nmsg_success \"$(translate \"Press Enter to return to menu...\")\"\nread -r",
"phase2Rules": "<strong>Règles pour la phase 2:</strong> toujours commencer avec <code>show_proxmenux_logo + msg_title</code>; récapituler immédiatement les résultats de la phase 1 sous la forme de lignes <code>msg_ok</code>; n'appelez plus jamais <code>show_proxmenux_logo</code> (il effacerait les progrès accumulés); n'appelez jamais <code>dialog</code> dans la phase 2 — si une décision d'exécution est vraiment inévitable, utilisez <code>whiptail</code> (voir la section suivante)."
},
"dialogVsWhiptail": {
"headingRich": "Quand utiliser <code>dialog</code> vs <code>whiptail</code>",
"intro": "Les deux outils dessinent des interfaces utilisateur en mode texte, mais ils se comportent très différemment à l'écran — et ProxMenux les utilise en deux phases distinctes pour une raison.",
"headerTool": "Outil",
"headerWhen": "Quand l'utiliser",
"headerEffect": "Effet sur l'écran",
"rows": [
{
"toolRich": "<strong><code>dialog</code></strong>",
"whenRich": "<strong>Toujours dans la phase 1.</strong> Chaque sélection interactive — choisir un VM, un disque, un système de fichiers, confirmer une action — utilise <code>dialog</code>. C'est l'outil d'interface utilisateur par défaut de ProxMenux.",
"effectRich": "Prend le contrôle du terminal : efface l’écran, dessine son interface et rétablit l’état précédent à la fermeture. Cela convient à la phase 1, où aucun résultat utile n’est encore affiché."
},
{
"toolRich": "<strong><code>whiptail</code></strong>",
"whenRich": "<strong>Seulement en phase 2, en cas de nécessité.</strong> Le cas typique est la proposition de redémarrage en fin d’exécution. N’utilisez pas <code>whiptail</code> pour demander « continuer ? » en cours d’exécution : cette décision devait être prise en phase 1.",
"effectRich": "Interface plus légère qui <em>n’efface pas</em> le contexte du terminal. L’historique <code>msg_ok</code>/<code>msg_info</code> de la phase 2 reste visible derrière la boîte de dialogue. Elle convient donc lorsque la progression est déjà affichée."
}
],
"calloutTitle": "Pourquoi la scission est importante",
"calloutBody": "Si vous appelez <code>dialog</code> au milieu de la phase 2, chaque ligne <code>msg_ok</code> que l'utilisateur regarde disparaît. Vous effacez la piste de vérification. <code>whiptail</code> évite cela. Donc la règle n'est pas arbitraire — il s'agit de préserver la vision de l'utilisateur de ce que le script a fait jusqu'ici.",
"rebootHeading": "Proposition de redémarrage : le cas type de whiptail en phase 2",
"rebootIntro": "Si un script peut nécessiter un redémarrage après l’activation d’IOMMU ou la modification du noyau, la question de fin de phase 2 utilise <code>whiptail</code>. Prévoyez toujours une branche « Non » avertissant de ne pas utiliser la ressource concernée avant le redémarrage :",
"rebootCode": "if [[ \"$HOST_REBOOT_REQUIRED\" == \"yes\" ]]; then\n echo \"\"\n if whiptail --title \"$(translate \"Reboot Required\")\" --yesno \\\n \"\\n$(translate \"A host reboot is required before starting the VM. Reboot now?\")\" \\\n 13 78; then\n msg_warn \"$(translate \"Rebooting the system...\")\"\n reboot\n else\n echo \"\"\n msg_info2 \"$(translate \"Do not start the VM until the system has been rebooted.\")\"\n fi\nfi\n\nmsg_success \"$(translate \"Press Enter to return to menu...\")\"\nread -r"
},
"messageFunctions": {
"heading": "Référence des fonctions du message",
"intro": "Toutes sont définies dans <code>utils.sh</code>. Utilisez-les par défaut pour les sorties visibles afin de garder une présentation cohérente entre scripts. Si une fonction manque, par exemple un niveau de sévérité ou un outil de mise en page, proposez-la dans votre pull request. Elle sera examinée et ajoutée à <code>utils.sh</code> si elle est utile à plusieurs scripts.",
"headerFunction": "Fonction",
"headerWhen": "Quand utiliser",
"headerSpinner": "Indicateur de progression",
"rows": [
{
"function": "msg_info \"text\"",
"whenRich": "Opération en cours.",
"spinner": "Démarre"
},
{
"function": "stop_spinner",
"whenRich": "Fin des travaux préparatoires silencieux dans la phase 1 — tue spinner, efface la ligne.",
"spinner": "Arrête"
},
{
"function": "msg_ok \"text\"",
"whenRich": "Opération réussie. À utiliser aussi pour une fonction activée, même si un redémarrage reste nécessaire.",
"spinner": "Arrête"
},
{
"function": "msg_warn \"text\"",
"whenRich": "Avertissement réel ou état dégradé.",
"spinner": "Arrête"
},
{
"function": "msg_error \"text\"",
"whenRich": "Erreur fatale.",
"spinner": "Arrête"
},
{
"function": "msg_info2 \"text\"",
"whenRich": "Conseil sans blocage, dans une ligne d’information cyan.",
"spinner": "Arrête"
},
{
"function": "msg_success \"text\"",
"whenRich": "Message final « Appuyez sur Entrée pour revenir » en fin de phase 2.",
"spinner": "Arrête"
},
{
"function": "msg_title \"text\"",
"whenRich": "Titre gras avec espacement intégré. Utilisé au début de la phase 2.",
"spinner": "—"
},
{
"function": "show_proxmenux_logo",
"whenRich": "Efface l’écran et affiche le logo. À appeler <em>une seule fois</em> au début de la phase 2.",
"spinner": "—"
}
]
},
"dialogConventions": {
"heading": "conventions de dialogue",
"bullets": [
"Passez toujours <code>--backtitle \"$BACKTITLE\"</code> à chaque appel <code>dialog</code> et <code>whiptail</code>. <code>$BACKTITLE</code> est toujours <code>\"ProxMenux\"</code> — réglé une fois à l'en-tête du script et jamais dépassé. L'utilisateur doit toujours voir le nom du projet comme le contexte de cadrage, jamais le propre titre du script.",
"Enveloppez toujours les titres et les messages avec <code>$(translate \"...\")</code>.",
"Redirige toujours la sortie <code>dialog</code> avec <code>2&gt;&amp;1 &gt;/dev/tty</code> — le stdout capturé devient la sélection de l'utilisateur, tandis que la boîte de dialogue elle-même s'appuie sur le terminal.",
"Utilisez les variables standard de dimension UI (<code>$UI_MENU_H</code>, <code>$UI_MSG_W</code>, etc.) pour un calibrage cohérent entre les scripts.",
"Vérifiez toujours les choix vides ou annulés et gérez-les proprement."
],
"exampleIntro": "Exemple complet — construire un menu de sélection VM et gérer l'annulation:",
"exampleCode": "# 1) Build the list of VMs as alternating \"ID NAME\" pairs.\n# dialog --menu expects this exact shape: tag1 description1 tag2 description2 ...\nVM_LIST=\"\"\nfor vmid in $(qm list | awk 'NR>1 {print $1}'); do\n vm_name=$(qm config \"$vmid\" | awk -F': ' '/^name:/ {print $2}')\n VM_LIST=\"$VM_LIST $vmid \\\"$vm_name\\\"\"\ndone\n\n# 2) Show the dialog. Captured stdout is the user's selection (the VMID).\nVMID=$(eval \"dialog --backtitle \\\"\\$BACKTITLE\\\" \\\n --title \\\"\\$(translate \\\"Select VM\\\")\\\" \\\n --menu \\\"\\$(translate \\\"Choose a VM from the list:\\\")\\\" \\\n \\$UI_MENU_H \\$UI_MENU_W \\$UI_MENU_LIST_H \\\n $VM_LIST \\\n 2>&1 >/dev/tty\")\n\n# 3) Empty result means the user pressed Cancel or Esc — exit silently.\nif [ -z \"$VMID\" ]; then\n exit 0\nfi\n\n# 4) Continue with the rest of Phase 1, knowing VMID is now set.\necho \"User selected VMID=$VMID\""
},
"translation": {
"heading": "Politique de traduction",
"intro": "Toutes les chaînes visibles par l'utilisateur doivent être enveloppées avec la fonction <code>translate</code>. ProxMenux les traduit automatiquement dans toutes les langues prises en charge — vous écrivez l'anglais, l'utilisateur lit leur langue maternelle.",
"code": "msg_ok \"$(translate \"Operation completed successfully.\")\"\nmsg_error \"$(translate \"Failed to start container\") $CTID.\"\ndialog --title \"$(translate \"Select Storage\")\" ...",
"bullets": [
"Écrivez les chaînes en anglais : la traduction est gérée automatiquement lors du build.",
"Rédigez des chaînes concises. Évitez si possible les variables dans de longues phrases.",
"Ne traduisez <strong>pas</strong> les noms de variables, chemins ou identifiants techniques."
]
},
"variableStyle": {
"heading": "Conventions de variables et de style",
"bullets": [
"Utilisez <code>UPPER_CASE</code> pour les variables de niveau script.",
"Utiliser <code>lower_case</code> pour les variables de fonction locales (déclarer avec <code>local</code>).",
"Entourez les expansions de variables de guillemets : <code>\"$VAR\"</code>, pas <code>$VAR</code>.",
"Utiliser <code>[[ ]]</code> pour les conditions, et non <code>[ ]</code> (sauf lorsque POSIX est nécessaire).",
"<code>show_proxmenux_logo</code> est le moyen prévu pour effacer l’écran : il le nettoie et affiche le logo du projet pour conserver un contexte visuel. Appelez-le une fois au début de la phase 2, et éventuellement avant une longue attente en phase 1."
],
"standardNamesIntro": "Noms de variables standard dans l'ensemble du projet :",
"standardNamesCode": "CTID # container ID\nVMID # virtual machine ID\nDISK # device path (e.g. /dev/sdb)\nPARTITION # partition path (e.g. /dev/sdb1)\nSTORAGE # Proxmox storage name\nMOUNT_POINT # filesystem mount path",
"redirectHeading": "Réorienter la sortie de l'outil pendant la phase 2",
"redirectIntro": "La phase 2 affiche un journal de lignes <code>msg_info → msg_ok</code>. Si un outil appelé, comme apt, mkfs, qm, pct ou dd, écrit sur stdout/stderr, sa sortie fait défiler les messages et brouille la présentation. L’utilisateur ne distingue plus la progression du script des détails produits par l’outil.",
"withoutRedirectIntro": "<strong>Sans redirection</strong> — ce que l'utilisateur voit si vous ne manipulez pas le bruit:",
"withoutRedirectCode": "ℹ Installing kernel package...\nReading package lists... Done\nBuilding dependency tree... Done\nReading state information... Done\nThe following NEW packages will be installed:\n proxmox-kernel-6.5\n0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.\nNeed to get 12.5 MB of archives.\nAfter this operation, 47.2 MB of additional disk space will be used.\nGet:1 http://download.proxmox.com/debian/pve trixie/pve-no-subscription amd64 ...\n... [200+ more lines of dpkg output] ...\n✓ Kernel installed.",
"withRedirectIntro": "<strong>Avec redirection</strong> — à quoi ressemble la même opération lorsque le bruit est envoyé ailleurs:",
"withRedirectCode": "ℹ Installing kernel package...\n✓ Kernel installed.\nℹ Configuring kernel command line...\n✓ Configured.\nℹ Refreshing boot loader...\n✓ Boot loader updated.",
"twoPatternsIntro": "Deux modèles à choisir :",
"discardLead": "<strong>Éliminez la sortie</strong> lorsque vous n'en avez pas besoin — plus rapide et plus simple:",
"discardCode": "DEBIAN_FRONTEND=noninteractive apt-get install -y \"$package\" >/dev/null 2>&1",
"logLead": "<strong>Envoyez la sortie à un fichier journal</strong> lorsque vous voudrez peut-être l'inspecter plus tard (débogage d'une installation échouée, vérification de ce que dpkg a fait réellement). C'est le modèle préféré pour toute opération apt:",
"logCode": "apt-get install -y \"$package\" >> \"$log_file\" 2>&1",
"referenceOutro": "Le script <code>scripts/global/update-pve9_2.sh</code> est une implémentation de référence — chaque appel <code>apt-get</code> envoie une sortie vers un fichier journal de sorte que l'utilisateur ne voit que le flux propre <code>msg_info → msg_ok</code>, tandis que le journal sur le disque vous permet de reconstruire exactement ce qu'apt a fait si quelque chose tourne mal."
},
"dosAndDonts": {
"heading": "Faites et ne faites pas",
"doHeading": "✅ À faire",
"doBullets": [
"<code>stop_spinner</code> avant un <code>dialog</code> dans la phase 1 seulement quand un spinner <code>msg_info</code> est en cours d'exécution.",
"La phase 2 commence par <code>show_proxmenux_logo + msg_title + msg_ok</code> pour récapituler les résultats de la phase 1.",
"Utilisez <code>msg_ok</code> pour des fonctionnalités activées avec succès, même si un redémarrage est nécessaire.",
"Utilisez le <code>whiptail</code> (et non le <code>dialog</code>) pour toute invitation après exécution qui doit apparaître dans la phase 2.",
"Prévoyez toujours une branche « Non » dans les dialogues de redémarrage pour avertir de ne pas démarrer la ressource concernée avant le redémarrage.",
"Protégez la logique VM uniquement en vérifiant <code>[[ -f \"/etc/pve/qemu-server/$'{'vmid'}'.conf\" ]]</code> — les contrôleurs et NVMe PCIe ne peuvent pas être ajoutés aux conteneurs LXC.",
"Utiliser <code>ensure_repositories</code> de <code>utils-install-functions.sh</code> au lieu de <code>apt-get update</code> inconditionnel.",
"Utiliser des tableaux parallèles dans la phase 1 lorsque chaque élément nécessite plusieurs dialogues."
],
"dontHeading": "❌ À éviter",
"dontBullets": [
"Appelez <code>dialog</code> alors qu'un spinner est actif.",
"Passez la récapitulation de la phase 1 au début de la phase 2.",
"Appelez <code>show_proxmenux_logo</code> une deuxième fois — il efface tout ce que la phase 2 a imprimé.",
"Utiliser <code>dialog</code> dans la phase 2 (utiliser <code>whiptail</code> pour le cas inévitable rare).",
"Utiliser <code>clear</code> seul.",
"Enveloppez <code>msg_title</code> dans des lignes vierges <code>echo \"\"</code> — il inclut déjà l'espacement.",
"Utilisez <code>msg_warn</code> pour signaler une fonctionnalité activée avec succès — c'est un <code>msg_ok</code>.",
"Exécuter sans condition <code>apt-get update</code> — utiliser <code>ensure_repositories</code>."
]
},
"submitting": {
"heading": "Soumettre votre contribution",
"steps": [
"Créez un fork de <code>MacRimi/ProxMenux</code> sur GitHub, puis clonez votre fork.",
"Créer une branche <code>feature/*</code> à partir de <code>develop</code> (voir <em>Modèle de branchage</em> ci-dessus).",
"Suivez ce guide pour tout script nouveau ou modifié. Écrivez l'en-tête avec votre nom; ajoutez la ligne de sponsor optionnelle si vous voulez.",
"Testez le script sur une véritable instance Proxmox VE : phase 1 avec toutes les branches de dialogue, et phase 2 avec chaque opération et son retour arrière propre en cas d’erreur.",
"Ouvrez une pull request <strong>vers <code>develop</code></strong> avec une description claire : rôle du script, changements et version Proxmox VE utilisée pour les tests.",
"Assurez-vous que votre contribution respecte le <cocLink>Code de conduite</cocLink>."
],
"securityOutro": "Pour les questions sensibles à la sécurité, suivez le flux de divulgation dans <securityLink>SECURITY.md</securityLink> plutôt que d'ouvrir une question publique."
},
"whereNext": {
"heading": "Où aller ensuite",
"items": [
{
"kind": "external",
"url": "https://github.com/MacRimi/ProxMenux/blob/main/CONTRIBUTING.md",
"label": "CONTRIBUTING.md (guide complet)",
"tail": "— la source de vérité pour chaque convention, y compris les modèles matériels avancés."
},
{
"kind": "internal",
"href": "/docs/about/contributors",
"label": "Contributeurs",
"tail": " — les personnes dont le travail a façonné les versions de ProxMenux. Il s’agit d’une autre page."
},
{
"kind": "internal",
"href": "/docs/about/code-of-conduct",
"label": "Code de conduite",
"tail": "— les normes que chaque contributeur accepte de respecter."
},
{
"kind": "external",
"url": "https://github.com/MacRimi/ProxMenux/discussions",
"label": "GitHub Discussions",
"tail": "— demander avant de construire si vous n'êtes pas sûr si une idée correspond, ou de trouver des collaborateurs sur une fonctionnalité plus grande."
}
]
}
}
@@ -0,0 +1,38 @@
{
"meta": {
"title": "Contributeurs | Documentation ProxMenux",
"description": "Un hommage aux personnes qui rendent ProxMenux possible : testeurs, relecteurs et développeurs qui contribuent à chaque version.",
"ogTitle": "Contributeurs | Documentation ProxMenux",
"ogDescription": "Rencontrez les contributeurs derrière ProxMenux."
},
"header": {
"title": "Contributeurs",
"description": "Le projet ProxMenux grandit grâce à ses contributeurs. Cette page reconnaît leur travail : tester les versions avant leur publication, détecter les régressions, examiner les PR et orienter les nouvelles fonctionnalités.",
"section": "À propos"
},
"beyond": {
"title": "Au-delà de cette liste",
"body": "De nombreuses autres personnes contribuent en signalant des bugs, en proposant des fonctionnalités dans Discussions, en testant les versions bêta ou en traduisant le projet. La liste complète des contributeurs au code figure dans le <extlink>graphique des contributeurs GitHub</extlink>. La page ci-dessous met en avant les personnes les plus actives dans les tests et la vérification des versions de ProxMenux."
},
"testers": {
"heading": "Testeurs et évaluateurs",
"intro": "Ces personnes ont été parmi les premières à contribuer au projet. Leurs tests, signalements de problèmes et suggestions ont aidé ProxMenux à devenir ce qu’il est aujourd’hui.",
"roles": {
"testing": "Tests",
"testingReviewer": "Tests et relecture"
},
"youtube": "YouTube"
},
"contribute": {
"heading": "Vous voulez contribuer ?",
"intro": "Toute contribution est la bienvenue — code, test, conception, documentation, ou tout simplement partager vos idées:",
"tester": "<strong>Testeur</strong> — essayez le <beta>canal bêta</beta> et signalez ce qui fonctionne ou non avant la publication des versions stables.",
"developer": "<strong>Développeur</strong> — Bash, Next.js (TypeScript) et un peu de Python pour l’environnement virtuel de traduction (venv). Les PR sont les bienvenues sur <gh>GitHub</gh>.",
"designer": "<strong>Designer</strong> — Améliorations de l'interface utilisateur, icônes, captures d'écran pour la documentation.",
"ideas": "<strong>Idées</strong> — ouvrez un sujet dans <disc>GitHub Discussions</disc> avant de créer une issue pour demander une fonctionnalité."
},
"coc": {
"title": "Lisez d'abord le Code de conduite",
"body": "Avant de proposer du code ou de signaler un problème, lisez le <coclink>Code de conduite et les bonnes pratiques</coclink>. Il précise les attentes sur la responsabilité du code, le signalement des vulnérabilités et le périmètre des PR."
}
}
+94
View File
@@ -0,0 +1,94 @@
{
"meta": {
"title": "Questions fréquentes | Documentation ProxMenux",
"description": "Questions fréquentes sur ProxMenux : présentation, installation, compatibilité à partir de PVE 8, personnalisation, mises à jour, sécurité, utilisation en production, fichiers système, contributions et désinstallation.",
"ogTitle": "Questions fréquentes | Documentation ProxMenux",
"ogDescription": "Questions fréquentes sur l’installation de ProxMenux, sa compatibilité, sa sécurité et les façons de contribuer."
},
"header": {
"title": "Foire aux questions",
"description": "Questions courantes sur ProxMenux : présentation, public visé, installation, mise à jour, désinstallation, compatibilité, personnalisation, sécurité et contributions. Si votre question n’est pas ici, consultez GitHub Discussions ou ouvrez une issue.",
"section": "À propos"
},
"quickLinks": {
"title": "Liens rapides",
"installationLabel": "Installation",
"installationSuffix": "— la commande d'installation en une seule ligne + dépendances.",
"introductionLabel": "Présentation",
"introductionSuffix": " — ce que fait ProxMenux, en cinq minutes.",
"uninstallLabel": "Désinstaller",
"uninstallSuffix": " — désinstallation propre.",
"issuesLabel": "GitHub Issues",
"discussionsLabel": "Discussions"
},
"q1": {
"question": "Qu'est-ce que ProxMenux et dans quel cas est-il utilisé?",
"p1Rich": "<strong>ProxMenux</strong> est un outil interactif à menus qui rend <strong>Proxmox VE</strong> accessible à tous, quel que soit le niveau technique. Il simplifie l’exécution des commandes et permet d’agir sur le système sans connaissances avancées de Linux.",
"p2": "Les utilisateurs moins expérimentés exécutent les commandes depuis des menus structurés, avec moins de saisie manuelle dans le terminal. Les administrateurs expérimentés gagnent du temps sur les tâches répétitives : sécurisation après installation, passthrough GPU, importation de VM OVF et rotation des instantanés ZFS.",
"p3": "Proxmox VE est largement utilisé pour:",
"items": [
"Virtualisation de qualité entreprise",
"HomeLab et solutions cloud personnelles",
"Serveurs multimédias, automatisation et plus encore"
]
},
"q2": {
"question": "Comment installer ProxMenux ?",
"p1Rich": "Suivez le <installlink>guide d’installation</installlink>. En résumé :",
"stableInstall": "bash -c \"$(wget -qLO - https://raw.githubusercontent.com/MacRimi/ProxMenux/main/install_proxmenux.sh)\"",
"p2": "Une fois l’installation terminée, lancez simplement :",
"menuCmd": "menu"
},
"q3": {
"question": "ProxMenux est-il compatible avec toutes les versions Proxmox ?",
"bodyRich": "<strong>Non — ProxMenux nécessite Proxmox VE 8 ou une version ultérieure.</strong> PVE 7 et les versions antérieures ne sont pas pris en charge. Passez d’abord de PVE 7 à 8.x en suivant la procédure officielle Proxmox. ProxMenux peut ensuite gérer le passage de 8 à 9 via <upgradelink>Utilitaires → Mettre à niveau PVE 8 vers PVE 9</upgradelink>."
},
"q4": {
"question": "Puis-je personnaliser ProxMenux ?",
"p1Rich": "Les mises à jour peuvent écraser les modifications locales des scripts principaux. Évitez donc de modifier directement ces fichiers. Voici ce que vous <em>pouvez</em> personnaliser :",
"items": [
"La bannière console via l'outil <strong>FastFetch</strong> dans les options Post-Install.",
"Quels composants optionnels sont installés (Monitor, Fail2Ban, Lynis...) — choisissez lors de l'installation ou via le menu correspondant plus tard."
]
},
"q5": {
"question": "Comment mettre à jour ProxMenux?",
"p1Rich": "Lorsqu’une nouvelle version est disponible, ProxMenux la détecte au prochain lancement de <code>menu</code> et propose la mise à jour. Si vous acceptez, les fichiers et la configuration de l’outil sont remplacés dans l’installation existante ; aucun téléchargement manuel n’est nécessaire.",
"p2Rich": "Les utilisateurs de la version stable reçoivent les mises à jour stables, et ceux de la bêta, les mises à jour bêta. Lorsqu’une version stable est publiée, la bêta le signale à la prochaine ouverture du menu et propose de basculer automatiquement. Consultez le <betalink>programme bêta</betalink>."
},
"q6": {
"question": "Où puis-je signaler les problèmes?",
"p1Rich": "Signalez les bogues sur <issueslink>GitHub Issues</issueslink>. Indiquez les étapes pour les reproduire, le message d’erreur et, si nécessaire, la sortie de Monitor obtenue avec <code>journalctl -u proxmenux-monitor -n 50</code>.",
"p2Rich": "Pour les problèmes de <strong>sécurité</strong>, <strong>ne les divulguez pas publiquement</strong>. Suivez la procédure de signalement responsable du <coclink>code de conduite et des bonnes pratiques</coclink>."
},
"q7": {
"question": "Puis-je contribuer au ProxMenux?",
"p1Rich": "<strong>Bien sûr.</strong> ProxMenux est un projet libre et collaboratif. Vous pouvez contribuer au code (Bash, Next.js/TypeScript et outils de traduction en Python), aux tests, à la documentation, au design ou proposer des idées.",
"item1Rich": "Discutez des idées dans <discusslink>GitHub Discussions</discusslink> avant d'ouvrir une demande de fonctionnalité.",
"item2Rich": "Avant de soumettre une pull request, lisez le <coclink>code de conduite et les bonnes pratiques</coclink>.",
"item3Rich": "Consultez la <contriblink>page des contributeurs</contriblink> pour connaître les personnes qui participent actuellement aux tests et aux revues."
},
"q8": {
"question": "Est-ce que ProxMenux modifie les fichiers système critiques?",
"p1Rich": "<strong>L’installation de ProxMenux ajoute les composants suivants.</strong>",
"item1Rich": "Dépendances via apt : <code>dialog</code>, <code>curl</code>, <code>jq</code> et <code>git</code>. Les traductions utilisent des catalogues JSON préconstruits ; l’installateur n’ajoute aucun environnement virtuel de traduction à l’hôte.",
"item2Rich": "L'arborescence des scripts à <code>/usr/local/share/proxmenux/</code>.",
"item3Rich": "Le lanceur situé dans <code>/usr/local/bin/menu</code>.",
"item4Rich": "En option : le service systemd de Monitor, <code>proxmenux-monitor.service</code>.",
"p2Rich": "ProxMenux ne modifie <em>pas</em> la configuration principale de Proxmox, sauf si vous le demandez explicitement depuis un menu dédié. Par exemple, la réparation du réseau modifie <code>/etc/network/interfaces</code>, mais seulement après votre confirmation et la création d’une sauvegarde."
},
"q9": {
"question": "Est-il sûr d'utiliser ProxMenux en production?",
"bodyRich": "<strong>Oui.</strong> ProxMenux ne modifie les fichiers principaux de Proxmox que sur demande explicite et peut donc être utilisé en production. Comme pour toute automatisation, testez d’abord dans un environnement contrôlé et prévoyez des sauvegardes avant les opérations destructives : mise à niveau de PVE 8 vers 9, formatage d’un disque, suppression d’une VM, etc."
},
"q10": {
"question": "Comment désinstaller ProxMenux ?",
"p1Rich": "Dans ProxMenux : <strong>Paramètres → Désinstaller ProxMenux</strong>. La désinstallation supprime l’arborescence des scripts, le lanceur et le service Monitor, ainsi que les dépendances sélectionnées si vous le souhaitez. Elle restaure <code>/root/.bashrc</code> et <code>/etc/motd</code> depuis les sauvegardes créées par Post-Install, si elles existent (sinon, elle supprime la ligne ProxMenux du MOTD).",
"p2Rich": "Étape par étape : <uninstalllink>Désinstaller ProxMenux</uninstalllink>."
},
"q11": {
"question": "VirusTotal affiche l'URL d'installation — est-ce sûr?",
"p1Rich": "Le résultat de 1/95 attribué à <em>Chong Lua Dao</em> et signalé dans l’issue #162 a été identifié par le mainteneur comme un faux positif. L’installateur est lancé par une commande qui télécharge puis exécute le script (<code>bash -c \"$(wget -qLO - …)\"</code>) et peut télécharger <code>jq</code> depuis sa version officielle sur GitHub. Ce <em>comportement</em> peut déclencher des analyses heuristiques ; ce rapport historique ne préjuge pas de tous les téléchargements futurs.",
"p2Rich": "ProxMenux est entièrement open source. Vous pouvez examiner le script d’installation ligne par ligne : <scriptlink>install_proxmenux.sh</scriptlink>. Plus de contexte dans l’<issuelink>issue #162</issuelink>."
}
}
+67
View File
@@ -0,0 +1,67 @@
{
"meta": {
"title": "À propos | Documentation ProxMenux",
"description": "À propos de ProxMenux : objectifs du projet, contributeurs, FAQ et code de conduite. Cet outil de gestion open source à menus pour Proxmox VE 8+ est développé et maintenu par MacRimi avec une petite équipe de testeurs et de contributeurs.",
"ogTitle": "À propos | Documentation ProxMenux",
"ogDescription": "À propos de ProxMenux — un outil de gestion open source à menus pour Proxmox VE 8+."
},
"header": {
"title": "À propos",
"description": "Informations sur le projet, FAQ, contributeurs et code de conduite. ProxMenux est un outil de gestion open source à menus pour Proxmox VE 8+, développé et maintenu par MacRimi avec l’aide d’une petite équipe de testeurs et de contributeurs.",
"section": "À propos"
},
"callout": {
"title": "Open source, porté par la communauté",
"body": "ProxMenux est distribué sous licence GPL-3.0 et développé publiquement sur GitHub. Chaque script peut être examiné et chaque modification retracée. Les contributions sont les bienvenues : signalements de bugs, idées, code et tests."
},
"section": {
"heading": "Dans cette section",
"options": [
{
"icon": "HelpCircle",
"href": "/docs/about/faq",
"title": "FAQ",
"description": "Questions fréquentes : présentation de ProxMenux, installation, compatibilité, personnalisation, mises à jour, sécurité, utilisation en production et désinstallation."
},
{
"icon": "Users",
"href": "/docs/about/contributors",
"title": "Contributeurs",
"description": "Un hommage aux personnes qui rendent ProxMenux possible : testeurs, relecteurs et développeurs qui contribuent à chaque version."
},
{
"icon": "ScrollText",
"href": "/docs/about/code-of-conduct",
"title": "Code de conduite",
"description": "Valeurs du projet, attentes en matière de responsabilité du code et lignes directrices en matière de contribution. Lecture obligatoire avant d'ouvrir un PR ou un rapport."
}
]
},
"involved": {
"heading": "Participer",
"intro": "Trois endroits pour participer au projet :",
"cards": [
{
"href": "https://github.com/MacRimi/ProxMenux/issues/new",
"title": "🐛 Signaler un bug",
"description": "GitHub Issues — joignez les journaux et les étapes pour reproduire le problème."
},
{
"href": "https://github.com/MacRimi/ProxMenux/discussions",
"title": "💡 Proposer une fonctionnalité",
"description": "GitHub Discussions — échangez des idées avant d'ouvrir un PR."
},
{
"href": "https://github.com/MacRimi/ProxMenux/pulls",
"title": "🔀 Proposer une PR",
"description": "GitHub Pull Requests — lisez d’abord le code de conduite."
}
]
},
"support": {
"heading": "Soutenir le projet",
"introRich": "Si ProxMenux vous fait gagner du temps, le moyen le plus simple de le faire découvrir est de <starlink>donner une ⭐ au dépôt sur GitHub</starlink>. Pour aller plus loin :",
"kofiLabel": "Soutien sur Ko-fi",
"kofiOutro": "— achète au responsable un café et continue le développement."
}
}
@@ -0,0 +1,220 @@
{
"meta": {
"title": "Création de sauvegardes — flux de sauvegarde interactif ProxMenux",
"description": "Le processus de sauvegarde interactif de ProxMenux : deux points d’entrée (le menu TUI de Scripts et l’interface web de Monitor), trois destinations, deux modes de profil, une étape de préparation temporaire et une boîte de dialogue de confirmation. Cette page décrit la matrice de six options, les profils par défaut et personnalisé, et ce que voit l’utilisateur entre le choix d’une sauvegarde et l’enregistrement de l’archive à destination.",
"ogTitle": "Sauvegarde ProxMenux — création de sauvegardes",
"ogDescription": "Le processus de sauvegarde interactif avec trois destinations, deux profils et une étape commune de préparation temporaire.",
"twitterTitle": "Création de sauvegardes ProxMenux",
"twitterDescription": "Flux de sauvegarde interactif avec trois destinations et deux modes de profil."
},
"header": {
"title": "Création de sauvegardes",
"description": "Le processus de sauvegarde interactif : choisissez une destination et un profil, vérifiez le récapitulatif de confirmation et suivez l’enregistrement de l’archive. Les deux points d’entrée partagent le même backend et produisent des archives identiques.",
"section": "Sauvegarde et restauration"
},
"intro": {
"title": "Deux points d'entrée, fonctionnalité identique",
"body": "La TUI de Scripts et l’interface web de Monitor offrent <strong>exactement les mêmes fonctions</strong>. Chaque sauvegarde — manuelle ou programmée — utilise la même matrice de choix (trois destinations × deux profils) et appelle la même fonction backend par cellule (<code>_bk_pbs</code>, <code>_bk_borg</code> ou <code>_bk_local</code>). Les archives produites depuis les deux points d’entrée sont identiques. Le choix dépend des préférences : la TUI se prête à SSH et aux scripts ; Monitor permet une utilisation à la souris et regroupe les vues des notifications et du suivi des journaux."
},
"entryPoints": {
"heading": "Les deux points d'entrée",
"rows": [
{
"entry": "ProxMenux Scripts (TUI)",
"path": "menu → Utilities → Host Config Backup",
"detail": "Processus fondé sur des boîtes de dialogue, adapté à SSH. Le menu principal présente directement les six options. Utilise <code>backup_menu</code> dans <code>backup_host.sh</code>."
},
{
"entry": "ProxMenux Monitor (interface utilisateur Web)",
"path": "Backups tab → Create backup",
"detail": "Processus guidé par un assistant. Les six mêmes options sont présentées dans un formulaire en deux étapes (destination → profil). Les mêmes fonctions backend sont appelées via l’API Flask."
}
]
},
"modes": {
"heading": "Sauvegardes manuelles ou programmées",
"body": "Les sauvegardes peuvent être produites en deux modes : <strong>manuel</strong> (le processus interactif décrit sur cette page — l'utilisateur choisit une destination et un profil à partir d'un menu et suit l’enregistrement de l’archive) ou <strong>programmé</strong> (un travail sans surveillance qui fonctionne sur un minuteur de style cron et applique la rétention configurée sur le travail). Les deux modes supportent les mêmes trois destinations et les mêmes deux profils, et les deux sont disponibles à partir des deux points d'entrée — le menu Scripts TUI et l'onglet Sauvegardes Monitor. Les tâches programmées utilisent les mêmes fonctions de backend que le flux manuel à travers <code>run_scheduled_backup.sh</code> ; les archives produites sont indistinguables.",
"seeAlso": "La page des tâches programmées décrit tout le processus, notamment la création d’une tâche, son association à un minuteur vzdump PVE existant et la configuration des valeurs de rétention.",
"monitorAlt": "L'onglet Sauvegardes ProxMenux Monitor affiche la boîte de dialogue Nouvelle sauvegarde programmée avec les champs destination, profil, calendrier et conservation.",
"monitorCaption": "Sauvegarde programmée — ProxMenux Monitor. La même boîte de dialogue de style assistant qui crée une sauvegarde manuelle porte les champs de planning et de rétention en bas pour le chemin sans surveillance."
},
"matrix": {
"heading": "La matrice de six options",
"intro": "Le choix détermine le backend exécuté et la stratégie de sélection des chemins. Consultez les pages de chaque destination pour connaître les détails de configuration de chaque cellule.",
"rows": [
{
"combo": "1",
"destination": "PBS",
"profile": "Par défaut",
"action": "Envoie le profil par défaut et les ajouts persistants vers un dépôt PBS configuré."
},
{
"combo": "2",
"destination": "Borg",
"profile": "Par défaut",
"action": "Crée une archive avec le profil par défaut plus des extras persistants dans le dépôt Borg sélectionné."
},
{
"combo": "3",
"destination": "Locale",
"profile": "Par défaut",
"action": "Écrit une archive <code>.tar.zst</code> avec le profil par défaut et des suppléments persistants à la cible locale configurée."
},
{
"combo": "4",
"destination": "PBS",
"profile": "Personnalisé",
"action": "Ouvre le sélecteur de chemins avant l’envoi vers PBS ; l’utilisateur coche les chemins et peut en ajouter."
},
{
"combo": "5",
"destination": "Borg",
"profile": "Personnalisé",
"action": "Ouvre le sélecteur de chemin avant la création de l'archive Borg."
},
{
"combo": "6",
"destination": "Locale",
"profile": "Personnalisé",
"action": "Ouvre le sélecteur de chemin avant d'écrire le <code>.tar.zst</code> local."
}
]
},
"profiles": {
"heading": "Profil par défaut vs personnalisé",
"defaultTitle": "Profil par défaut",
"defaultBody": "Le profil par défaut est la liste prédéfinie de <code>hb_default_profile_paths</code> (documentée dans <em>Comment ça marche</em> sous <em>Catégories de chemins</em>) plus chaque entrée dans le fichier supplémentaire persistant <code>/usr/local/share/proxmenux/backup-extra-paths.txt</code>. L'utilisateur confirme les options de destination et de chiffrement et la sauvegarde se déroule sans autre sélection de chemin.",
"customTitle": "Profil personnalisé",
"customBody": "Le profil personnalisé ouvre une liste à cocher avec tous les chemins du profil par défaut (décochés) et tous les ajouts persistants (précochés, avec le préfixe <code>[+]</code>). L’utilisateur coche les chemins pour cette exécution et peut cliquer sur <em>Ajouter un chemin personnalisé</em> pour ajouter un chemin absolu. Tout chemin ainsi ajouté est enregistré dans <code>backup-extra-paths.txt</code> afin que les sauvegardes suivantes l’incluent automatiquement. Décocher un ajout persistant l’exclut de cette exécution sans le supprimer du fichier — la suppression se fait séparément par <em>Gérer les chemins personnalisés</em>, en dehors du processus de sauvegarde.",
"customPickerAlt": "Liste de contrôle de profil personnalisé montrant les chemins de profil par défaut (non coché) et les extras persistants (pré coché avec un préfixe [+]), ainsi que des boutons pour ajouter un nouveau chemin ou confirmer la sélection.",
"customPickerCaption": "Profil personnalisé — le sélecteur de chemins. Les chemins du profil par défaut sont décochés ; les ajouts persistants sont précochés avec le préfixe [+]. L’utilisateur coche les chemins pour cette exécution.",
"manageCustomAlt": "Menu de gestion des chemins personnalisés montrant les ajouts persistants et les options pour les ajouter, les supprimer ou les modifier.",
"manageCustomCaption": "Gérer les chemins personnalisés — le point d'entrée où des extras persistants sont ajoutés ou supprimés. Chaque chemin listé ici est automatiquement inclus dans les sauvegardes en mode Défaut sans avoir à ouvrir le sélecteur personnalisé."
},
"commonPipeline": {
"heading": "Ce qui s’exécute quelle que soit la destination",
"intro": "Une fois le profil défini, chaque backend suit le même processus de préparation temporaire avant de passer à sa propre méthode d’envoi. <code>hb_prepare_staging</code> assemble l’arborescence de l’archive dans <code>/tmp/proxmenux-DESTINATION-stage.XXXXXX</code> et remplit chacun des trois blocs de données.",
"steps": [
{
"step": "1",
"name": "Assemblage du rootfs",
"detail": "Exécute <code>rsync -a</code> pour chaque chemin sélectionné dans <code>staging_root/rootfs/</code>. La base de données pmxcfs de <code>/var/lib/pve-cluster/config.db</code> est capturée séparément via <code>sqlite3 .backup</code> pour produire un instantané cohérent sans arrêter le cluster, et les sidecars <code>.db-wal</code> / <code>.db-shm</code> sont exclus du rsync; lorsque <code>sqlite3</code> n'est pas disponible, un fichier <code>config.db.raw-fallback</code> est créé puis utilisé comme base de données lors de l’importation. Les sous-chemins volatils (historique bash, caches, poubelles) sont exclus du <code>/root/</code>. Les chemins absents de la source sont enregistrés dans <code>metadata/missing_paths.txt</code> sans arrêter la sauvegarde."
},
{
"step": "2",
"name": "Génération de manifestes",
"detail": "<code>build_manifest.sh</code> coordonne les six collecteurs et écrit <code>manifest.json</code> à la racine du répertoire temporaire. Si un collecteur échoue, la section concernée reçoit une valeur vide par défaut documentée ; le manifeste reste valide."
},
{
"step": "3",
"name": "Inventaire des paquets",
"detail": "<code>apt-mark showmanual</code> est capté mot à mot dans <code>metadata/packages.manual.list</code>. L'état des composants est déjà à l'intérieur des rootfs restauré (<code>components_status.json</code>) car <code>/usr/local/share/proxmenux/</code> fait partie du profil par défaut."
},
{
"step": "4",
"name": "Informations sur l’exécution",
"detail": "<code>metadata/run_info.env</code> enregistre l'identité d'exécution de sauvegarde — nom d'hôte, horodatage, version du noyau — utilisée par la vérification de compatibilité de la restauration pour déterminer la direction du cross-kernel."
},
{
"step": "5",
"name": "Notification (démarrage)",
"detail": "<code>hb_notify_lifecycle \"start\"</code> est déclenché. Si les notifications sont configurées dans Monitor, un événement <em>Sauvegarde de l’hôte démarrée</em> est envoyé à l’utilisateur. Aucun envoi si aucun canal n’est configuré."
}
]
},
"included": {
"heading": "Ce qui entre et ce qui reste en dehors",
"intro": "Chaque chemin dans le profil résolu (par défaut + suppléments persistants + sélection en mode personnalisé) est copié avec <code>rsync -aAXH --numeric-ids</code>. Une liste d'exclusion partagée s'applique à chaque chemin, et deux répertoires comportent d'autres exclusions spécifiques au chemin.",
"globalTitle": "Les exclusions globales (appliquées à chaque voie)",
"globalItems": [
"<code>images/</code> — images de disque exportées.",
"<code>dump/</code> — sorties vzdump.",
"<code>tmp/</code> — fichiers temporaires.",
"<code>*.log</code> — fichiers journaux."
],
"rootTitle": "Exclusions de <code>/root/</code>",
"rootBody": "<code>/root/</code> fait partie du profil par défaut, de sorte que les scripts utilisateur et la configuration se trouvent dans l'archive. Les sous-chemins volatils sont abandonnés:",
"rootItems": [
"<code>.bash_history</code>",
"<code>.cache/</code>",
"<code>tmp/</code>",
"<code>.local/share/Trash/</code>"
],
"proxmenuxTitle": "Exclusions de <code>/usr/local/share/proxmenux/</code>",
"proxmenuxBody": "Ce répertoire ne livre que l'état utilisateur — <code>components_status.json</code>, préférences, cache post-installation. Code que la destination aura déjà de sa propre installation ProxMenux est exclu de sorte qu'une restauration n'écrase pas les binaires actuels de la cible avec les plus anciens:",
"proxmenuxItems": [
"<code>restore-pending/</code>, <code>scripts/</code>, <code>web/</code>",
"<code>monitor-app/</code>, <code>monitor-app.*/</code>, <code>AppImage/</code>",
"<code>images/</code>, <code>json/</code>",
"<code>utils.sh</code>, <code>helpers_cache.json</code>",
"<code>ProxMenux-Monitor.AppImage*</code>, <code>install_proxmenux*.sh</code>"
],
"notInProfileTitle": "Chemins en dehors du profil",
"notInProfileBody": "Tout ce qui n'est pas listé dans <code>hb_default_profile_paths</code> et qui n'est pas ajouté en tant qu'extra personnalisé ou persistant ne fait pas partie de la sauvegarde. Exemples notables:",
"notInProfileItems": [
"<strong>Disques des VM et des LXC</strong> — manipulés par <code>vzdump</code>, pas par cette fonctionnalité. Les fichiers de configuration invités sous <code>/etc/pve/nodes/*/qemu-server/*.conf</code> et <code>lxc/*.conf</code> sont capturés (ils vivent sous <code>/etc/pve</code>) de sorte que la restauration reproduit l'inventaire; les disques eux-mêmes sont ré-attachés à partir d'une sauvegarde existante vzdump/PBS.",
"<strong><code>/boot</code> et <code>/boot/efi</code></strong> — les binaires du noyau, les initramfs et la partition ESP UEFI sont régénérés par les propres <code>update-initramfs</code>, <code>update-grub</code> ou <code>proxmox-boot-tool refresh</code> après la restauration. Le chargeur de démarrage n’est jamais recopié à l’identique.",
"<strong>Les systèmes de fichiers de noyau et d'exécution du système</strong> — <code>/proc</code>, <code>/sys</code>, <code>/dev</code> et <code>/run</code> sont des pseudo-systèmes de fichiers produits par le noyau et l'udev; ils ne persistent nulle part.",
"<strong>Binaires des paquets sous <code>/usr/bin</code>, <code>/usr/lib</code>, <code>/lib</code>, <code>/sbin</code></strong> — réinstallés par APT sur la cible à partir de <code>packages.manual.list</code>.",
"<strong><code>/var/log/</code>, <code>/var/tmp/</code>, <code>/var/cache/</code></strong> — état d'exécution par hôte, non restauré.",
"<strong><code>/home/USER</code></strong> — pas dans le profil par défaut. Ajoutez-le comme un chemin personnalisé lorsqu'un système transporte des répertoires d'utilisateur qui doivent survivre à une restauration."
],
"customPathsTitle": "Comment les chemins personnalisés sont gérés",
"customPathsBody": "Un chemin personnalisé ajouté en ligne en mode personnalisé ou maintenu dans <code>backup-extra-paths.txt</code> passe par le même pipeline <code>rsync</code> que les chemins de profil par défaut. Les exclusions globales s'appliquent. Si le chemin personnalisé se trouve sous <code>/root/</code> ou <code>/usr/local/share/proxmenux/</code>, les exclusions spécifiques au chemin ci-dessus s'appliquent toujours. Chaque chemin archivé — par défaut ou personnalisé — est enregistré dans <code>metadata/paths_archived.txt</code>. Les chemins qui n'existent pas sur la source sont enregistrés dans <code>metadata/missing_paths.txt</code> sans arrêter la sauvegarde."
},
"archiveStructure": {
"heading": "Structure des archives",
"intro": "Le répertoire de préparation temporaire produit par chaque moteur suit la même disposition quelle que soit la destination. L'archive tarball, PBS <code>.pxar</code> ou Borg stocke cet arbre dans son intégralité.",
"tree": "backup-[timestamp]/\n├── manifest.json # structured host state (kernel_params, hardware, storage, guests, components, source_host)\n├── metadata/\n│ ├── packages.manual.list # output of apt-mark showmanual\n│ ├── run_info.env # hostname, timestamp, kernel version, pmxcfs method\n│ ├── paths_archived.txt # exact list of paths that reached rootfs/\n│ └── missing_paths.txt # paths from the profile absent on source\n└── rootfs/\n ├── etc/ # /etc/pve, /etc/network, /etc/systemd/network, /etc/ssh, /etc/apt, ...\n ├── root/ # /root without volatile subpaths\n ├── usr/local/ # /usr/local/bin, /usr/local/sbin, /usr/local/share/proxmenux (state only)\n └── var/ # /var/lib/pve-cluster (config.db via sqlite3 .backup), /var/spool/cron/crontabs"
},
"confirmation": {
"heading": "Résumé de la confirmation",
"body": "Avant que le moteur n'écrive quoi que ce soit à la destination, ProxMenux affiche une boîte de dialogue de résumé avec la destination, l’identifiant de sauvegarde ou le nom de l’archive, l'état de chiffrement et la liste des chemins copiés. Annuler ici avorte la sauvegarde proprement — le répertoire temporaire est supprimé par le gestionnaire <code>trap</code> défini dans la fonction backend et aucune donnée partielle n'arrive à destination."
},
"writing": {
"heading": "Écrire à la destination",
"intro": "Après confirmation, chaque backend exécute sa propre étape d’écriture. Les pages des destinations en décrivent le fonctionnement ; les éléments communs sont le journal, le fichier annexe et la notification de fin.",
"rows": [
{
"topic": "Fichier journal",
"detail": "Chaque moteur écrit sa sortie complète sur <code>/tmp/proxmenux-DESTINATION-backup-YYYYMMDD_HHMMSS.log</code> et, en cas d'échec, propose de l'ouvrir dans une boîte de dialogue défilante. Le chemin du journal n'est imprimé dans le résumé d'achèvement que lorsque le fichier contient du contenu."
},
{
"topic": "Sidecar (local seulement)",
"detail": "<code>hb_write_archive_sidecar</code> dépose un <code>*.proxmenux.json</code> à côté de l'archive locale afin que le moniteur l'identifie comme une sauvegarde d'hôte ProxMenux même après des déplacements ou des renoms."
},
{
"topic": "Notification (réussite/échec)",
"detail": "<code>hb_notify_lifecycle \"complete\"</code> ou <code>\"fail\"</code> est déclenché avec la durée, la taille de l’archive et — en cas d’échec — la dernière ligne du journal qui ressemble à une erreur."
}
]
},
"finishedScreens": {
"heading": "A quoi ressemble une sauvegarde terminée",
"intro": "Le même événement d'achèvement est présenté par les deux points d'entrée. Le TUI écrit un bloc de résumé au terminal; l'onglet Sauvegardes de Monitor affiche l'exécution dans la liste des archives avec la taille, la durée et les badges d'état.",
"scriptsAlt": "ProxMenux Scripts TUI montrant une sauvegarde d'hôte terminée — destination, ID de sauvegarde, chemin instantané, taille des données, durée et état de chiffrement.",
"scriptsCaption": "Sauvegarde terminée — ProxMenux Scripts (TUI). Le bloc d'achèvement imprime la destination, l'ID de sauvegarde, le nom d'instantané ou d'archive, la taille des données, la durée et l'état de chiffrement.",
"monitorAlt": "Onglet de sauvegarde ProxMenux Monitor montrant une entrée de sauvegarde d'hôte terminée avec taille, durée, badge de méthode et indicateur de chiffrement.",
"monitorCaption": "Sauvegarde terminée — onglet Sauvegardes ProxMenux Monitor. La nouvelle sauvegarde apparaît dans la liste des archives avec le badge de la méthode de destination, la taille, la durée et, le cas échéant, l'indicateur de verrouillage de chiffrement."
},
"whereNext": {
"heading": "Où aller ensuite?",
"items": [
{
"label": "Destinations",
"href": "/docs/backup-restore/destinations",
"tail": "— détails de configuration pour Local, PBS et Borg."
},
{
"label": "Tâches programmées",
"href": "/docs/backup-restore/scheduled-jobs",
"tail": " — exécuter la même sauvegarde sans intervention selon un calendrier, plutôt que de façon interactive."
},
{
"label": "Restauration",
"href": "/docs/backup-restore/restoring",
"tail": "— le flux qui consomme ce que cette page produit."
}
]
}
}
@@ -0,0 +1,170 @@
{
"meta": {
"title": "Restauration entre noyaux différents — détection, filtrage et adaptation | ProxMenux",
"description": "Comment ProxMenux restaure une sauvegarde d’hôte sur une version principale différente du noyau. Détection du sens de l’écart, filtre des chemins critiques si la cible utilise un noyau plus récent et adaptation en quatre phases pour réappliquer IOMMU, ID VFIO et paramètres de ligne de commande sans recopier tels quels les fichiers liés au noyau.",
"ogTitle": "ProxMenux Backup — restauration entre versions du noyau et adaptation",
"ogDescription": "Restauration entre versions du noyau tenant compte du sens du changement, avec filtrage sûr et adaptation indépendante du noyau.",
"twitterTitle": "Restauration entre noyaux différents | ProxMenux",
"twitterDescription": "Comment ProxMenux gère une restauration lorsque le noyau cible diffère de celui de la sauvegarde."
},
"header": {
"title": "Restauration entre versions du noyau",
"description": "Comment ProxMenux gère une restauration lorsque l'hôte cible exécute un noyau différent de celui enregistré dans la sauvegarde, surtout lorsque la cible exécute un noyau plus récent. Explique comment la différence est détectée, comment les chemins critiques de démarrage qui pourraient briser la cible sont filtrés, et comment la configuration propre de l'utilisateur est réappliquée sans copier les fichiers liés au noyau mot pour mot.",
"section": "Sauvegarde et restauration"
},
"intro": {
"title": "Chaque saut du noyau est géré différemment",
"body": "Le noyau d'un hôte Proxmox est identifié par une chaîne de version comme <code>6.17.13-2-pve</code>. Les deux premiers nombres (<strong>6.17</strong> dans cet exemple) définissent la version principale : lorsqu'ils changent, certains fichiers de configuration écrits pour le noyau précédent peuvent ne pas être valides sur le nouveau. Lorsque la restauration détecte que la sauvegarde et la cible ont différentes versions majeures du noyau, les branches de flux basées sur la direction du saut — que la sauvegarde soit plus ancienne ou plus récente que la cible — parce que les deux cas ont des modes de défaillance opposés. Les sauvegardes plus récentes que la cible restaurent proprement comme-est (vérifiées sur plusieurs sauts du noyau). Les sauvegardes plus anciennes que la cible ont besoin d'un filtre pour éviter de casser le démarrage de la cible avec une configuration écrite pour un noyau qui a depuis changé."
},
"directionCheck": {
"heading": "Le contrôle de direction",
"intro": "Lors de la vérification de compatibilité, <code>hb_compat_check</code> compare le noyau enregistré dans le manifeste de sauvegarde au noyau courant de la cible (<code>uname -r</code>) et classifie la restauration dans l'un des trois cas, stockés dans la variable interne <code>HB_COMPAT_KERNEL_DIRECTION</code>:",
"rows": [
{
"direction": "same",
"condition": "La version principale du noyau correspond entre la sauvegarde et la cible.",
"behavior": "Le flux complet de restauration est inchangé. Pas de filtre supplémentaire, pas d'hydratation, pas de notice spéciale dans l'interface utilisateur."
},
{
"direction": "bk_newer",
"condition": "Le noyau de la sauvegarde est PLUS RÉCENT que celui de la cible (exemple : sauvegarde sous 7.0, cible sous 6.17).",
"behavior": "Le processus complet reste inchangé, comme pour <code>same</code>, sans filtre. Les essais rapportés ont montré la réinstallation des pilotes pour le noyau cible, l’application de la configuration IOMMU et le démarrage des VM avec passthrough GPU."
},
{
"direction": "bk_older",
"condition": "Le noyau de la sauvegarde est PLUS ANCIEN que celui de la cible (exemple : sauvegarde sous 6.17, cible sous 7.0).",
"behavior": "Le filtre sous-ensemble et l'hydratation en quatre phases ci-dessous sont activés. Le processus de restauration — la cible reproduit la source, mais les fichiers critiques de démarrage ne sont pas copiés mot à mot."
}
]
},
"whyBkNewerIsSafe": {
"heading": "Pourquoi une sauvegarde avec un noyau plus récent que la cible restaure inchangé",
"body": "Lorsque la restauration s'exécute contre une cible avec un noyau <em>plus ancien</em> que celui enregistré dans la sauvegarde, chaque mécanisme dont dépend la restauration est indépendant de la version du noyau. Les installateurs de pilotes GPU et d'autres installateurs PCI détectent le noyau en cours d'exécution avec <code>uname -r</code> et compilent DKMS contre tout ce que la cible a. Le paquet APT installe tire des binaires construits pour la distribution de la cible. Les jetons IOMMU cmdline comme <code>intel_iommu=on</code> sont stables dans les principales versions du noyau. La sauvegarde porte des chemins écrits sous un noyau plus récent, mais ces chemins (module blacklists, GRUB par défaut, initramfs config) sont toujours valides sur l'ancien — les noyaux ignorent les jetons qu'ils ne reconnaissent pas au lieu d'échouer. Ce cas est équivalent en pratique à une restauration du même noyau, et ProxMenux le traite comme tel."
},
"safeSubsetFilter": {
"heading": "Le filtre de sous-ensemble de sécurité (uniquement lorsque le noyau cible est plus récent)",
"intro": "Lorsque le noyau cible est plus récent que celui de la sauvegarde, la vérification de compatibilité ajoute des chemins critiques de démarrage 16 de <code>hb_unsafe_paths_cross_version</code> à <code>RS_SKIP_PATHS</code>. Ces chemins sont exclus de la restauration parce que l'écriture d'une version d'un noyau plus ancien sur une cible en cours d'exécution d'un nouveau a causé des paniques du noyau dans les tests de banc. Les chemins couvrent cinq catégories:",
"categoryRows": [
{
"category": "Chargeur d'amorçage",
"paths": "<code>/etc/default/grub</code>, <code>/etc/kernel</code>",
"reason": "GRUB est lié à l'ordre du noyau précédent, et à l'état proxmox-boot-tool (cmdline, ESP UUIDs, crochets) qui fait référence aux chemins et aux identifiants de l'ancienne installation."
},
{
"category": "Modules de noyau et artefacts de démarrage",
"paths": "<code>/etc/modules-load.d</code>, <code>/etc/modprobe.d</code>, <code>/etc/initramfs-tools</code>",
"reason": "Autoload listes qui peuvent renvoyer des modules rebaptisés entre les majors du noyau, options de module qui peuvent ne pas s'appliquer, initramfs crochets écrits pour l'ancien noyau."
},
{
"category": "Empilement de stockage et identité du système de fichiers",
"paths": "<code>/etc/fstab</code>, <code>/etc/multipath</code>, <code>/etc/iscsi</code>, <code>/etc/udev/rules.d</code>, <code>/etc/zfs</code>",
"reason": "UUID qui peuvent ne pas exister sur cette installation, pilotes multipath qui changent entre les noyaux, paramètres iSCSI qui évoluent, règles udev qui peuvent se lier à des sous-systèmes inexistants, état ZFS (<code>zpool.cache</code> + <code>hostid</code>) qui peuvent verrouiller le pool comme étranger."
},
{
"category": "Sources APT",
"paths": "<code>/etc/apt</code>",
"reason": "Les suites sources APT peuvent déclencher une dégradation des paquets critiques lors de la prochaine mise à jour."
},
{
"category": "systemd",
"paths": "<code>/etc/systemd/system</code>, <code>/etc/systemd/journald.conf</code>, <code>/etc/systemd/logind.conf</code>, <code>/etc/systemd/system.conf</code>, <code>/etc/systemd/user.conf</code>",
"reason": "Surcharges d’unités et liens .wants liés à une ancienne version majeure de systemd ; clés de configuration pouvant être invalides pour une version plus récente."
}
],
"outroBody": "Le filtre fonctionne AVANT la boîte de dialogue de confirmation afin que l'utilisateur voit la liste exacte des chemins qui seront ignorés, catégorisé par la raison. La restauration continue — tout le reste (configuration VM/LXC, réseau, /etc/pve, utilisateurs, cron, état ProxMenux, paquets, pilotes, /root) est restauré normalement."
},
"hydration": {
"heading": "Hydratation du noyau-agnostique",
"intro": "Le filtre omet les fichiers critiques ; l’adaptation réapplique certains réglages : paramètres IOMMU, ID VFIO, <code>GRUB_TIMEOUT</code> personnalisé et listes de blocage nvidia. Elle s’exécute si le noyau cible est plus récent. La fusion cmdline conserve les clés de la cible et ajoute les modules manquants. Les valeurs GRUB et fichiers autorisés peuvent remplacer un contenu cible différent. Répéter les mêmes entrées est idempotent.",
"phaseRows": [
{
"phase": "1a — Voie GRUB",
"detail": "Pour les hôtes GRUB (installations ext4/lvm). <code>_rs_hyd_grub</code> fusionne les paramètres de <code>manifest.kernel_params.cmdline_extra</code> de la sauvegarde dans <code>GRUB_CMDLINE_LINUX_DEFAULT</code> de la cible, en ignorant les clés déjà présentes. Il reprend ensuite les clés autorisées <code>GRUB_*</code> (<code>GRUB_TIMEOUT</code>, <code>GRUB_TIMEOUT_STYLE</code>, <code>GRUB_DEFAULT</code>, <code>GRUB_TERMINAL</code>, <code>GRUB_DISABLE_OS_PROBER</code>, <code>GRUB_SERIAL_COMMAND</code>, <code>GRUB_GFXMODE</code>, <code>GRUB_GFXPAYLOAD_LINUX</code>) depuis <code>/etc/default/grub</code> de la sauvegarde si leurs valeurs diffèrent de la cible."
},
{
"phase": "1b — systemd-boot / ZFS",
"detail": "Pour systemd-boot (souvent ZFS à la racine). <code>_rs_hyd_kernel_cmdline</code> fusionne les paramètres utilisateur de <code>cmdline_extra</code> dans <code>/etc/kernel/cmdline</code> de la cible tout en préservant ses paramètres de démarrage <code>root=</code>, <code>boot=</code> et <code>rootflags=</code>."
},
{
"phase": "2 — Fusion /etc/modules",
"detail": "<code>_rs_hyd_modules</code> ajoute des modules de <code>manifest.kernel_params.modules_loaded_at_boot</code> qui sont dans la liste blanche (<code>vfio</code>, <code>vfio_pci</code>, <code>vfio_iommu_type1</code>, <code>vfio_virqfd</code>, <code>kvm</code>, <code>kvm_intel</code>, <code>kvm_amd</code>, <code>nvidia</code>, <code>nvidia_drm</code>, <code>nvidia_modeset</code>, <code>nvidia_uvm</code>, <code>i915</code>, <code>xe</code>) ET n'est pas déjà présent dans la cible <code>/etc/modules</code>."
},
{
"phase": "3 — Copie des fichiers figurant sur la liste blanche",
"detail": "<code>_rs_hyd_files</code> copie les fichiers rédigés par l’utilisateur depuis les rootfs jusqu'à la cible en direct lorsque le contenu diffère. La liste blanche couvre les fichiers VFIO/nvidia/blacklist sous <code>/etc/modprobe.d</code>, <code>/etc/modules-load.d</code>, et la règle de liaison ProxMenux VFIO + règles nvidia udev sous <code>/etc/udev/rules.d</code>. Les fichiers appartenant à des Distro (<code>pve-blacklist.conf</code>, <code>mdadm.conf</code>, <code>nvme.conf</code>) sont délibérément exclus — leur contenu évolue entre les versions."
},
{
"phase": "4 — Forcer la régénération après démarrage",
"detail": "Les quatre phases écrivent directement à la cible en direct EN DEHORS DE le pipeline normal de restauration. Pour que les paramètres/modules/fichiers fusionnés prennent effet sur le prochain boot, <code>HB_HYDRATION_APPLIED=1</code> se propage via <code>plan.env</code> vers <code>apply_pending_restore.sh</code>, ce qui force <code>NEEDS_INITRAMFS=1</code> et <code>NEEDS_GRUB=1</code> indépendamment de ce qui était dans la liste d'application. Le répartiteur post-démarrage régénère ensuite les initramfs et rafraîchit le chargeur."
}
]
},
"planCommit": {
"heading": "Plan vs commit — l'utilisateur voit d'abord un aperçu",
"body": "L'hydratation fonctionne en deux modes. Avant la boîte de dialogue de confirmation, ProxMenux exécute <code>_rs_apply_bk_older_hydration</code> en mode <code>plan</code> : il calcule exactement ce qui serait fusionné, peuple <code>RS_HYDRATION_SUMMARY</code> avec un bloc vert listant chaque action, et retourne sans écrire. La boîte de dialogue de confirmation montre que le bloc vert à côté de la liste orange des chemins exclus, de sorte que l'utilisateur voit À L’AVANCE ce qui sera ré-appliqué automatiquement. Après que l'utilisateur ait confirmé, ProxMenux réexécute le même helper en mode <code>commit</code> — mêmes phases, même logique, mais cette fois chaque phase écrit à la cible en direct. L'annulation de la boîte de dialogue de confirmation laisse la cible intacte."
},
"flowDiagram": {
"heading": "Le flux lorsque le noyau cible est plus récent que celui de la sauvegarde",
"intro": "Les étapes ajoutées lorsque le noyau cible est plus récent s'assoient à l'intérieur du flux normal de restauration. Tout le reste — application chaude, préparation en attente, installation de paquets, répartiteur post-démarrage — fonctionne identiquement à une restauration du même noyau.",
"diagram": " ┌────────────────────────────────────────────────────────────┐\n │ hb_compat_check │\n │ HB_COMPAT_KERNEL_DIRECTION = bk_older │\n └───────────────────────────┬────────────────────────────────┘\n │\n ▼\n ┌────────────────────────────────────────────────────────────┐\n │ Add 16 boot-critical paths to RS_SKIP_PATHS │\n │ /etc/default/grub, /etc/kernel, /etc/modules-load.d, ... │\n └───────────────────────────┬────────────────────────────────┘\n │\n ▼\n ┌────────────────────────────────────────────────────────────┐\n │ _rs_apply_bk_older_hydration \"plan\" │\n │ Compute what would be merged │\n │ Populate RS_HYDRATION_SUMMARY (green block) │\n │ No writes │\n └───────────────────────────┬────────────────────────────────┘\n │\n ▼\n ┌────────────────────────────────────────────────────────────┐\n │ Confirmation dialog │\n │ Amber: paths skipped by safe-subset filter │\n │ Green: tokens/files reapplied by hydration │\n │ User accepts or cancels │\n └───────────────────────────┬────────────────────────────────┘\n │ (accepted)\n ▼\n ┌────────────────────────────────────────────────────────────┐\n │ _rs_apply_bk_older_hydration \"commit\" │\n │ Phase 1a/1b: merge cmdline tokens + GRUB keys │\n │ Phase 2: append modules to /etc/modules │\n │ Phase 3: copy whitelisted vfio/nvidia files │\n │ Set HB_HYDRATION_APPLIED=1 │\n └───────────────────────────┬────────────────────────────────┘\n │\n ▼\n ┌────────────────────────────────────────────────────────────┐\n │ Rest of the restore runs normally │\n │ _rs_apply hot (skips RS_SKIP_PATHS) │\n │ _rs_prepare_pending_restore (writes plan.env with │\n │ HB_HYDRATION_APPLIED=1) │\n │ packages.manual.list install │\n │ Reboot │\n │ apply_pending_restore.sh (forces NEEDS_INITRAMFS=1, │\n │ NEEDS_GRUB=1 because of the hydration flag) │\n │ apply_cluster_postboot.sh │\n │ update-initramfs -u -k all │\n │ update-grub / proxmox-boot-tool refresh │\n │ component --auto-reinstall │\n └────────────────────────────────────────────────────────────┘"
},
"concreteExamples": {
"heading": "Exemples concrets",
"intro": "Le passe d'hydratation n'est pas abstrait — il produit des résultats observables et corrects pour des scénarios communs. Deux exemples que l'hydratation gère automatiquement :",
"rows": [
{
"scenario": "Passage de GPU (VFIO)",
"detail": "La source avait le <code>intel_iommu=on iommu=pt</code> dans la ligne cmd, le <code>vfio</code>/<code>vfio_pci</code>/<code>vfio_iommu_type1</code> dans le <code>/etc/modules</code>, un <code>/etc/modprobe.d/vfio.conf</code> avec le <code>options vfio-pci ids=10de:2216</code> et un <code>/etc/modprobe.d/blacklist-nvidia.conf</code>. L'hydratation fusionne les jetons cmdline dans le GRUB de la cible ou le noyau cmdline, ajoute les modules vfio au <code>/etc/modules</code>, et copie les deux fichiers modprobe rédigés par l’utilisateur. Sur le prochain démarrage, IOMMU est actif, les modules VFIO chargent, le GPU est lié à vfio-pci et le VM est livré avec le travail de passage."
},
{
"scenario": "Par défaut du GRUB personnalisé",
"detail": "Source : <code>GRUB_TIMEOUT=1</code> et <code>GRUB_DISABLE_OS_PROBER=true</code>. L'hydratation lit les deux clés de la sauvegarde <code>/etc/default/grub</code>, voit qu'elles diffèrent des valeurs par défaut de la nouvelle installation, et réécrit ces deux lignes dans le fichier de la cible (en laissant tout le reste, y compris <code>GRUB_DISTRIBUTOR</code>, intact)."
}
]
},
"callout": {
"warningTitle": "Ce que l'hydratation ne réapplique pas lorsque le noyau cible est plus récent",
"warningBody": "L'hydratation ne réapplique que la configuration ProxMenux sait être sûre dans toutes les versions du noyau : jetons IOMMU, ID VFIO, clés GRUB sur liste blanche et modules d'une liste fixe (<code>vfio*</code>, <code>nvidia*</code>, <code>i915</code>, <code>xe</code>, <code>kvm*</code>). Tout ce qui se trouve à l'extérieur de cet ensemble — les crochets initramfs personnalisés sous <code>/etc/initramfs-tools/hooks/</code>, les fichiers non inscrits sur la liste blanche sous <code>/etc/modprobe.d/</code>, les surcharges d’unités systemd rédigées par l’utilisateur — reste exclu. La raison en est concrète : ces fichiers peuvent appeler des interfaces internes au noyau (API modulaires, mise en page <code>/sys</code>, crochets <code>udev</code>) qui changent entre les versions principales, et les appliquer mot à mot sur le nouveau noyau peut empêcher la cible de démarrer. Lorsque la reproduction exacte de la chaîne de démarrage est requise, la restauration doit être exécutée sur un hôte avec la même version principale du noyau que la sauvegarde."
},
"codeReference": {
"heading": "Où vivent les mécanismes",
"intro": "Pour les développeurs qui cherchent à tracer ou à étendre le comportement du cross-kernel:",
"rows": [
{
"component": "Détection de la direction",
"location": "<code>hb_compat_check</code> dans <code>lib_host_backup_common.sh</code>. Définit <code>HB_COMPAT_KERNEL_DIRECTION</code>."
},
{
"component": "Liste des chemins de sous-ensembles sécurisés",
"location": "<code>hb_unsafe_paths_cross_version</code> dans <code>lib_host_backup_common.sh</code>. Émet <code>path\\treason</code> lignes utilisées à la fois par le filtre CLI et le point de terminaison Web <code>/api/host-backups/restore/prepare</code>."
},
{
"component": "Phases d'hydratation",
"location": "<code>_rs_hyd_grub</code>, <code>_rs_hyd_kernel_cmdline</code>, <code>_rs_hyd_modules</code>, <code>_rs_hyd_files</code> dans <code>backup_host.sh</code>. Ordonné par <code>_rs_apply_bk_older_hydration</code>."
},
{
"component": "Régénération forcée après démarrage",
"location": "<code>apply_pending_restore.sh</code> lit <code>HB_HYDRATION_APPLIED</code> de <code>plan.env</code> et force <code>NEEDS_INITRAMFS=1</code>/<code>NEEDS_GRUB=1</code>."
},
{
"component": "Aperçu du Web",
"location": "<code>/api/host-backups/restore/prepare</code> dans <code>flask_server.py</code>. Charge la bibliothèque d'aide, exécute <code>_rs_apply_bk_older_hydration</code> en mode plan, renvoie les actions au mode Web."
}
]
},
"whereNext": {
"heading": "Où aller ensuite?",
"items": [
{
"label": "Restauration",
"href": "/docs/backup-restore/restoring",
"tail": " — le processus complet de restauration qui intègre les mécanismes de cette page."
},
{
"label": "Comment ça marche",
"href": "/docs/backup-restore/how-it-works",
"tail": " — le manifeste et les collecteurs qui produisent le bloc <code>kernel_params</code> lu par l’adaptation."
}
]
}
}
@@ -0,0 +1,234 @@
{
"meta": {
"title": "Destination Borg — types de dépôts, authentification SSH, chiffrement | ProxMenux",
"description": "La destination Borg enregistre les sauvegardes d’hôte ProxMenux dans un dépôt local, sur un disque externe monté ou sur un serveur distant via SSH. Cette page décrit la recherche de l’exécutable borg, les quatre options initiales de clé SSH, le chiffrement repokey, la configuration des destinations enregistrées et la rétention par tâche planifiée.",
"ogTitle": "Sauvegarde ProxMenux — Destination borg",
"ogDescription": "Comment ProxMenux enregistre les sauvegardes d’hôte dans des dépôts Borg avec authentification SSH et chiffrement repokey.",
"twitterTitle": "Destination de sauvegarde Borg: ProxMenux",
"twitterDescription": "Dépôts Borg locaux, USB et SSH pour les sauvegardes hôtes."
},
"header": {
"title": "Borg",
"description": "La destination Borg écrit des sauvegardes d'hôte dans un dépôt Borg. Trois types de dépôt sont pris en charge : chemin du système de fichiers local, disque externe monté ou serveur distant via SSH. Déduplication au niveau du chunk dans toutes les archives du dépôt et cryptage facultatif des repokey.",
"section": "Sauvegarde et restauration"
},
"aboutBorg": {
"heading": "Ce que Borg est",
"body": "Borg, aussi appelé BorgBackup, est un outil de sauvegarde libre avec déduplication, maintenu par la communauté Borg Backup. Il stocke chaque archive sous forme de blocs de longueur variable dans un dépôt. Les blocs sont partagés entre archives : sauvegarder à nouveau des données inchangées ne consomme presque aucun espace supplémentaire. Borg est indépendant de Proxmox et sert dans de nombreux environnements. ProxMenux l’utilise comme l’une des trois destinations de sauvegarde d’hôte ; les mécanismes décrits ici (types de dépôts, borg-serve via SSH, chiffrement repokey, prune) sont ceux de Borg."
},
"intro": {
"title": "Déduplication par blocs avec dépôts locaux ou accessibles via SSH",
"body": "Un dépôt Borg stocke des blocs partagés entre toutes ses archives. Sauvegarder à nouveau un fichier inchangé ne transfère ni ne stocke de nouvelles données. ProxMenux utilise <code>borg create</code> pour sauvegarder et <code>borg extract</code> pour restaurer. Le dépôt peut se trouver sur le même système de fichiers que la source, sur un disque externe monté ou sur un hôte distant accessible via SSH."
},
"binarySourcing": {
"heading": "Le binaire borg",
"intro": "Borg n'est pas une dépendance de base de l'installateur ProxMenux. Lorsqu'une sauvegarde s'exécute, <code>hb_ensure_borg</code> résout le binaire à partir de quatre sources dans l'ordre et retourne le premier qui fonctionne :",
"rows": [
{
"priority": "1",
"source": "Système <code>borg</code>",
"detail": "Si l'hôte a déjà <code>borg</code> installé via APT (<code>which borg</code> résout), ce binaire est utilisé."
},
{
"priority": "2",
"source": "Cache du répertoire d’état",
"detail": "<code>/usr/local/share/proxmenux/borg</code> — conservé d'un téléchargement préalable de GitHub sur cet hôte."
},
{
"priority": "3",
"source": "Paquet AppImage du moniteur",
"detail": "<code>/usr/local/share/proxmenux/monitor-app/usr/bin/borg</code> — le AppImage regroupe un borg-linux64 signé. C'est le chemin hors ligne sécurisé : un hôte sans internet a toujours un <code>borg</code> fonctionnant."
},
{
"priority": "4",
"source": "Téléchargement GitHub",
"detail": "<code>wget</code> contre l'URL <code>borg-linux64</code> épinglée sous <code>github.com/borgbackup/borg/releases/</code>, vérifiée contre une constante SHA-256 dans <code>lib_host_backup_common.sh</code> (<code>HB_BORG_LINUX64_SHA256</code>). En cas de somme de contrôle incorrecte, le binaire est rejeté et la sauvegarde avorte. Le fichier téléchargé est mis en cache dans l'état dir afin que les sauvegardes suivantes utilisent le chemin 2."
}
]
},
"repoTypes": {
"heading": "Types de dépôts",
"intro": "Le type de dépôt est choisi lorsqu'une cible est ajoutée. Chaque type résout une URL de dépôt différente que Borg comprend.",
"rows": [
{
"type": "remote",
"url": "ssh://USER@HOST/RPATH",
"detail": "Le dépôt vit sur un serveur distant qui exécute <code>borg serve</code>. Nécessite une connexion SSH à ce serveur."
},
{
"type": "usb",
"url": "/mnt/MOUNTPOINT/borgbackup",
"detail": "Le dépôt vit sur un disque externe monté (habituellement USB). Le montage est résolu via <code>hb_prompt_mounted_path</code>, qui détecte, monte ou formate les partitions USB au besoin."
},
{
"type": "local",
"url": "/backup/borgbackup (any absolute path)",
"detail": "Le dépôt vit dans un répertoire local. Signifiant seulement lorsque le répertoire cible est sur un disque physique séparé — un dépôt sur le même disque que la source protège contre l'erreur de l'opérateur mais pas contre la défaillance du disque."
}
]
},
"serverSetup": {
"heading": "Préparation du serveur Borg (côté serveur)",
"intro": "Le type de dépôt <code>remote</code> nécessite un serveur Borg fonctionnel accessible via SSH. ProxMenux ne configure pas le serveur lui-même : il autorise seulement une clé sur un compte existant. Cette section décrit les prérequis du serveur.",
"hostChoicesTitle": "Où le serveur peut vivre",
"hostChoicesBody": "Tout hôte Linux avec accès SSH se qualifie. Configurations communes :",
"hostChoicesItems": [
"Un NAS dédié ou une boîte de sauvegarde (Debian, Ubuntu, TrueNAS SCALE avec un shell).",
"Un conteneur LXC à l'intérieur d'un nœud Proxmox. Petite empreinte, isolée de l'hôte exécutant les sauvegardes.",
"Un autre hôte Proxmox sur le même LAN, ou un VM n'importe où accessible sur SSH."
],
"lxcWarningTitle": "LXC comme serveur Borg",
"lxcWarningBody": "Si le serveur Borg est dans un LXC, generate-auto nécessite un compte acceptant l’authentification SSH par mot de passe pour installer la clé. Sinon, utilisez l’installation manuelle ou l’alternative generate-pct via l’hôte PVE.",
"requirementsTitle": "Exigences sur le serveur",
"requirementsRows": [
{
"requirement": "Exécutable borg dans <code>/usr/bin/borg</code>",
"detail": "La ligne <code>command=\"/usr/bin/borg serve ...\"</code> écrite par ProxMenux dans <code>authorized_keys</code> utilise ce chemin fixe. L’installation APT (<code>apt install borgbackup</code>) y place l’exécutable. Pour un binaire autonome, créez un lien symbolique à <code>/usr/bin/borg</code>."
},
{
"requirement": "Un compte utilisateur dédié (généralement <code>borg</code>)",
"detail": "Possède le répertoire du dépôt et reçoit les connexions SSH entrantes. N'a pas besoin d'accès sudo ou shell — la ligne authorized_keys désactive de toute façon les shells interactifs."
},
{
"requirement": "Un répertoire de dépôt en écriture",
"detail": "Le chemin que l'opérateur donne à ProxMenux (par exemple <code>/backup/borgbackup</code>) doit exister sur le serveur et être la propriété de l'utilisateur borg."
},
{
"requirement": "SSH démon acceptant l'utilisateur borg",
"detail": "<code>PubkeyAuthentication yes</code> (par défaut). L'authentification par mot de passe n'est nécessaire que pour le flux <em>generate-auto</em>, une fois la clé installée, le serveur peut désactiver complètement le mot de passe auth."
}
],
"minimalSetupTitle": "Configuration minimale du serveur",
"minimalSetupBody": "Sur un serveur Debian ou Ubuntu Borg, une référence de travail est quatre commandes comme root:",
"minimalSetupCmd": "apt install borgbackup\nuseradd -m -d /home/borg -s /bin/bash borg\nmkdir -p /backup/borgbackup\nchown borg:borg /backup/borgbackup",
"minimalSetupNote": "Une fois le serveur préparé et l’authentification SSH par mot de passe disponible, <code>generate-auto</code> installe la clé via un compte pouvant écrire dans authorized_keys de l’utilisateur borg. Les sauvegardes suivantes utilisent cette clé, limitée à <code>borg serve</code> au chemin configuré. Sans connexion par mot de passe, installez-la manuellement ou via l’hôte PVE."
},
"sshAuth": {
"heading": "authentification SSH (côté client)",
"intro": "Les dépôts distants Borg sont accessibles sur SSH. La connexion passe de l'hôte ProxMenux à un compte utilisateur sur le serveur Borg qui exécute <code>borg serve</code>. Cet utilisateur s'appelle généralement <code>borg</code>, PAS l'utilisateur admin/root du serveur — la ligne de commande borg-serve verrouille la connexion à ce chemin de dépôt spécifique (voir les stratégies clés ci-dessous).",
"strategiesTitle": "Stratégies de clé SSH",
"strategiesIntro": "Lors de l’ajout d’une destination distante, ProxMenux demande l’utilisateur SSH, l’hôte, le port et le chemin distant, puis propose quatre choix d’authentification. L’alternative generate-pct est proposée si l’authentification par mot de passe est refusée. Voici les modes :",
"strategyRows": [
{
"mode": "generate-auto",
"label": "Recommandé",
"detail": "ProxMenux crée ou réutilise une paire de clés ed25519 dans <code>~/.ssh/borg_proxmenux_HOST_ed25519</code>, puis utilise <code>sshpass</code> pour tester la connexion et installer la clé publique dans <code>~borg/.ssh/authorized_keys</code>. Le mot de passe est celui d’un compte autorisé à écrire ce fichier, généralement root ou borg. Il sert pendant la configuration et n’est pas enregistré."
},
{
"mode": "generate-manual",
"label": "Pas de mot de passe admin sur cet hôte",
"detail": "ProxMenux génère la paire de clés comme ci-dessus, mais affiche la ligne complète <code>authorized_keys</code> pour que l'opérateur colle manuellement dans le serveur. Le mot de passe administrateur ne quitte jamais l'hôte ProxMenux car il n'est jamais demandé."
},
{
"mode": "generate-pct",
"label": "Le serveur Borg est un PVE LXC",
"detail": "Le serveur Borg fonctionne à l'intérieur d'un LXC sur un nœud PVE. ProxMenux autorise la clé via <code>pct exec</code> de l'hôte PVE — root sur l'hôte PVE écrit dans le LXC de <code>~borg/.ssh/authorized_keys</code> sans avoir besoin de SSH dans le LXC lui-même."
},
{
"mode": "existing",
"label": "Utiliser une clé existante",
"detail": "ProxMenux recherche dans <code>/root/.ssh/</code> et <code>$HOME/.ssh/</code> les clés privées ed25519/RSA qu’il peut lire, puis les liste. L’opérateur en choisit une ou indique manuellement un chemin non standard."
},
{
"mode": "none",
"label": "Config par défaut SSH",
"detail": "Aucune clé personnalisée — Borg s'appuie sur la configuration par défaut de l'hôte SSH (généralement <code>~/.ssh/id_rsa</code> ou un agent SSH)."
}
],
"restrictTitle": "La ligne authorized_keys",
"restrictBody": "Pour chaque clé générée, la ligne <code>authorized_keys</code> écrite par ProxMenux sur le serveur limite la clé à cet appel borg-serve sur le chemin configuré du dépôt :",
"restrictLine": "command=\"/usr/bin/borg serve --restrict-to-path RPATH\",restrict PUBKEY",
"restrictNote": "Le <code>command=</code> force chaque session SSH en utilisant cette clé pour exécuter seulement la commande borg-serve; <code>restrict</code> désactive le renvoi de port, le renvoi d'agent, le renvoi de X11 et l'allocation de PTY. La clé ne peut pas être utilisée pour ouvrir un shell interactif sur le serveur ou pour accéder à tout autre chemin de dépôt, même si le compte a des privilèges plus larges."
},
"savedTargets": {
"heading": "Objectifs enregistrés",
"intro": "Une destination enregistrée conserve la configuration du dépôt sous un nom lisible pour éviter de ressaisir les détails. Fichiers dans le répertoire d’état ProxMenux :",
"rows": [
{
"file": "borg-targets.txt",
"content": "Une ligne par destination : <code>NAME|REPO|SSH_KEY_PATH|ENCRYPT_MODE</code>. <code>hb_collect_borg_configs</code> la lit pour remplir le menu de sélection des destinations."
},
{
"file": "borg-pass-NAME.txt",
"content": "Phrase secrète de la destination nommée NAME ci-dessus (<code>chmod 600</code>). Présente uniquement si le chiffrement repokey a été choisi."
}
],
"outro": "Enregistrer la destination est facultatif. Refuser omet la configuration nommée, mais ne supprime pas une clé SSH générée. Si le chiffrement repokey est activé sans destination enregistrée, ProxMenux conserve tout de même la phrase secrète dans l’ancien fichier borg-pass.txt."
},
"encryption": {
"heading": "Cryptage",
"body": "Les dépôts sont initialisés avec un mode de chiffrement via <code>hb_borg_init_if_needed</code>: le <code>borg repo-create -e MODE</code> moderne quand disponible, ou le <code>borg init --encryption=MODE</code> hérité. ProxMenux expose deux modes : <code>repokey</code> (par défaut) et <code>none</code>. En mode <code>repokey</code> Borg stocke la clé de cryptage à l'intérieur du dépôt lui-même ; l'accès nécessite une phrase de passe, que ProxMenux invite pour deux fois avec vérification de concordance et enregistre dans <code>borg-pass-NAME.txt</code> pour une destination enregistrée, sinon dans l’ancien fichier décrit plus haut. Une boîte de dialogue de reconnaissance obligatoire s'affiche après l'enregistrement de la phrase de passe : la phrase de passe est la seule façon d'accéder aux archives chiffrées, et la perdre rend chaque archive du dépôt inrécupérable."
},
"runtimeEnv": {
"heading": "Environnement d'exécution",
"intro": "ProxMenux exporte les variables d'environnement suivantes avant d'invoquer <code>borg</code>. Ils configurent la connexion et déverrouillent le dépôt sans intégrer de secrets dans la ligne de commande.",
"rows": [
{
"var": "BORG_RSH",
"value": "ssh -i SSH_KEY_PATH -o IdentitiesOnly=yes -o StrictHostKeyChecking=accept-new [-p PORT]",
"purpose": "Commande distante utilisée par Borg pour les dépôts SSH. Une clé sélectionnée ajoute les options d’identité. Quand une destination est ajoutée avec un port non standard, ProxMenux ajoute aussi -p PORT ; les destinations enregistrées, les tâches planifiées et le Monitor utilisent plutôt le port de l’URL ssh://. Sans clé personnalisée, et pour une nouvelle destination avec le port par défaut, la variable reste non définie et Borg utilise la configuration SSH de l’hôte."
},
{
"var": "BORG_PASSPHRASE",
"value": "(Passphrase de borg-pass-NAME.txt)",
"purpose": "Débloque le repokey. Définir uniquement lorsque la cible utilise le chiffrement <code>repokey</code>. N'apparaît jamais dans la liste des arguments du processus."
},
{
"var": "BORG_ENCRYPT_MODE",
"value": "repokey | none",
"purpose": "Utilisé par <code>hb_borg_init_if_needed</code> lors de l'initialisation d'un dépôt qui n'existe pas encore. Ignoré par <code>borg create</code> sur les dépôts existants."
},
{
"var": "BORG_RELOCATED_REPO_ACCESS_IS_OK",
"value": "yes",
"purpose": "Supprime la confirmation interactive demandée par Borg lorsque l’URL du dépôt diffère de celle utilisée initialement, par exemple après avoir renommé un point de montage ou changé l’adresse du serveur SSH."
},
{
"var": "BORG_UNKNOWN_UNENCRYPTED_REPO_ACCESS_IS_OK",
"value": "yes",
"purpose": "Supprime l'invite interactive Borg soulève la première fois qu'un dépôt non chiffré est accessible depuis un nouveau client."
}
]
},
"archiveFormat": {
"heading": "Nom et conservation des archives",
"intro": "Chaque sauvegarde crée une nouvelle archive dans le dépôt.",
"namePattern": "hostcfg-HOSTNAME-YYYYMMDD_HHMMSS",
"retentionBody": "Pour les tâches programmées, <code>run_scheduled_backup.sh</code> exécute <code>borg prune</code> contre le dépôt après chaque sauvegarde réussie avec les valeurs de conservation configurées sur le travail (<code>--keep-last</code>, <code>--keep-daily</code>, <code>--keep-weekly</code>). Les sauvegardes interactives ne se prunent pas."
},
"restoreAccess": {
"heading": "Récupération du côté restauration",
"body": "Le flux de restauration liste les archives avec <code>borg list REPO</code> et extrait celui sélectionné avec <code>borg extract REPO::ARCHIVE-NAME</code> dans un répertoire de mise en scène que <code>_rs_check_layout</code> alimente dans le pipeline de restauration standard. Pour la récupération manuelle à l'extérieur de ProxMenux les mêmes commandes fonctionnent; l'arborescence extraite est la mise en page standard à trois payload décrite dans <em>Comment ça marche</em>."
},
"references": {
"heading": "Références",
"intro": "Documentation officielle de Borg pour les composants utilisés par ProxMenux.",
"items": [
{
"label": "Documentation borg",
"href": "https://borgbackup.readthedocs.io/",
"tail": "— point d'entrée principal couvrant les concepts, le déploiement, le démarrage rapide et chaque commande."
},
{
"label": "borg create",
"href": "https://borgbackup.readthedocs.io/en/stable/usage/create.html",
"tail": " — la commande utilisée par ProxMenux pour chaque sauvegarde, avec toutes les options prises en charge."
},
{
"label": "Chiffrement des dépôts",
"href": "https://borgbackup.readthedocs.io/en/stable/usage/init.html#encryption-mode",
"tail": "— les modes de cryptage pris en charge par Borg, y compris la repokey que ProxMenux utilise par défaut."
},
{
"label": "borg serve et déploiement via SSH",
"href": "https://borgbackup.readthedocs.io/en/stable/deployment/central-backup-server.html",
"tail": " — configuration d’un serveur Borg central accessible via SSH, avec la commande borg-serve et l’option restrict-to-path inscrites par ProxMenux dans authorized_keys."
},
{
"label": "borg prune",
"href": "https://borgbackup.readthedocs.io/en/stable/usage/prune.html",
"tail": " — le modèle de rétention de --keep-last / --keep-daily / --keep-weekly appliqué par ProxMenux à chaque tâche planifiée."
}
]
}
}
@@ -0,0 +1,110 @@
{
"meta": {
"title": "Destinations des sauvegardes — archive locale, Proxmox Backup Server et Borg | ProxMenux",
"description": "Trois moteurs de stockage reçoivent la même charge utile de sauvegarde ProxMenux : une archive locale .tar.zst sur tout système de fichiers accessible en écriture, une sauvegarde PBS dans un datastore Proxmox Backup Server ou une archive Borg dans un dépôt Borg local ou distant. Chaque moteur a ses propres caractéristiques de compression, de déduplication, de chiffrement et de réseau.",
"ogTitle": "Destinations de sauvegarde ProxMenux",
"ogDescription": "Local, Proxmox Backup Server et Borg — trois moteurs de stockage pour la même charge utile de sauvegarde d'hôte.",
"twitterTitle": "Destinations de sauvegarde ProxMenux | ProxMenux",
"twitterDescription": "Archives locales, moteurs Proxmox Backup Server et Borg pour les sauvegardes d'hôte."
},
"header": {
"title": "Destinations",
"description": "Trois backends de stockage pris en charge par ProxMenux Backup: archive locale, Proxmox Backup Server (recommandé) et Borg. Chacun reçoit la même archive à trois charges; ils diffèrent en format de stockage, déduplication, modèle de chiffrement et exigences du réseau.",
"section": "Sauvegarde et restauration"
},
"intro": {
"title": "Même charge utile, trois moteurs",
"body": "Chaque sauvegarde produit les mêmes trois charges utiles (rootfs, manifeste, applications). Ce qui change entre les destinations, c'est comment ces charges sont stockées et comment l'opérateur les récupère pour une restauration. Chaque moteur est implémenté comme une fonction séparée dans <code>backup_host.sh</code> — <code>_bk_local</code>, <code>_bk_pbs</code>, <code>_bk_borg</code> — mais les trois partagent la même étape de préparation temporaire (<code>hb_prepare_staging</code>) et le même chemin de code de restauration. Le choix de la destination n'affecte que l'écriture et la récupération ; il ne change pas ce qu'une restauration fait ou comment elle consomme l'archive."
},
"comparison": {
"heading": "Comparaison des caractéristiques",
"intro": "Le tableau suivant répertorie les différences concrètes entre les trois backends tels qu'ils se comportent dans ProxMenux aujourd'hui. Toutes les valeurs décrivent le comportement observé du backend lui-même, et non des recommandations éditoriales.",
"rows": [
{
"feature": "Format de stockage",
"local": "Un seul fichier <code>.tar.zst</code> (ou <code>.tar.gz</code> si <code>zstd</code> est absent).",
"pbs": "Sauvegarde PBS (blocs <code>.pxar</code> dans le datastore).",
"borg": "Archive Borg à l'intérieur d'un dépôt Borg (fichiers de segments)."
},
{
"feature": "Compression",
"local": "zstd (niveau par défaut) via <code>tar --zstd</code>. Repli sur gzip.",
"pbs": "Gérée par proxmox-backup-client. ProxMenux ne modifie pas les paramètres de compression.",
"borg": "Compression intégrée à Borg. ProxMenux appelle borg create sans modifier les paramètres de compression."
},
{
"feature": "Déduplication",
"local": "Aucune. Chaque sauvegarde est une archive indépendante complète.",
"pbs": "Déduplication complète de niveau chunk sur toutes les sauvegardes dans le datastore.",
"borg": "Déduplication complète au niveau des blocs entre toutes les archives du dépôt."
},
{
"feature": "Chiffrement au repos",
"local": "Aucun (dépend de la protection au niveau du système de fichiers).",
"pbs": "Chiffrement facultatif côté client avec un fichier de clé. Si activé, le blob de récupération est envoyé dans un groupe de sauvegarde distinct.",
"borg": "Chiffrement facultatif des repokey (clé stockée dans la repo, déverrouillée par une phrase de passe)."
},
{
"feature": "Rétention / purge",
"local": "Appliquée par tâche programmée via <code>KEEP_LAST</code>. Les anciennes archives sont supprimées avec leurs fichiers annexes et journaux d’exécution. Les sauvegardes interactives ne font pas de purge.",
"pbs": "Appliquée par tâche programmée via <code>proxmox-backup-client prune --keep-last / --keep-daily / --keep-weekly</code>. Les sauvegardes interactives ne font pas de purge.",
"borg": "Appliquée par tâche programmée via <code>borg prune --keep-last / --keep-daily / --keep-weekly</code>. Les sauvegardes interactives ne font pas de purge."
},
{
"feature": "Réseau",
"local": "Aucune. Écrit à un point de montage local (généralement un disque interne ou un lecteur USB).",
"pbs": "TCP vers le serveur PBS (port par défaut 8007). Nécessite des identifiants PBS + empreinte du certificat.",
"borg": "Chemin du système de fichiers local ou tunnel SSH vers un hôte Borg distant."
},
{
"feature": "Dépendances",
"local": "<code>tar</code>, <code>zstd</code> (présent sur Proxmox par défaut).",
"pbs": "Paquet <code>proxmox-backup-client</code> (fourni avec Proxmox VE 8+).",
"borg": "<code>borg</code> binaire. Auto-provisionné par ProxMenux à partir du paquet Moniteur AppImage quand il manque."
},
{
"feature": "Accès pour restaurer",
"local": "Tout hôte avec tar+zstd peut extraire l'archive. Pas de PBS/Borg nécessaire.",
"pbs": "Nécessite <code>proxmox-backup-client</code>, les identifiants PBS et le fichier de clé (si la sauvegarde est chiffrée).",
"borg": "Nécessite <code>borg</code> + le chemin du dépôt + la phrase de passe (si chiffrée)."
}
],
"captionCode": "feature",
"captionLocal": "Locale",
"captionPbs": "Proxmox Backup Server (recommandé)",
"captionBorg": "Borg"
},
"sameArchive": {
"heading": "La disposition des archives ne change pas avec la destination",
"body": "A l'intérieur de l'une des trois destinations, la même disposition <code>rootfs/</code> + <code>metadata/</code> + <code>manifest.json</code> décrite dans <em>Comment ça marche</em> est présente. Un <code>.tar.zst</code> extrait d'une archive locale, un <code>.pxar</code> restauré de PBS et une archive Borg extraite de <code>borg extract</code> donnent tous un arbre de répertoire identique. Le chemin du code de restauration (<code>_rs_check_layout</code>, <code>_rs_apply</code>, <code>_rs_prepare_pending_restore</code>) lit les mêmes trois charges utiles sans savoir de quelle destination elles proviennent."
},
"extractStandalone": {
"heading": "Extraire une sauvegarde à l'extérieur de ProxMenux",
"intro": "N'importe lequel des trois formats d'archive peut être lu avec des outils standard sans ProxMenux installé sur l'hôte de lecture. Les commandes ci-dessous produisent le même arbre de répertoire qu'une restauration consomme en interne.",
"localCmd": "# From a local .tar.zst archive:\ntar --zstd -xf hostcfg-HOST-TIMESTAMP.tar.zst\n\n# From a .tar.gz fallback:\ntar -xzf hostcfg-HOST-TIMESTAMP.tar.gz",
"pbsCmd": "# From a PBS backup (requires proxmox-backup-client):\nproxmox-backup-client restore \\\n --repository USER@REALM@HOST:DATASTORE \\\n host/hostcfg-HOST/BACKUP-TIME \\\n hostcfg.pxar /tmp/hostcfg\n\n# Add --keyfile KEY-PATH when the backup is encrypted.",
"borgCmd": "# Depuis une archive Borg (nécessite borg et la phrase de passe des dépôts chiffrés) :\nborg extract REPO-PATH::ARCHIVE-NAME\n\n# Sur un dépôt distant accessible par SSH :\nborg extract ssh://USER@HOST:PORT/REPO-PATH::ARCHIVE-NAME",
"note": "L'arbre extrait peut ensuite être inspecté manuellement ou alimenté à une restauration manuelle. Consultez les pages de destination individuelles pour connaître le processus de récupération exact que ProxMenux utilise sous le capot."
},
"whereNext": {
"heading": "Détails par destination",
"intro": "Chaque destination a sa propre page couvrant le flux de configuration, le format sur disque et la commande de récupération utilisée par la restauration.",
"items": [
{
"label": "Archives locales",
"href": "/docs/backup-restore/destinations/local",
"tail": "— pré-configuration d'une cible locale, montage d'un lecteur USB, vérification de sécurité contre l'écriture de l'archive en soi, le sidecar JSON qui permet au moniteur d'identifier le fichier."
},
{
"label": "Proxmox Backup Server (recommandé)",
"href": "/docs/backup-restore/destinations/pbs",
"tail": " — choix du datastore, identifiants et empreinte du certificat, cycle de vie du fichier de clé, phrase de passe de récupération et envoi du blob de récupération à PBS pour restaurer après une nouvelle installation."
},
{
"label": "Borg",
"href": "/docs/backup-restore/destinations/borg",
"tail": " — dépôts locaux ou accessibles par SSH, provenance du binaire Borg (système / cache / paquet AppImage de Monitor / téléchargement GitHub), initialisation du dépôt, gestion des phrases de passe et configuration des clés SSH pour les dépôts distants."
}
]
}
}
@@ -0,0 +1,75 @@
{
"meta": {
"title": "Destination d'archive locale — tar.zst sur un système de fichiers ou un lecteur USB ProxMenux",
"description": "La destination de sauvegarde locale écrit une seule archive .tar.zst dans n'importe quel répertoire accessible en écriture : un disque interne, un point de montage Proxmox, un partage NFS ou un lecteur USB. Cette page décrit le processus de configuration, la détection USB et la logique de montage, le contrôle de sécurité contre l'écriture de l'archive dans un chemin en cours de sauvegarde, et le sidecar JSON qui identifie le fichier.",
"ogTitle": "Sauvegarde ProxMenux — Destination des archives locales",
"ogDescription": "Comment ProxMenux écrit des sauvegardes locales comme archives .tar.zst et comment configurer le répertoire de destination ou le lecteur USB.",
"twitterTitle": "Destination de sauvegarde locale ProxMenux",
"twitterDescription": "Comment ProxMenux écrit des sauvegardes locales comme des archives .tar.zst sur un système de fichiers ou un lecteur USB."
},
"header": {
"title": "Archives locales",
"description": "La destination locale écrit une seule archive tar compressée dans n'importe quel répertoire accessible en écriture sur l'hôte : un disque interne, un montage NFS ou SMB ou un lecteur USB.",
"section": "Sauvegarde et restauration"
},
"intro": {
"title": "Un fichier autonome",
"body": "Une sauvegarde locale produit un seul fichier <code>hostcfg-HOST-TIMESTAMP.tar.zst</code> (ou <code>.tar.gz</code> lorsque <code>zstd</code> est absent). Le fichier contient l'arborescence entière de l'archive — <code>manifest.json</code>, <code>metadata/</code> et <code>rootfs/</code> — et peut être restauré sur n'importe quel hôte Proxmox avec le flux de restauration ProxMenux ou extrait manuellement avec <code>tar --zstd -xf</code> sur n'importe quel système Linux. Pas de serveur, pas d’initialisation de dépôt, pas de dépendance externe. C'est la destination avec le chemin de récupération le plus court lorsque ni PBS ni Borg n'est disponible."
},
"targetConfig": {
"heading": "Configuration du répertoire cible",
"intro": "La destination locale est un <strong>unique répertoire cible enregistré durablement</strong> — pas une liste. ProxMenux stocke le choix de l'opérateur chez <code>/usr/local/share/proxmenux/local-target.conf</code> et le lit sur chaque sauvegarde. Lorsqu'aucune cible n'a été configurée, le <code>HB_LOCAL_TARGET_DEFAULT = /var/lib/vz/dump</code> par défaut est utilisé (le même répertoire que Proxmox utilise pour ses propres sorties <code>vzdump</code>). La cible est configurée à partir de <em>Configurer les destinations de sauvegarde → Destinations locales</em>:",
"options": [
"<strong>Utilisez par défaut (<code>/var/lib/vz/dump</code>).</strong> Le stockage local Proxmox. Présent sur chaque install Proxmox ; l'archive se trouve à côté des sorties vzdump et est captée automatiquement par l'onglet Sauvegardes du moniteur.",
"<strong>Entrez un chemin personnalisé.</strong> Tout chemin absolu du système de fichiers peut être utilisé : un montage NFS, un partage SMB monté via <code>fstab</code>, un jeu de données ZFS dédié, un deuxième disque interne. ProxMenux valide que le chemin existe et est un répertoire avant de l’enregistrer.",
"<strong>Choisissez un lecteur USB.</strong> Ouvre le sous-menu USB (ci-dessous), qui détecte les appareils amovibles et propose de monter ou de formater un périphérique."
]
},
"usbFlow": {
"heading": "Détection et montage du lecteur USB",
"intro": "Le sous-menu USB énumère les partitions sur les périphériques amovibles signalées par <code>lsblk</code>. Chaque partition est présentée avec sa taille, l'étiquette du système de fichiers et l'état actuel. L'état détermine l'action ProxMenux offre.",
"statesTitle": "Les trois états de l'appareil",
"stateRows": [
{
"state": "monté",
"shown": "Taille · étiquette · [fstype] · → /mount/point",
"action": "La partition est déjà montée quelque part. La sélection enregistre le point de montage actuel en tant que cible locale. Aucun montage n'est effectué."
},
{
"state": "non monté",
"shown": "Taille · étiquette · [fstype] · (non monté — sera monté)",
"action": "Un système de fichiers est présent mais n'est pas monté. Lors de la confirmation, ProxMenux exécute <code>hb_mount_usb_partition</code> : crée <code>/mnt/backup-LABEL</code> (ou un chemin basé sur UUID s'il n'y a pas d'étiquette), monte la partition et persiste le point de montage comme cible locale."
},
{
"state": "vide",
"shown": "Taille · disque USB brut — aucun système de fichiers (sera FORMATÉ)",
"action": "Le périphérique n’a pas de système de fichiers. Cette opération destructive est protégée par deux confirmations. Une boîte de dialogue Oui/Non avertit d’abord que le disque sera effacé. Ensuite, un champ exige de <strong>saisir le chemin exact du périphérique</strong> (par exemple <code>/dev/sdb</code>) avant que ProxMenux crée une nouvelle table GPT avec une partition ext4 et la monte."
}
],
"notMountedFallback": "Lorsqu'aucun périphérique USB n'est détecté, le sous-menu revient à une boîte d'entrée simple. L'opérateur peut entrer un chemin de point de montage arbitraire ; si le chemin n'est pas un point de montage enregistré, une boîte de dialogue de confirmation avertit avant de procéder."
},
"safetyCheck": {
"heading": "Contrôle de sécurité — destination dans un chemin de sauvegarde",
"body": "Avant d'écrire l'archive, <code>_bk_local</code> vérifie que le répertoire de destination n'est <strong>pas</strong> un sous-chemin d'un répertoire en cours de sauvegarde. Une erreur courante consisterait à ajouter <code>/root</code> au profil et à choisir <code>/root/backups</code> comme destination — l'archive s'inclurait alors elle-même, produisant soit une archive corrompue, soit s'agrandissant sans limite jusqu'à ce que le disque se remplisse. La vérification résout les deux chemins avec <code>readlink -m</code>, les compare et, en cas de conflit, abandonne la sauvegarde avec une boîte de dialogue qui nomme le chemin en conflit et répertorie trois façons de le résoudre : choisissez une destination en dehors du chemin en conflit, supprimez l'entrée personnalisée qui contient la destination ou utilisez le mode personnalisé pour décocher le chemin en conflit pour cette exécution."
},
"archiveFormat": {
"heading": "Format d'archives et compression",
"intro": "Le nom du fichier contient le nom d’hôte source et l’horodatage de la sauvegarde, afin de permettre un tri chronologique dans un répertoire contenant plusieurs archives et d’identifier chaque fichier.",
"namePattern": "hostcfg-HOSTNAME-YYYYMMDD_HHMMSS.tar.zst",
"compressionTitle": "Compression",
"compressionBody": "Le chemin primaire utilise <code>tar --zstd -cf</code> — un pipeline à commande unique qui compresse au niveau par défaut de zstd. Lorsque <code>zstd</code> n'est pas présent sur la source (rare sur Proxmox mais possible sur des installations minimales), ProxMenux revient à <code>gzip</code>. Dans le chemin de repli, si <code>pv</code> est disponible, une barre de progression est ajoutée au pipeline afin que l'opérateur voit la taille des archives croître en temps réel; sans <code>pv</code>, <code>tar -czf</code> est utilisé en silence.",
"sourceTitle": "Ce qui va dans l'archive",
"sourceBody": "La commande tar est appelée avec <code>-C \"$staging_root\" .</code>, ce qui archive <strong>toute la racine du répertoire temporaire</strong> : <code>rootfs/</code>, <code>metadata/</code> et <code>manifest.json</code>. Les trois blocs de données se trouvent côte à côte à la racine de l’archive tar. L’extraction produit exactement l’arborescence utilisée par le code de restauration."
},
"sidecar": {
"heading": "Le sidecar JSON",
"intro": "Chaque sauvegarde locale réussie produit un fichier compagnon : <code>HOSTNAME-TIMESTAMP.tar.zst.proxmenux.json</code>, écrit à côté de l'archive par <code>hb_write_archive_sidecar</code>. Ce petit fichier JSON permet au ProxMenux Monitor d'identifier l'archive comme une sauvegarde d'hôte ProxMenux même s'il est déplacé, rebaptisé ou archivé ailleurs.",
"contentTitle": "Contenu du sidecar",
"contentBody": "Le sidecar stocke la version du schéma, que la sauvegarde soit issue d'une opération interactive ou d'un travail programmé (<code>kind</code>), l'ID de travail pour les opérations programmées, le mode de profil utilisé (<code>default</code> ou <code>custom</code>), le nom d'hôte source, le nom de base d'archive original, un horodatage de création ISO-8601 et la taille des archives en octets.",
"whyBody": "L'onglet Sauvegardes du moniteur scanne les répertoires locaux configurés pour les sidecars <code>*.proxmenux.json</code> — pas pour les fichiers <code>*.tar.zst</code> — parce qu'un <code>.tar.zst</code> sans sidecar pourrait ne pas être une sauvegarde ProxMenux du tout. Le scan est rapide (les fichiers JSON sont minuscules) et l'appariement est stable à travers les renoms de l'archive aussi longtemps que le sidecar est renommé pour correspondre."
},
"restoreAccess": {
"heading": "Restauration à partir d'une archive locale",
"body": "Le flux de restauration ProxMenux découvre les archives locales en scannant la cible locale configurée pour les sidecars et en les affichant dans la liste des archives. La sélection d’une archive déclenche <code>_rs_check_layout</code>, qui extrait le tarball dans un répertoire de préparation temporaire et confirme la mise en page à trois payload avant de procéder. Pour l'extraction manuelle à l'extérieur de ProxMenux, <code>tar --zstd -xf hostcfg-HOSTNAME-TIMESTAMP.tar.zst -C /tmp/hostcfg</code> donne le même arbre que le code de restauration consommé."
}
}
@@ -0,0 +1,113 @@
{
"meta": {
"title": "Proxmox Backup Server destination — dépôt, chiffrement, récupération ProxMenux",
"description": "La destination PBS enregistre les sauvegardes d’hôte ProxMenux au format PBS. Cette page décrit la détection des dépôts dans /etc/pve/storage.cfg, la configuration manuelle, l’envoi des archives .pxar, le chiffrement côté client avec un fichier clé et sa copie de secours facultative protégée par une phrase secrète, ainsi que sa récupération depuis plusieurs sources sur un hôte réinstallé.",
"ogTitle": "ProxMenux Sauvegarde — Proxmox Backup Server destination",
"ogDescription": "Comment ProxMenux écrit des sauvegardes d'hôte à Proxmox Backup Server avec le cryptage de fichier clé côté client et la récupération séquestre.",
"twitterTitle": "PBS destination de sauvegarde ProxMenux",
"twitterDescription": "Destination Proxmox Backup Server avec chiffrement par fichier clé et copie de récupération protégée par une phrase secrète."
},
"header": {
"title": "Proxmox Backup Server",
"description": "La destination PBS envoie tout le répertoire de préparation sous forme d’une seule sauvegarde .pxar vers un datastore Proxmox Backup Server. Le chiffrement côté client avec un fichier clé est facultatif, tout comme l’envoi, à côté de chaque sauvegarde, d’une copie de récupération de la clé protégée par une phrase secrète.",
"section": "Sauvegarde et restauration"
},
"recommendedBadge": "Destination recommandée",
"aboutPbs": {
"heading": "Qu'est-ce que Proxmox Backup Server",
"body": "Proxmox Backup Server (PBS) est le propre produit serveur de sauvegarde de Proxmox, développé et entretenu par la même équipe que les auteurs Proxmox VE. Il s'agit d'un serveur de sauvegarde dédié conçu pour recevoir des sauvegardes des hôtes Proxmox VE (VMs, LXCs et — via <code>proxmox-backup-client</code> — répertoires d'hôtes arbitraires) avec déduplication basée sur le chunk, chiffrement côté client et politiques de rétention appliquées côté serveur. ProxMenux utilise le PBS comme l'une des trois destinations pour les sauvegardes d'hôtes; chaque mécanisme spécifique au PBS décrit sur cette page (groupes de sauvegarde, archives <code>.pxar</code>, <code>--backup-id</code>, cryptage de fichiers clés) est le comportement standard du PBS."
},
"intro": {
"title": "Une sauvegarde par exécution, déduplication par blocs",
"body": "Une sauvegarde PBS crée une seule entrée dans le datastore, sous l’identifiant <code>host/hostcfg-HOSTNAME/BACKUP-TIME</code>. Les données sont une archive <code>.pxar</code> contenant la même structure en trois blocs que celle décrite dans <em>Fonctionnement</em>. PBS déduplique les blocs entre toutes les sauvegardes du datastore : les suivantes ne transfèrent et ne stockent que les blocs modifiés de cet hôte. Pour les tâches planifiées, ProxMenux applique lui-même la rétention : après chaque exécution réussie, <code>run_scheduled_backup.sh</code> lance <code>proxmox-backup-client prune</code> avec <code>--keep-last</code> / <code>--keep-daily</code> / <code>--keep-weekly</code> et les valeurs configurées pour la tâche."
},
"repoSelection": {
"heading": "Sélection du dépôt",
"intro": "ProxMenux découvre des dépôts PBS de deux sources sur chaque sauvegarde. L'opérateur en choisit un dans un menu unifié; le choix détermine <code>HB_PBS_REPOSITORY</code>, <code>HB_PBS_SECRET</code> et <code>HB_PBS_FINGERPRINT</code> pour l'exécution.",
"sourceRows": [
{
"source": "storage.cfg de Proxmox (détection automatique)",
"path": "/etc/pve/storage.cfg + /etc/pve/priv/storage/NAME.pw",
"content": "Toute stanza <code>pbs:</code> dans la configuration de stockage propre de Proxmox est captée automatiquement. Serveur, datastore, nom d'utilisateur et empreinte digitale viennent de la stanza. Le mot de passe est lu dans le propre répertoire d'identification de Proxmox. Aucune réentrée nécessaire du côté ProxMenux — le dépôt est disponible dès qu'il est configuré dans Proxmox."
},
{
"source": "Configuration manuelle ProxMenux",
"path": "/usr/local/share/proxmenux/pbs-manual-configs.txt + pbs-pass-NAME.txt + pbs-fingerprint-NAME.txt",
"content": "Ajouté de <em>Configurer les destinations de sauvegarde → PBS destinations → Ajouter PBS</em>. Prompts pour un nom, nom d'utilisateur (<code>root@pam</code> ou <code>user@pbs!token</code>), hôte ou IP, datastore et mot de passe. Le mot de passe reprend sur l'entrée vide — une sauvegarde vide persisterait silencieusement et chaque sauvegarde ultérieure échouerait avec une erreur d'authentification opaque. Ce chemin est utilisé lorsque la cible PBS n'est pas enregistrée comme stockage Proxmox."
}
],
"menuTitle": "Menu de sélection",
"menuBody": "Les deux sources sont affichées dans un menu unique, chaque ligne marquée avec son origine (<code>[proxmox]</code> ou <code>[manual]</code>). Les entrées dont le mot de passe n'a pas pu être résolu sont marquées d'un avertissement <code>⚠ no password</code> – la sélection d'une entrée déclenche une réentrée de mot de passe avant le début de la sauvegarde. L'empreinte digitale est transmise à <code>proxmox-backup-client</code> via la variable d'environnement <code>PBS_FINGERPRINT</code>; en cas d'absence, le client demande à l'opérateur d'accepter le certificat serveur de manière interactive lors de la première sauvegarde."
},
"backupCommand": {
"heading": "La commande de sauvegarde",
"intro": "L’envoi se fait en un seul appel à <code>proxmox-backup-client backup</code>. ProxMenux utilise <code>env</code> pour transmettre au client le mot de passe, le mot de passe de chiffrement et l’empreinte sous forme de variables d’environnement.",
"cmd": "env \\\n PBS_PASSWORD=\"$HB_PBS_SECRET\" \\\n PBS_ENCRYPTION_PASSWORD=\"$HB_PBS_ENC_PASS\" \\\n PBS_FINGERPRINT=\"$HB_PBS_FINGERPRINT\" \\\n proxmox-backup-client backup \\\n hostcfg.pxar:$staging_root \\\n --repository USER@REALM@HOST:DATASTORE \\\n --backup-type host \\\n --backup-id hostcfg-HOSTNAME \\\n --backup-time BACKUP-EPOCH \\\n [--keyfile /usr/local/share/proxmenux/pbs-key.conf]",
"backupIdTitle": "Nom de l'ID de sauvegarde",
"backupIdBody": "L’identifiant de sauvegarde par défaut est <code>hostcfg-HOSTNAME</code>. L’opérateur doit le confirmer ou le modifier avant l’envoi ; les caractères hors de <code>[A-Za-z0-9_-]</code> et les tirets finaux sont supprimés. Réutiliser le même identifiant est volontaire : PBS le considère comme un <em>groupe</em>. Chaque sauvegarde suivante devient une nouvelle entrée du groupe et partage la déduplication avec les précédentes.",
"pxarTitle": "Pourquoi la source est la racine de mise en scène complète",
"pxarBody": "La source <code>.pxar</code> est la totalité du <code>staging_root</code> — <code>rootfs/</code>, <code>metadata/</code> et <code>manifest.json</code> ensemble. Les versions antérieures ont passé le <code>$staging_root/rootfs</code> comme source; cela a laissé le <code>metadata/</code> hors de l'archive et la vérification de compatibilité de la restauration n'avait rien à lire, dégradant aux avertissements cross-host même sur les restaurations même-host. Les anciennes sauvegardes créées avec la source rootfs-only restaure toujours correctement via la branche case-<code>_rs_check_layout</code> de 3, qui enveloppe un arbre plat <code>etc/var/root/usr</code> dans une hiérarchie <code>rootfs/</code>."
},
"encryption": {
"heading": "Chiffrement côté client",
"glossaryHint": "Cette section emploie les termes <em>fichier clé</em>, <em>phrase secrète</em> et <em>enveloppe de récupération</em>. Le <glosarioLink>glossaire</glosarioLink> résume leurs différences en une phrase par terme.",
"intro": "Le chiffrement PBS côté client avec un fichier clé chiffre les blocs sur l’hôte source avant leur envoi. Dans ProxMenux, il est facultatif. Une fois activé, l’opérateur choisit explicitement, par oui ou non lors de la configuration, s’il faut aussi déposer sur PBS une copie de récupération du fichier clé protégée par une phrase secrète ; ce choix reste modifiable dans le moniteur. Le fichier clé se trouve toujours au chemin canonique <code>/usr/local/share/proxmenux/pbs-key.conf</code> et est réutilisé sans nouvelle demande pour chaque sauvegarde chiffrée suivante.",
"keyfileTitle": "Configuration du fichier de clés",
"keyfileBody": "Le dialogue de chiffrement apparaît lors de la première sauvegarde chiffrée de l’hôte. Il demande d’abord s’il faut chiffrer la sauvegarde : <em>Non</em> poursuit sans chiffrement, <em>Oui</em> passe à la deuxième étape. Celle-ci dépend de la présence d’un fichier clé dans <code>/usr/local/share/proxmenux/pbs-key.conf</code>. S’il existe, il est réutilisé sans nouvelle demande et la sauvegarde continue ; les suivantes ne reposent pas la question. Sinon, un menu propose deux options. <em>Générer un nouveau fichier clé</em> exécute <code>proxmox-backup-client key create --kdf none</code>. <em>Utiliser un fichier clé existant</em> détecte automatiquement une clé gérée par PVE : si le dépôt PBS choisi est enregistré dans Proxmox avec une clé de chiffrement dans <code>/etc/pve/priv/storage/&lt;NAME&gt;.enc</code>, ce fichier est copié sans demande au chemin canonique ProxMenux. Si aucune clé PVE ne correspond au dépôt, le dialogue demande le chemin absolu où l’opérateur a déjà placé le fichier clé sur cet hôte. Dans les deux cas, le fichier est installé au chemin canonique avec <code>chmod 600</code>.",
"modesTitle": "Fichier clé par hôte ou partagé",
"modesIntro": "Les deux modes sont pris en charge, sans en imposer un : l’opérateur choisit selon l’organisation de son parc.",
"modesPerHostTitle": "Fichier de clés par hôte (par défaut)",
"modesPerHostBody": "Chaque hôte génère son propre fichier de clé la première fois qu'il permet le cryptage PBS. L'isolement est maximal : compromettre le fichier clé d'un hôte n'expose les sauvegardes d'aucun autre. Recommandé pour les flottes de production et pour les environnements où les hôtes ont différents propriétaires ou limites de conformité.",
"modesSharedTitle": "Fichier de clés partagé (import sur chaque hôte)",
"modesSharedBody": "Un fichier clé principal généré une fois et installé sur chaque hôte via l’option <em>Utiliser un fichier clé existant</em>. La gestion est plus simple: un seul secret à sauvegarder, et tout hôte peut déchiffrer les archives de n'importe quel autre (utile pour la consolidation, les exercices de restauration cross-host ou la vérification centralisée de sauvegarde). Le compromis est qu'une fuite du fichier de clés partagé expose chaque hôte à la fois. Recommandé pour les labos et les flottes où tous les hôtes ont le même propriétaire et la même limite de confiance.",
"recoveryTitle": "Déposer la clé sur PBS : l’opérateur décide",
"recoveryBody": "Juste après le choix du fichier clé, ProxMenux pose une question explicite, <em>Déposer la clé sur PBS ?</em>, avec deux réponses. <strong>Aucun élément de récupération n’est envoyé à PBS tant que l’opérateur n’a pas répondu Oui.</strong> Le choix par défaut est <em>Non, conserver uniquement en local</em> : le fichier clé reste au chemin canonique local, ProxMenux n’envoie aucun élément de récupération à PBS et l’opérateur gère lui-même la copie hors site. Le bouton <em>Télécharger le fichier clé</em> du moniteur, dans la ligne du dépôt PBS, permet de l’obtenir à la demande. Choisir <em>Oui, envoyer</em> demande deux saisies identiques d’une phrase secrète de récupération. ProxMenux protège le fichier clé avec cette phrase par AES-256-CBC et PBKDF2 (600 000 itérations, sel aléatoire), produisant <code>pbs-key.recovery.enc</code>. Chaque sauvegarde chiffrée suivante envoie cette enveloppe à PBS dans un groupe de sauvegarde associé. Ces envois ne transmettent à PBS ni la phrase secrète ni le fichier clé en clair. Le choix reste modifiable à tout moment dans le moniteur : le contrôle de la ligne PBS permet Oui ou Non et applique immédiatement Démarrer l’envoi, Arrêter l’envoi ou Modifier la phrase secrète selon l’état courant.",
"blobUploadTitle": "Groupe de sauvegarde associé sur PBS",
"blobUploadBody1": "Lorsque le mode de dépôt est <em>Oui, envoyer</em>, ProxMenux envoie l’enveloppe de récupération à PBS après chaque sauvegarde chiffrée, dans un second groupe associé. Son nom reprend celui du groupe de l’hôte avec le suffixe <code>-keyrecovery</code>. Les deux groupes se trouvent côte à côte dans le datastore : l’un pour les sauvegardes de l’hôte, l’autre pour les enveloppes de récupération. <strong>L’enveloppe ne quitte jamais l’hôte en clair</strong> : le chiffrement se fait sur l’hôte avec AES-256-CBC et PBKDF2 avant toute transmission (<code>openssl enc -aes-256-cbc -pbkdf2 -iter 600000 -salt</code>). PBS ne reçoit que l’enveloppe déjà chiffrée.",
"envelopeSecurityTitle": "Le téléchargement du fichier de récupération de clé vers PBS est-il un risque de sécurité?",
"envelopeSecurityBody": "Le fichier de récupération des clés est chiffré en transit et au repos. Le mot de passe de récupération ne quitte jamais l'hôte : le chiffrement se produit localement avant le téléchargement, et PBS ne voit que le résultat déjà chiffré. Un administrateur PBS — ou toute personne ayant accès à la datastore — peut télécharger le fichier de récupération de clé, mais sans la phrase de récupération, ils ne peuvent pas lire le fichier de clé à l'intérieur : c'est un chiffrement opaque. Reconstruire le fichier de clés nécessite les deux pièces à la fois, le fichier de récupération de clés et la phrase de passe, et seul l'opérateur détient les deux.",
"blobUploadConstraintTitle": "Pourquoi deux groupes au lieu d'un seul crypté",
"blobUploadConstraintBody": "Un seul appel à <code>proxmox-backup-client backup</code> chiffre toutes ses archives avec le même fichier clé, ou aucune : il ne permet pas de mélanger les deux. La sauvegarde de l’hôte doit être chiffrée avec sa clé, mais l’enveloppe de récupération ne peut pas être envoyée dans le même appel : elle serait alors chiffrée avec le fichier clé qu’elle contient. Sur un hôte réinstallé, il serait impossible de l’ouvrir, puisqu’il faudrait la clé pour déchiffrer cette même clé. Les deux éléments sont donc envoyés indépendamment et apparaissent dans deux groupes. Le client PBS chiffre la sauvegarde de l’hôte avec le fichier clé ; ProxMenux chiffre l’enveloppe avec la phrase secrète avant son envoi. Deux couches de chiffrement distinctes protègent deux éléments différents.",
"blobUploadImageAlt": "PBS UI montrant les groupes de sauvegarde hostcfg-HOSTNAME et hostcfg-HOSTNAME-keyrecovery adjacents à la liste datastore.",
"blobUploadImageCaption": "PBS UI — les groupes de sauvegarde appariés. Le groupe principal détient les sauvegardes de l'hôte; le groupe -keyrecovery détient le fichier de clés enveloppé de la phrase de passe.",
"recoverTitle": "Récupération sur un hôte frais",
"recoverBody": "Lorsque le fichier clé manque au chemin canonique, après une réinstallation ou une suppression explicite, la restauration essaie trois sources dans l’ordre et retient la première clé utilisable. D’abord, si une clé gérée par PVE correspond au dépôt PBS choisi dans <code>/etc/pve/priv/storage/&lt;NAME&gt;.enc</code>, elle est copiée sans demande au chemin canonique. Ensuite, si un groupe <code>-keyrecovery</code> existe sur PBS, son instantané le plus récent est téléchargé et la phrase secrète de récupération est demandée pour le déchiffrer. Enfin, si les deux options échouent ou sont refusées, le dialogue demande le chemin absolu du fichier clé sur cet hôte et le copie au chemin canonique. Le moniteur propose le même import dans la fenêtre de détail de la sauvegarde. Un panneau ambre apparaît en haut lorsque Restaurer, Télécharger ou Voir le contenu nécessite une clé absente. Si une clé est installée mais ne correspond pas à celle du chiffrement, PBS renvoie <code>wrong key — manifest's key XX does not match provided key YY</code>. Les mêmes trois actions affichent alors un panneau structuré mettant en évidence l’empreinte exigée par le manifeste, afin de déterminer quelle clé importer pour ouvrir cette sauvegarde.",
"monitorManagementTitle": "Gestion du fichier clé depuis le moniteur",
"monitorManagementBody": "Le moniteur affiche les commandes du fichier clé directement dans chaque ligne de destination PBS de la page de configuration des sauvegardes. Trois actions sont proposées : <em>Télécharger</em> exporte le fichier actuel vers le navigateur ; <em>Envoyer</em> remplace le fichier installé par celui fourni par l’opérateur, l’ancien n’étant écrasé qu’après l’installation réussie du nouveau au chemin canonique ; <em>Supprimer</em> retire le fichier de l’hôte. À côté figure le contrôle du dépôt de récupération : un choix Oui/Non pour <em>Déposer la clé sur PBS ?</em>, un champ de phrase secrète si Oui est choisi et un bouton d’application contextuel indiquant <em>Démarrer l’envoi</em>, <em>Arrêter l’envoi</em> ou <em>Modifier la phrase secrète</em>. Chaque action utilise les mêmes points d’accès Flask que l’interface de terminal : l’effet sur disque et l’état sur PBS sont donc identiques depuis les deux interfaces."
},
"restoreAccess": {
"heading": "Récupération du côté restauration",
"body": "La restauration repère les sauvegardes d’hôte ProxMenux sur PBS en listant les groupes du dépôt configuré puis en filtrant leur identifiant. L’onglet Sauvegardes du moniteur affiche la même liste. Choisir une sauvegarde lance <code>proxmox-backup-client restore</code> avec le même dépôt, mot de passe et empreinte, ainsi que <code>--keyfile</code> si elle est chiffrée. L’archive <code>.pxar</code> est extraite dans un répertoire de préparation que <code>_rs_check_layout</code> transmet au processus de restauration standard. Hors de ProxMenux, la même commande extrait l’archive à l’emplacement souhaité pour examiner l’arborescence ou effectuer une restauration manuelle."
},
"references": {
"heading": "Références",
"intro": "Documentation officielle de Proxmox Backup Server pour les composants utilisés par ProxMenux.",
"items": [
{
"label": "Documentation Proxmox Backup Server",
"href": "https://pbs.proxmox.com/docs/",
"tail": "— point d'entrée principal couvrant l'installation, l'administration, le stockage, les utilisateurs et les rôles."
},
{
"label": "proxmox-backup-client",
"href": "https://pbs.proxmox.com/docs/backup-client.html",
"tail": " — l’outil en ligne de commande appelé par ProxMenux pour chaque sauvegarde et restauration. Décrit les identifiants et types de sauvegarde, les archives, la syntaxe des dépôts et les variables d’environnement."
},
{
"label": "Chiffrement côté client",
"href": "https://pbs.proxmox.com/docs/backup-client.html#encryption",
"tail": " — création du fichier clé, modes --kdf et modèle de chiffrement que ProxMenux complète par une copie de récupération protégée par une phrase secrète."
},
{
"label": "Gestion des Datastore",
"href": "https://pbs.proxmox.com/docs/storage.html",
"tail": " — création et gestion des datastores qui reçoivent les sauvegardes d’hôte, avec la structure du stockage des blocs et les permissions."
},
{
"label": "Élagage des sauvegardes et récupération d’espace",
"href": "https://pbs.proxmox.com/docs/maintenance.html#pruning",
"tail": " — le modèle de rétention de --keep-last / --keep-daily / --keep-weekly que ProxMenux applique par tâche planifiée, et la récupération des blocs inutilisés par PBS après l’élagage."
}
]
}
}
@@ -0,0 +1,230 @@
{
"meta": {
"title": "Glossaire — Sauvegarde et restauration ProxMenux",
"description": "Glossaire des termes et définitions de la pile de sauvegarde et de restauration ProxMenux: chiffrement, fichier de clés, mots de passe, enveloppe de récupération, PBS, morceaux, rootfs, manifeste, hydratation coureur et cross-kernel.",
"ogTitle": "Glossaire de la sauvegarde et de la restauration | ProxMenux",
"ogDescription": "Définitions claires des termes utilisés dans la documentation de sauvegarde et de restauration ProxMenux.",
"twitterTitle": "Glossaire de la sauvegarde et de la restauration | ProxMenux",
"twitterDescription": "Phrase de passe, fichier clé, enveloppe de récupération, rootfs, manifeste, PBS, morceaux — tous définis en un seul endroit."
},
"header": {
"title": "Glossaire",
"description": "Termes utilisés dans la documentation de sauvegarde et de restauration, avec leur définition.",
"section": "Sauvegarde et restauration"
},
"intro": {
"body": "Les termes sont regroupés par thème. Chaque entrée donne le terme et une courte définition."
},
"groups": [
{
"title": "Chiffrement et récupération des clés",
"intro": "Vocabulaire pour le bloc de chiffrement PBS. Il implique deux secrets distincts: un fichier de clés binaires et une phrase de passe écrite.",
"entries": [
{
"id": "passphrase-recuperacion",
"term": "Phrase secrète de récupération",
"def": "Mot de passe texte choisi par l'utilisateur pour protéger l’<a href=\"#sobre-recuperacion\">enveloppe de récupération</a>. Il est demandé deux fois avec une vérification de correspondance, et n'est utilisé que pour chiffrer l'enveloppe et la déchiffrer si le fichier clé a besoin d'être récupéré. <strong>Ce n'est pas la phrase de passe qui déverrouille le fichier clé lui-même</strong>, et il n'est jamais envoyé à PBS. Pendant une sauvegarde normale, il ne quitte jamais l'hôte."
},
{
"id": "clave-cifrado",
"term": "Fichier-clé (clé de chiffrement)",
"def": "Fichier de clé utilisé par proxmox-backup-client pour chiffrer les <a href=\"#chunk\">blocs</a> avant leur envoi à PBS. Sans la clé correspondante, les données chiffrées sont illisibles. ProxMenux le stocke dans <code>/usr/local/share/proxmenux/pbs-key.conf</code> avec le mode <code>600</code>. Protégez-le : l’<a href=\"#sobre-recuperacion\">enveloppe de récupération</a> permet de le récupérer en cas de perte."
},
{
"id": "contrasena-keyfile",
"term": "Phrase de passe du fichier clé (phrase de passe KDF)",
"def": "Phrase de passe optionnelle que le fichier clé lui-même peut porter, distincte de la <a href=\"#passphrase-recuperacion\">phrase de passe de récupération</a>. Il n'existe que lorsque le fichier clé a été créé avec <code>--kdf scrypt</code> (généralement un fichier clé importé). Sans cela, le fichier clé ne peut pas être déverrouillé pour utilisation. ProxMenux le maintient sous forme chiffrée sur l'hôte afin que les sauvegardes programmées puissent fonctionner sans une demande interactive."
},
{
"id": "sobre-recuperacion",
"term": "Enveloppe de récupération",
"def": "Le fichier <a href=\"#clave-cifrado\">keyfile</a> enveloppé dans une couche supplémentaire: il est crypté avec la <a href=\"#passphrase-recuperacion\">phrase de passe de récupération</a> utilisant <a href=\"#aes-256-cbc\">AES-256-CBC</a> et <a href=\"#pbkdf2\">PBKDF2</a> avant de quitter l'hôte. C'est ce qui est téléchargé sur PBS en tant que groupe <code>-keyrecovery</code>. Sans la phrase de passe, l'enveloppe est opaque : le téléchargement de PBS ne révèle pas le fichier de clés."
},
{
"id": "cifrado-cliente",
"term": "Chiffrement côté client",
"def": "Modèle de chiffrement dans lequel les données sont chiffrées sur l'hôte source avant d'être téléchargées. PBS ne reçoit et stocke que du texte codé; même un administrateur PBS avec accès datastore ne peut pas le lire sans le fichier clé. ProxMenux s'appuie sur ce modèle et ajoute l’<a href=\"#sobre-recuperacion\">enveloppe de récupération</a> sur le dessus."
},
{
"id": "kdf-none",
"term": "--kdf none",
"def": "Option de <code>proxmox-backup-client key create</code> qui produit un fichier de clés sans phrase de passe jointe. Le fichier de clés peut être utilisé directement sans une prompte, ce qui est essentiel pour les travaux programmés qui ne sont pas surveillés. C'est ce que ProxMenux utilise par défaut lors de la génération d'un nouveau fichier clé."
},
{
"id": "kdf-scrypt",
"term": "--kdf scrypt",
"def": "Option pour <code>proxmox-backup-client key create</code> qui produit un fichier clé protégé par une <a href=\"#contrasena-keyfile\">phrase de passe du fichier de clé</a>. Chaque utilisation du fichier clé nécessite de le déverrouiller avec cette phrase de passe. ProxMenux accepte ce style de keyfile sur l'importation et stocke la phrase de passe cryptée afin que les sauvegardes programmées puissent toujours fonctionner sans surveillance."
},
{
"id": "aes-256-cbc",
"term": "AES-256-CBC",
"def": "Chiffrement symétrique standard. ProxMenux l’utilise via <code>openssl enc -aes-256-cbc</code> pour protéger le <a href=\"#clave-cifrado\">fichier de clé</a> avec la <a href=\"#passphrase-recuperacion\">phrase de passe de récupération</a> et produire l’<a href=\"#sobre-recuperacion\">enveloppe</a>."
},
{
"id": "pbkdf2",
"term": "PBKDF2",
"def": "Fonction cryptographique qui transforme une phrase de passe de type humain en une clé binaire adaptée au chiffrement. Il ralentit les tentatives de force brute en appliquant de nombreuses itérations. ProxMenux l'utilise avec des itérations 600 000 et un sel aléatoire lors du chiffrement de l'enveloppe de récupération."
}
]
},
{
"title": "Structure de sauvegarde",
"intro": "Termes décrivant ce qui vit dans une sauvegarde, quelle que soit la destination.",
"entries": [
{
"id": "rootfs",
"term": "rootfs / système de fichiers racine",
"def": "Copie des fichiers de l’hôte source réalisée par <code>rsync</code> selon le <a href=\"#perfil-defecto\">profil par défaut</a> et les <a href=\"#rutas-personalizadas\">chemins personnalisés</a>. Ce n’est pas une image de disque complet : seuls sont copiés les chemins contenant la configuration ou l’état que Proxmox ne peut pas recréer seul."
},
{
"id": "manifiesto",
"term": "Manifeste (manifest.json)",
"def": "Document structuré JSON décrivant l'hôte source au moment de la sauvegarde : matériel, stockage, noyau, composants installés par ProxMenux et inventaire des VM et des LXC. Il est produit par six collecteurs indépendants. Le flux de restauration l'utilise pour comparer la source et la cible."
},
{
"id": "staging",
"term": "Répertoire de préparation",
"def": "Répertoire temporaire où ProxMenux assemble les trois blocs (rootfs, métadonnées et manifeste) avant de les emballer et de les télécharger vers la destination. Il est supprimé automatiquement lorsque la sauvegarde se termine, même sur avorter."
},
{
"id": "perfil-defecto",
"term": "Profil par défaut",
"def": "Ensemble sélectionné de chemins copiés par défaut dans chaque sauvegarde : configuration PVE, réseau, SSH, noyau, apt, outils ProxMenux et plus encore. Défini dans le code et documenté sur la page <em>Comment ça marche</em>."
},
{
"id": "rutas-personalizadas",
"term": "Chemins personnalisés",
"def": "Les chemins supplémentaires que l'utilisateur ajoute au dessus du <a href=\"#perfil-defecto\">profil par défaut</a>. Soit persistante (conservée en <code>backup-extra-paths.txt</code>) soit per-run (en mode personnalisé)."
}
]
},
{
"title": "Destinations et stockage",
"intro": "Termes liés à l'emplacement de la sauvegarde — serveur PBS, archive locale ou dépôt Borg — et comment PBS organise les données.",
"entries": [
{
"id": "repositorio-pbs",
"term": "Dépôt PBS",
"def": "Combinaison de Proxmox Backup Server + <a href=\"#datastore\">datastore</a> + utilisateur qui reçoit la sauvegarde. Identifié par la chaîne <code>user@realm@host:datastore</code>. Un seul serveur PBS peut héberger plusieurs dépôts."
},
{
"id": "datastore",
"term": "Banque de données",
"def": "Espace de stockage précis dans un serveur PBS contenant les sauvegardes et leurs blocs. Chaque datastore repose sur un système de fichiers du serveur PBS avec ses propres permissions et politiques."
},
{
"id": "chunk",
"term": "Bloc (chunk) / déduplication par blocs",
"def": "PBS divise chaque sauvegarde en morceaux de taille variable, identifie chaque morceau par son hachage et ne stocke chaque morceau qu'une seule fois, même s'il apparaît dans de nombreuses sauvegardes différentes. Cela signifie que les sauvegardes successives d'un même hôte — ou d'un hôte similaire — prennent très peu d'espace supplémentaire."
},
{
"id": "fingerprint",
"term": "Empreinte",
"def": "Empreinte cryptographique du certificat du serveur PBS TLS Il permet au client de vérifier qu'il parle au serveur prévu sans compter sur une autorité de certification publique. ProxMenux le transmet à <code>proxmox-backup-client</code> via la variable d'environnement <code>PBS_FINGERPRINT</code>."
},
{
"id": "grupo-copia",
"term": "Groupe de sauvegarde",
"def": "Conteneur logique à l'intérieur de PBS sous lequel les sauvegardes successives du même actif s'accumulent. Chaque nouvelle sauvegarde partage la déduplication avec les précédentes dans le même groupe. ProxMenux utilise deux groupes par hôte lorsque le chiffrement est activé : un pour la sauvegarde de l'hôte et un avec un suffixe <code>-keyrecovery</code> pour l’<a href=\"#sobre-recuperacion\">enveloppe de récupération</a>."
},
{
"id": "backup-id",
"term": "ID de sauvegarde",
"def": "Nom du groupe <a href=\"#grupo-copia\">backup</a>. ProxMenux par défaut sur <code>hostcfg-HOSTNAME</code> et permet à l'utilisateur de l'éditer avant le téléchargement; les caractères non pris en charge sont supprimés automatiquement."
},
{
"id": "pxar",
"term": ".pxar",
"def": "Format d'archive native PBS pour les répertoires. Il se comporte comme un tar optimisé pour la déduplication des morceaux : au lieu de stocker un fichier opaque, PBS brise son contenu en morceaux réutilisables."
}
]
},
{
"title": "Exécution et calendrier",
"intro": "Termes utilisés par le système ProxMenux emploi programmé.",
"entries": [
{
"id": "runner",
"term": "Processus d'exécution",
"def": "Le script <code>run_scheduled_backup.sh</code> qui exécute une sauvegarde programmée. Il lit la configuration du travail, lance le moteur correspondant (Local, PBS ou Borg), applique la conservation sur le succès et envoie les notifications configurées."
},
{
"id": "trabajo-programado",
"term": "Tâche planifiée",
"def": "Configuration permanente d'une sauvegarde récurrente. Tient destination, identifiants, chiffrement, calendrier et conservation. Vit à <code>/var/lib/proxmenux/backup-jobs/&lt;id&gt;.env</code>."
},
{
"id": "modo-adjunto",
"term": "Mode rattaché",
"def": "Tâche sans timer propre. Un hook job-end de PVE <code>vzdump</code> la déclenche après les sauvegardes des invités si le stockage correspond. La tâche parent fournit la destination et la conservation, relue depuis la tâche parent à chaque exécution, mais le hook compare le stockage, pas l’ID parent. Une autre tâche sur ce stockage peut aussi la déclencher. Uniquement Local et PBS."
},
{
"id": "timer-systemd",
"term": "Systemd minuterie",
"def": "Mécanisme standard systemd qui déclenche une commande sur un calendrier. ProxMenux crée une minuterie par <em>indépendant</em> emploi programmé; <a href=\"#modo-adjunto\"> mode rattaché</a> emplois n'utilisent pas de minuterie, ils fonctionnent via le script PVE-hook."
},
{
"id": "retencion",
"term": "Conservation (keep-last, keep-daily…)",
"def": "Politique qui décide quelles sauvegardes plus anciennes à conserver et à pruner. Défini par travail avec des paramètres comme <code>keep-last</code>, <code>keep-daily</code>, <code>keep-weekly</code>, <code>keep-monthly</code>. Appliquée par le processus d’exécution après chaque sauvegarde réussie."
}
]
},
{
"title": "Restaurer",
"intro": "Termes du flux de restauration.",
"entries": [
{
"id": "restauracion-universal",
"term": "Restauration universelle",
"def": "Le flux de restauration ProxMenux n'extrait pas seulement le système de fichiers : il lit le manifeste pour repérer les différences entre la source et la cible, reproduit la configuration du système et réexécute les installateurs des composants gérés par ProxMenux. Le but est de reproduire l'hôte source, pas seulement l'archive."
},
{
"id": "hidratacion",
"term": "Hydratation entre versions du noyau",
"def": "Étape de restauration qui fusionne les réglages de l’utilisateur depuis la source (paramètres IOMMU, ID VFIO, particularités et clés GRUB) avec la configuration de démarrage neuve de la cible, sans recopier tels quels les fichiers liés au noyau source. S’exécute si le noyau cible est plus récent que celui de la sauvegarde."
},
{
"id": "cross-kernel",
"term": "Restaurer le cross-kernel",
"def": "Restaurer où le noyau de la cible diffère de (habituellement est plus récent que) celui de la source. Nécessite le passage <a href=\"#hidratacion\">hydration</a> pour éviter de traîner le long de fichiers incompatibles avec le noyau de la cible."
},
{
"id": "instalador-postboot",
"term": "Installation après démarrage",
"def": "Composants réinstallés après le premier démarrage de l'hôte restauré (drivers NVIDIA, drivers Coral TPU, outils AMD GPU, outils Intel GPU). Chaque installateur fonctionne contre le noyau de la cible, de sorte que l'hôte restauré ne dépend pas de la présence du noyau de la source."
},
{
"id": "compatibility-check",
"term": "Vérification de compatibilité",
"def": "Comparaison entre le manifeste source et l'état de la cible que ProxMenux effectue au début de la restauration. Il décide quelles parties sont copiées mot à mot, qui ont besoin d'hydratation et qui sont recréées par un installateur."
},
{
"id": "equipo-recien-instalado",
"term": "Installation fraîche",
"def": "Hôte juste réinstallé à partir de zéro, sans fichier local <a href=\"#clave-cifrado\">key</a>. La restauration d'une sauvegarde chiffrée nécessite d'abord la récupération du fichier clé à partir de l’<a href=\"#sobre-recuperacion\">enveloppe</a> stockée sur PBS, en utilisant la phrase de passe <a href=\"#passphrase-recuperacion\">de récupération</a>."
}
]
}
],
"whereNext": {
"heading": "Où après",
"items": [
{
"label": "Comment ça marche",
"href": "/docs/backup-restore/how-it-works",
"tail": " — où se placent rootfs, le manifeste et l’inventaire des applications dans une sauvegarde."
},
{
"label": "Destination Proxmox Backup Server",
"href": "/docs/backup-restore/destinations/pbs",
"tail": "— où le cryptage côté client, le fichier clé, la phrase de récupération et l'enveloppe sont documentés en profondeur."
},
{
"label": "Restauration",
"href": "/docs/backup-restore/restoring",
"tail": " — procédure de restauration et utilisation du manifeste."
}
]
}
}
@@ -0,0 +1,205 @@
{
"meta": {
"title": "Comment ProxMenux Sauvegarde fonctionne en interne — rootfs, manifeste, applications",
"description": "Description détaillée de ce qu'une sauvegarde ProxMenux contient : les rootfs produits par rsync du profil de chemin par défaut, le manifeste structuré construit par six collecteurs indépendants, et l'inventaire d'applications qui entraîne la réinstallation automatique des paquets et des composants après une restauration.",
"ogTitle": "Comment la sauvegarde ProxMenux fonctionne en interne",
"ogDescription": "Les trois parties d’une sauvegarde ProxMenux : rootfs, manifeste et applications.",
"twitterTitle": "Fonctionnement des sauvegardes ProxMenux | ProxMenux",
"twitterDescription": "Les trois charges utiles d'une sauvegarde ProxMenux et comment la restauration reproduit l'hôte source à partir d'eux."
},
"header": {
"title": "Comment ça marche",
"description": "La structure interne d’une sauvegarde ProxMenux — système de fichiers, manifeste et inventaire des applications — et leur utilisation pour recréer l’hôte source sur une destination dont le noyau peut être différent.",
"section": "Sauvegarde et restauration"
},
"intro": {
"title": "Une archive, trois charges utiles",
"body": "Chaque sauvegarde crée trois parties bien définies dans un même répertoire de préparation. L’archive envoyée à la destination (<code>.tar.zst</code> local, sauvegarde PBS ou archive Borg) conserve cette structure. La restauration utilise les trois : <strong>le manifeste</strong> est consulté avant toute modification pour détecter les différences et déterminer les exclusions ; <strong>rootfs</strong> fournit les fichiers de configuration, appliqués à chaud ou après redémarrage ; <strong>l’inventaire des applications</strong> guide l’installation des paquets et la réinstallation des composants après démarrage. Chaque partie peut être examinée ou extraite indépendamment."
},
"layout": {
"heading": "Mise en page des archives",
"intro": "Chaque archive suit la même disposition de l'arbre, quelle que soit la destination. Le sous-répertoire <code>metadata/</code> détient les charges utiles structurées; le sous-répertoire <code>rootfs/</code> détient la copie du système de fichiers.",
"treeCaption": "Le répertoire de mise en scène a été établi lors d'une sauvegarde. Chaque destination reçoit le même arbre (adapté à son format natif: tar pour local, PBS morceaux pour PBS, segments borg pour Borg).",
"tree": "backup-[timestamp]/\n├── manifest.json # structured host state\n├── metadata/\n│ ├── packages.manual.list # apt-mark showmanual\n│ ├── run_info.env # backup run identity + kernel version + pmxcfs method\n│ ├── paths_archived.txt # exact list of paths that reached rootfs/\n│ └── missing_paths.txt # paths from the profile absent on source\n└── rootfs/\n ├── etc/ # /etc/pve, /etc/network, /etc/systemd/network, /etc/ssh, …\n ├── root/ # /root (with volatile subdirs excluded)\n ├── usr/local/ # /usr/local/bin, /usr/local/share/proxmenux, …\n └── var/ # /var/lib/pve-cluster (config.db via sqlite3 .backup), /var/spool/cron/…"
},
"rootfs": {
"heading": "La partie rootfs",
"intro": "L’arborescence <code>rootfs/</code> est une <strong>simple copie du système de fichiers</strong>, créée par <code>rsync</code> depuis l’hôte source. Elle contient un <strong>profil par défaut</strong> sélectionnant les chemins nécessaires à une restauration Proxmox, ainsi que les <strong>chemins personnalisés</strong> ajoutés à la tâche ou à la session interactive. La sélection est volontairement limitée aux chemins qui <em>contiennent de la configuration</em> ou <em>conservent un état que Proxmox ne peut pas recréer seul</em>.",
"defaultProfileTitle": "Le profil par défaut",
"defaultProfileBody": "Le profil par défaut est défini par <code>hb_default_profile_paths</code> dans <code>lib_host_backup_common.sh</code>. Il couvre huit catégories fixes, plus l’état ZFS si nécessaire, qui décrivent ensemble un hôte Proxmox fonctionnel :",
"categoriesTitle": "Catégories de chemins",
"categoryRows": [
{
"category": "Noyau PVE",
"paths": "/etc/pve, /var/lib/pve-cluster, /etc/vzdump.conf",
"why": "Contenus du système de fichiers cluster et vzdump par défaut. La base de données pmxcfs (<code>config.db</code>) est capturée comme un instantané cohérent via <code>sqlite3 .backup</code> sans arrêter le cluster, et les sidecars <code>.db-wal</code> / <code>.db-shm</code> sont exclus du rsync. Lorsque <code>sqlite3</code> n'est pas disponible, un fichier <code>config.db.raw-fallback</code> est créé puis utilisé automatiquement comme base lors de la restauration."
},
{
"category": "Identité de l'hôte & réseau",
"paths": "/etc/hostname, /etc/hosts, /etc/timezone, /etc/resolv.conf, /etc/network, /etc/systemd/network",
"why": "Les éléments nécessaires pour retrouver le réseau avec la même identité. Les fichiers <code>.link</code> dans <code>/etc/systemd/network</code> associent le nom des interfaces à leur adresse MAC, afin de conserver les noms lors des réinstallations et des changements matériels."
},
{
"category": "Accès et authentification",
"paths": "/etc/ssh, /etc/sudoers, /etc/sudoers.d, /etc/pam.d, /etc/security",
"why": "Clés SSH, règles sudo et configuration PAM. Les perdre peut empêcher l’utilisateur d’accéder à l’hôte restauré."
},
{
"category": "Noyau et démarrage",
"paths": "/etc/default/grub, /etc/kernel, /etc/modules, /etc/modules-load.d, /etc/modprobe.d, /etc/sysctl.conf, /etc/sysctl.d, /etc/udev/rules.d, /etc/fstab, /etc/iscsi, /etc/multipath",
"why": "IOMMU jetons, listes noires de module, ID de périphérique VFIO, table de montage, configuration de la pile de stockage."
},
{
"category": "Shell et paramètres régionaux",
"paths": "/etc/environment, /etc/bash.bashrc, /etc/inputrc, /etc/profile, /etc/profile.d, /etc/locale.gen, /etc/locale.conf",
"why": "Configuration shell à l'échelle du système, variables d'environnement, configuration de génération locale."
},
{
"category": "Gestion des paquets et cron",
"paths": "/etc/apt, /etc/cron.d, /etc/cron.{daily,hourly,weekly,monthly}, /etc/cron.allow, /etc/cron.deny, /var/spool/cron/crontabs",
"why": "Sources APT pour une résolution de paquets cohérente, tâches programmées définies par l'utilisateur."
},
{
"category": "État et outils ProxMenux",
"paths": "/etc/proxmenux, /etc/systemd/system, /etc/log2ram.conf, /etc/logrotate.conf, /etc/logrotate.d, /etc/lm-sensors, /etc/sensors3.conf, /etc/fail2ban, /etc/snmp, /etc/postfix, /etc/wireguard, /etc/openvpn, /etc/grafana, /etc/influxdb, /etc/prometheus, /etc/telegraf, /etc/zabbix",
"why": "Outillage facultatif mais courant Proxmox. Les chemins manquants sont notés dans <code>metadata/missing_paths.txt</code> sans arrêter la sauvegarde."
},
{
"category": "Exécutables ProxMenux et compte root",
"paths": "/usr/local/bin, /usr/local/sbin, /usr/local/share/proxmenux, /var/lib/proxmenux, /root (sous-dirs volatils exclus)",
"why": "Les binaires installés par ProxMenux et la configuration par utilisateur sous <code>/root</code>. Les chemins volatils (<code>.bash_history</code>, <code>.cache/</code>, <code>tmp/</code>, <code>.local/share/Trash/</code>) sont exclus de la copie. <code>/var/lib/proxmenux</code> détient les tâches de sauvegarde programmées et l'état de l'hôte conservé par ProxMenux; la mise en scène de restauration, les copies de retour et les marqueurs post-restauration sont exclus, parce qu'ils appartiennent à l'hôte qui exécute une restauration."
},
{
"category": "État ZFS (conditionnel)",
"paths": "/etc/zfs",
"why": "Seulement inclus lorsque l'hôte source exécute ZFS. Contient <code>zpool.cache</code> et <code>hostid</code>."
}
],
"customTitle": "Extension du profil avec des chemins personnalisés",
"customBody": "Au-delà du profil par défaut, ProxMenux offre deux façons d'inclure des chemins supplémentaires dans une sauvegarde. Ils composent sans conflit et s'appliquent à la fois aux sauvegardes interactives et aux emplois programmés.",
"customExtrasTitle": "1. Extras persistants (fichier par hôte)",
"customExtrasBody": "Un fichier texte à <code>/usr/local/share/proxmenux/backup-extra-paths.txt</code> contient une liste de chemins absolus que l'utilisateur a marqués comme « toujours inclure » sur cet hôte. Lorsqu'une sauvegarde fonctionne en mode <strong>Default</strong>, ProxMenux ajoute ces chemins au profil par défaut automatiquement sans demander. Le fichier est édité à partir de l'interface — pas d'édition manuelle nécessaire — et persiste à travers les reboots et les mises à jour. Un chemin absolu par ligne ; les commentaires <code>#</code> sont autorisés.",
"customModeTitle": "2. Mode personnalisé (par exécution)",
"customModeBody": "Lancer une sauvegarde en mode <strong>Custom</strong> remplace l'application automatique du profil par défaut par une liste de contrôle montrant chaque chemin : les entrées par défaut du profil et les extras persistants (préfixés avec <code>[+]</code> et pré-cochés). L'utilisateur coche ou désactive les entrées pour cette exécution spécifique, et peut également appuyer sur <em>Ajouter un chemin personnalisé</em> pour entrer un nouveau chemin — qui est ensuite maintenu dans le fichier extras pour les futures sauvegardes.",
"customMissingTitle": "Voies absentes de la source",
"customMissingBody": "Tout chemin du profil (par défaut ou ajouté) qui n'existe pas sur l'hôte source est enregistré dans <code>metadata/missing_paths.txt</code> à l'intérieur de l'archive. La sauvegarde n’échoue ni ne s'arrête — l'utilisateur voit un résumé des chemins archivés et des chemins manquants à la fin. En pratique, cela se produit pour les chemins optionnels d'outillage comme <code>/etc/wireguard</code> ou <code>/etc/prometheus</code> lorsque ces outils ne sont pas installés."
},
"manifest": {
"heading": "La partie manifeste",
"intro": "<code>manifest.json</code> est un document structuré JSON qui décrit l'hôte source au moment de la sauvegarde. Il est produit par <strong>six modules de collecte indépendants</strong> orchestrés par <code>build_manifest.sh</code>. Chaque collecteur est en lecture seule, produit un fragment JSON bien défini, et revient à une valeur par défaut vide s'il échoue – le manifeste est toujours utilisable si une section est incomplète.",
"orchestratorCaption": "Les six modules de collecte composent le manifeste. Chaque collecteur fonctionne dans son propre sous-processus; une défaillance d'un seul tombe à un défaut de sécurité documenté et avertit mais n'interrompt pas la sauvegarde.",
"collectorRows": [
{
"collector": "collect_source_host.sh",
"produces": "source_host",
"content": "Nom d'hôte, version PVE (<code>pveversion</code>), version PBS si l'hôte exécute le rôle de serveur de sauvegarde, noyau (<code>uname -r</code>), mode de démarrage (efi/bios), type de système de fichiers racine, modèle CPU + architecture, mémoire en KB."
},
{
"collector": "collect_hardware.sh",
"produces": "hardware_inventory",
"content": "GPU avec fabricant et correspondance avec l’installateur ProxMenux ; TPU Coral USB et M.2 détectés par <code>lsusb</code>/<code>lspci</code> ; interfaces réseau avec MAC, emplacement PCI et appartenance à un pont ; périphériques sans fil. Les entrées GPU comprennent l’heuristique <code>passthrough_eligible</code>."
},
{
"collector": "collect_storage.sh",
"produces": "storage_inventory",
"content": "ZFS pools (avec pool type + disques membres résolus à <code>/dev/disk/by-id/*</code>, <code>/dev/disk/by-partuuid/*</code> ou crus <code>/dev/sdX</code> chemins en fonction de la façon dont chaque pool a été créé à l'origine), LVM Groupes de volume + mince pools, disques physiques avec SMART capacité, PVE <code>storage.cfg</code> entrées, montages externes."
},
{
"collector": "collect_kernel.sh",
"produces": "kernel_params",
"content": "Paramètres ajoutés par l’opérateur dans <code>/proc/cmdline</code>, sans les éléments standard comme <code>BOOT_IMAGE=</code>, <code>root=</code>, <code>ro/rw</code>, <code>quiet</code> et <code>splash</code> ; modules chargés au démarrage depuis <code>/etc/modules</code> ; chemins des fichiers <code>/etc/modprobe.d/*.conf</code> contenant des directives effectives (<code>options</code>, <code>blacklist</code>, <code>install</code>, <code>alias</code>, <code>softdep</code>)."
},
{
"collector": "collect_proxmenux_state.sh",
"produces": "proxmenux_installed_components",
"content": "Lire <code>/usr/local/share/proxmenux/managed_installs.json</code> (enregistrement de tout ce que ProxMenux a installé) et <code>installed_tools.json</code>. Chaque entrée conserve le chemin d'installation (<code>menu_script</code>) afin que la restauration puisse déclencher le même flux d'installation."
},
{
"collector": "collect_guests.sh",
"produces": "vms_lxcs_at_backup",
"content": "Énumère les VM (<code>qm list</code>) et les LXC (<code>pct list</code>) présents au moment de la sauvegarde — VMID, nom, état actuel. Seul l'inventaire : les données des invités sont sous la responsabilité de <code>vzdump</code> / PBS."
}
],
"schemaTitle": "Validation du schéma",
"schemaBody": "Le manifeste valide contre <code>scripts/backup_restore/schema/manifest.schema.json</code>. L'exécution du <code>build_manifest.sh --validate</code> déclenche une validation de schéma côté Python JSON (exige <code>python3</code> + <code>jsonschema</code>). Si le module n'est pas présent, la vérification est ignorée silencieusement — la validation est principalement une aide au développeur, et non une dépendance à l'exécution."
},
"applications": {
"heading": "L'inventaire des applications",
"intro": "Deux inventaires recensent les logiciels ajoutés aux paquets de base Proxmox VE : la liste des paquets dans <code>metadata/</code> et le registre des composants dans rootfs, détaillés ci-dessous. La restauration les utilise pour réinstaller les logiciels de l’utilisateur avec APT ou les installateurs ProxMenux selon leur mode d’installation initial.",
"packagesTitle": "packages.manual.list",
"packagesBody": "Une liste alphabétique en texte brut produite par <code>apt-mark showmanual</code>, avec les paquets APT <em>explicitement installés</em> sur l’hôte source. Les dépendances du système Proxmox VE de base sont exclues ; APT les réinstalle automatiquement sur la destination. Lors de la restauration, <code>_rs_run_complete_extras</code> lit la liste et applique un <em>filtre contre les suppressions en cascade</em> en trois passes : <code>dpkg -s</code> repère les paquets déjà installés, la détection des autres versions majeures vise les bibliothèques, et <code>apt-get install --simulate</code> vérifie le risque de suppression en cascade. Les paquets retenus sont installés avec <code>apt-get install -y</code>.",
"componentsTitle": "components_status.json (dans rootfs)",
"componentsBody": "Un registre JSON sous <code>/usr/local/share/proxmenux/</code> qui enregistre chaque composant ProxMenux a installé avec son état exact : version, drapeaux spécifiques ProxMenux (pour NVIDIA : <code>patched</code> booléen ; pour Coral : DKMS version). Ce fichier vit à l'intérieur des rootfs — pas dans <code>metadata/</code> — parce que c'est <em>lu après</em> la copie de rootfs vers la cible. Le répartiteur post-démarrage (<code>apply_cluster_postboot.sh</code>) itère ses entrées et exécute le crochet <code>--auto-reinstall</code> de chaque composant, qui lit l'état enregistré et reproduit l'installation contre le noyau courant de la cible.",
"componentInstallersTitle": "Installateurs de composants",
"componentInstallersBody": "Quatre installateurs ProxMenux exposent actuellement un point d'entrée <code>--auto-reinstall</code> :",
"installerRows": [
{
"component": "nvidia_driver",
"installer": "gpu_tpu/nvidia_installer.sh",
"action": "Lire <code>version</code> + <code>patched</code>. Télécharge exactement le même fichier d'exécution NVIDIA, construit des modules DKMS contre le noyau de la cible, réapplique le patch ProxMenux si la source l'avait."
},
{
"component": "coral_driver",
"installer": "gpu_tpu/install_coral.sh",
"action": "Lire la version du pilote Coral. Compile le module DKMS contre le noyau de la cible."
},
{
"component": "amdgpu_top",
"installer": "gpu_tpu/amd_gpu_tools.sh",
"action": "Lis la version enregistrée. Re-télécharge le <code>.deb</code> exact de la version GitHub."
},
{
"component": "intel_gpu_tools",
"installer": "gpu_tpu/intel_gpu_tools.sh",
"action": "APT-installe le paquet. Idépotent si déjà présent à partir de <code>packages.manual.list</code>."
}
]
},
"restoreFlow": {
"heading": "Comment la restauration consomme les trois charges utiles",
"intro": "La restauration est un pipeline en six étapes. Chaque étape lit un sous-ensemble spécifique de l'archive et met à jour l'hôte cible. Aucune étape n'exige que l'hôte source soit accessible — l'archive est entièrement autonome.",
"stagesCaption": "L’étape 1 consulte le manifeste pour déterminer les modifications possibles. L’étape 2 copie les chemins rootfs applicables à chaud. L’étape 3 prépare les chemins à risque pour le prochain démarrage. L’étape 3b importe les pools ZFS de données ne contenant pas la racine et dont tous les disques sont présents. L’étape 4 installe les paquets. L’étape 5 réinstalle les composants après redémarrage pour le noyau de la destination.",
"stageRows": [
{
"stage": "1",
"name": "Vérification de compatibilité",
"reads": "manifest.json",
"action": "Exécute <code>hb_compat_check</code>. Comparer le matériel source par rapport au matériel cible (NIC, ID de stockage), la version PVE et la version principale du noyau. Ensembles <code>HB_COMPAT_KERNEL_DIRECTION</code> (<code>same</code>, <code>bk_newer</code> ou <code>bk_older</code>) et peuple <code>RS_SKIP_PATHS</code> avec des exclusions à la dérive matérielle et aux différences de noyau."
},
{
"stage": "2",
"name": "Appliquer à chaud",
"reads": "rootfs/ (chemins sûrs seulement)",
"action": "<code>_rs_apply … hot</code> copie les entrées de <code>hb_classify_path</code>=<code>hot</code> directement à la cible en direct. Tout ce qui est sous <code>/etc/pve</code>, <code>/etc/network</code> ou des chemins classés comme <em>reboot</em>/<em>dangerous</em> est reporté."
},
{
"stage": "3",
"name": "En attente de préparation",
"reads": "rootfs/ (redémarrage + chemins dangereux)",
"action": "<code>_rs_prepare_pending_restore</code> prépare les chemins à risque dans <code>/var/lib/proxmenux/pending-restore/</code>, écrit <code>plan.env</code>, <code>apply-on-boot.list</code> et <code>rs-skip-paths.txt</code>, puis active <code>proxmenux-restore-onboot.service</code> pour le prochain démarrage."
},
{
"stage": "3b",
"name": "Importation des pools de données",
"reads": "manifest.storage_inventory + état ZFS de la destination",
"action": "<code>_rs_import_data_pools</code> tente d’importer chaque pool ZFS ne contenant pas la racine et dont tous les disques sont présents sur la destination. Avec un hostid étranger, l’importation est retentée avec <code>zpool import -f</code>. Si un disque manque, le pool est ignoré avec un avertissement. Le résultat par pool est enregistré dans <code>/var/log/proxmenux/restore-datapools-&lt;timestamp&gt;.log</code>."
},
{
"stage": "4",
"name": "Installation du paquet",
"reads": "metadata/packages.manual.list",
"action": "<code>_rs_run_complete_extras</code> exécute le filtre sans risque de cascade et appelle <code>apt-get install -y</code> avec la liste des paquets survivants. La sortie complète va à <code>/var/log/proxmenux/restore-apt-*.log</code>."
},
{
"stage": "5",
"name": "Après le démarrage",
"reads": "rootfs (déjà appliqué) + components_status.json",
"action": "Après le redémarrage, <code>apply_pending_restore.sh</code> rejoue les chemins différés et <code>apply_cluster_postboot.sh</code> exécute <code>update-initramfs</code>, <code>update-grub</code> (ou <code>proxmox-boot-tool refresh</code>) et itère sur <code>components_status.json</code> en tirant le crochet <code>--auto-reinstall</code> de chaque composant."
}
]
},
"whyItWorks": {
"heading": "Pourquoi séparer la sauvegarde en trois parties",
"body": "La séparation suit le <strong>cycle de vie</strong> des données. Le système de fichiers est transféré avec <code>rsync</code> : rapidement, de façon transparente et atomique par fichier. L’état de configuration à interpréter avant toute modification est du <strong>JSON structuré</strong>, lisible indépendamment, versionnable par schéma et comparable automatiquement à l’état de la destination. Les logiciels à réinstaller sont décrits dans un <strong>inventaire</strong> de noms et versions ; le gestionnaire de paquets et les installateurs ProxMenux choisissent les binaires adaptés. Chaque partie répond à son besoin. Leur combinaison vise une restauration cohérente tout en tolérant les échecs : un manifeste corrompu laisse rootfs récupérable, un paquet manquant n’empêche pas l’installation des composants et l’échec d’un installateur sur une entrée n’arrête pas la suivante."
}
}
@@ -0,0 +1,93 @@
{
"meta": {
"title": "ProxMenux Sauvegarde et restauration — Présentation | Sauvegarde et restauration complètes de l'hôte pour Proxmox VE",
"description": "La fonction de sauvegarde et de restauration de ProxMenux capture l'état complet d'un hôte Proxmox (système de fichiers, manifeste de configuration structuré et paquets/composants installés) et le reproduisent sur le même hôte ou sur un hôte différent. La sauvegarde et la restauration sont autonomes : aucune dépendance externe et les restaurations inter-noyaux sont prises en charge via un filtre de sous-ensemble sécurisé sensible à la direction et une hydratation indépendante du noyau.",
"ogTitle": "ProxMenux Sauvegarde et restauration – Présentation",
"ogDescription": "Sauvegarde et restauration complètes de l'hôte pour Proxmox VE avec manifeste structuré, liste de packages et réinstallateurs de composants.",
"twitterTitle": "ProxMenux Sauvegarde et restauration | ProxMenux",
"twitterDescription": "Sauvegarde et restauration complètes de l'hôte pour Proxmox VE avec manifeste structuré, liste de packages et réinstallateurs de composants."
},
"header": {
"title": "Sauvegarde et restauration",
"description": "Sauvegarde et restauration de l'hôte complet pour Proxmox VE. Capture le système de fichiers, la configuration et les composants installés dans une seule archive, et reproduit l'hôte sur la même installation Proxmox ou sur une autre installation Proxmox sans dépendances externes.",
"section": "Sauvegarde et restauration"
},
"intro": {
"title": "Qu'est-ce que c'est, en un seul paragraphe",
"body": "Une sauvegarde ProxMenux capture l’état complet d’un hôte Proxmox : <strong>le système de fichiers</strong>, avec les répertoires pertinents sous <code>/etc</code>, <code>/root</code> et <code>/var/lib/pve-cluster</code>, ainsi que les chemins personnalisés facultatifs ; <strong>un manifeste structuré</strong> en JSON décrivant le matériel détecté, les paramètres du noyau, la configuration réseau, l’état de ZFS, les utilisateurs et les entrées cron ; et <strong>un inventaire des applications</strong>, avec les paquets marqués comme installés manuellement par APT et les composants installés par ProxMenux, accompagnés de leurs versions exactes. Les trois destinations prises en charge — archive locale, Proxmox Backup Server (recommandé) et Borg — reçoivent le même contenu autonome. Chacune permet de reconstruire l’hôte cible sans que l’hôte source soit accessible pendant la restauration."
},
"video": {
"heading": "Présentation vidéo",
"intro": "Vous préférez regarder la sauvegarde et la restauration en action avant de la configurer ? Cette procédure pas à pas couvre une démonstration complète de bout en bout de la fonctionnalité dans ProxMenux.",
"title": "ProxMenux — Procédure pas à pas de sauvegarde et de restauration",
"caption": "Vidéo externe sur YouTube. Lecture en mode de confidentialité amélioré (pas de cookies jusqu'à ce que vous appuyiez sur play)."
},
"whatItIsNot": {
"heading": "Ce que ce n'est pas",
"intro": "Cette section couvre la sauvegarde et la restauration <strong>de l’hôte</strong> : l’installation Proxmox elle-même, et non les applications ou systèmes invités qui y fonctionnent.",
"items": [
"<strong>Ce n’est pas un outil de sauvegarde des VM/CT.</strong> Cette fonction ne capture ni les disques ni l’état de la RAM des invités ; c’est le rôle de <code>vzdump</code>. Les <strong>fichiers de configuration</strong> des invités (<code>/etc/pve/nodes/&lt;node&gt;/qemu-server/*.conf</code> et <code>lxc/*.conf</code>) sont <strong>bien</strong> sauvegardés. Après restauration, l’inventaire réapparaît et les disques peuvent être restaurés ou rattachés à partir d’une sauvegarde existante sur PBS ou en local.",
"<strong>Ce n’est pas une opération à l’échelle du cluster.</strong> Chaque nœud se sauvegarde lui-même. L’appartenance au cluster est enregistrée dans <code>/etc/pve</code> afin de pouvoir réintégrer un nœud restauré, mais la restauration de tout le cluster nécessite de coordonner les différents nœuds.",
"<strong>Ce n’est pas une image complète du disque.</strong> Les binaires du noyau, l’initramfs et la partition de démarrage ne sont pas sauvegardés. Lors de la restauration, ProxMenux utilise les fichiers de démarrage de l’hôte cible, régénérés automatiquement par <code>update-initramfs</code> et l’outil du chargeur d’amorçage, puis installe les pilotes adaptés au noyau en cours d’exécution sur la cible."
]
},
"threePillars": {
"heading": "Les trois piliers d'une sauvegarde",
"intro": "Une archive ProxMenux est structurée autour de trois charges utiles autonomes. La restauration utilise les trois ensemble pour reproduire l'hôte source sur une cible sur laquelle le même noyau n'est peut-être même pas installé.",
"diagramCaption": "Chaque sauvegarde expédie les trois mêmes charges utiles, quelle que soit la destination. La restauration consomme les trois : rootfs pour déposer les fichiers, le manifeste pour détecter les dérives et les différences entre les noyaux, et l'inventaire des applications pour réinstaller les packages et les composants sur le propre noyau de la cible.",
"pillar1Label": "Système de fichiers",
"pillar1Detail": "rootfs/\n(rsync de /etc,\n/etc/systemd/network,\n/root, plus un\ninstantané sqlite3\nde /var/lib/pve-cluster,\n+ chemins facultatifs)",
"pillar2Label": "Manifeste",
"pillar2Detail": "manifest.json\n(matériel, paramètres\ndu noyau, réseau,\nZFS, utilisateurs, cron,\npools ZFS, stockage)",
"pillar3Label": "Applications",
"pillar3Detail": "packages.manual.list\n+ components_status.json\n(paquets APT manuels + installateurs\nProxMenux avec versions)"
},
"restoreIsUniversal": {
"heading": "La restauration reproduit l'hôte source, pas l'archive",
"body": "La restauration d'une sauvegarde ProxMenux ne se contente pas d'extraire le système de fichiers. Le flux de restauration lit le manifeste pour détecter la dérive entre la source et la cible (différences matérielles, renommages des cartes réseau, version du noyau, identité du pool ZFS), restaure le système de fichiers, puis déclenche le programme d'installation de composant correct pour chaque service installé sur la source (pilote NVIDIA, Coral TPU, outils GPU AMD, outils Intel GPU). Chaque programme d'installation s'exécute sur le <strong>noyau actuel de la cible</strong>, de sorte que l'hôte restauré ne dépend pas de la présence du noyau de la source. Lorsque le noyau de la cible est plus récent que celui de la sauvegarde, une passe d'<strong>hydratation</strong> indépendante du noyau fusionne les propres réglages de l'utilisateur (jetons IOMMU, ID de périphérique VFIO, adaptations particulières, clés GRUB) dans la nouvelle configuration de démarrage de la cible sans copier textuellement les fichiers liés au noyau."
},
"twoInterfaces": {
"heading": "Deux interfaces, un backend",
"intro": "Chaque étape du workflow de sauvegarde et de restauration est disponible à partir de deux points d'entrée. Les deux appellent la même bibliothèque shell, produisent des archives identiques et lisent le même registre de tâches.",
"cliLabel": "ProxMenux Scripts (TUI)",
"cliDetail": "menu → Utilitaires →\nSauvegarde / Restauration de l'hôte\n\nFlux basé sur le dialogue,\nCompatible avec SSH, scriptable\npour une utilisation sans surveillance.",
"webLabel": "ProxMenux Monitor (Web UI)",
"webDetail": "Onglet Sauvegardes dans\nl’interface web de Monitor.\n\nRestauration en un clic, suivi\ndes journaux en direct, intégré\naux notifications et à la vue\ndes différences de retour arrière."
},
"whereNext": {
"heading": "Où aller à partir d'ici",
"intro": "Chaque sous-section ci-dessous couvre en profondeur un aspect du flux de travail. Commencez par <em>Comment ça marche</em> si l'objectif est de comprendre ce que contient l'archive et pourquoi. Accédez à <em>Destinations</em> pour configurer la cible de la copie. Lisez <em>Restauration</em> et <em>Restauration inter-noyaux</em> pour le côté récupération.",
"items": [
{
"label": "Comment ça marche",
"href": "/docs/backup-restore/how-it-works",
"tail": "— les trois charges utiles (rootfs, manifeste, applications) en détail, avec les collecteurs qui les produisent et le format de chaque fichier."
},
{
"label": "Destinations",
"href": "/docs/backup-restore/destinations",
"tail": "— comparaison de local, Proxmox Backup Server (recommandé) et Borg, et comment configurer chacun d'eux."
},
{
"label": "Création de sauvegardes",
"href": "/docs/backup-restore/creating-backups",
"tail": "— sauvegardes ponctuelles, profil de chemin par défaut, ajout de chemins personnalisés, chiffrement pour PBS."
},
{
"label": "Tâches planifiées",
"href": "/docs/backup-restore/scheduled-jobs",
"tail": "— nouvelles tâches ou attachement à une tâche vzdump PVE existante, formats de planification, modal de détail de la tâche."
},
{
"label": "Restauration",
"href": "/docs/backup-restore/restoring",
"tail": "— les trois actions sur une archive (afficher, télécharger, restaurer), la restauration complète ou personnalisée, le répartiteur post-démarrage et pourquoi les dix dernières minutes sont importantes."
},
{
"label": "Restauration inter-noyaux",
"href": "/docs/backup-restore/cross-kernel",
"tail": " — comportement tenant compte du sens du changement de version lorsque le noyau cible diffère de celui de la sauvegarde, filtre de sous-ensemble sûr et quatre phases d’hydratation."
}
]
}
}
File diff suppressed because one or more lines are too long
@@ -0,0 +1,152 @@
{
"meta": {
"title": "Tâches planifiées — temporisateurs, mode attach et rétention | ProxMenux",
"description": "Tâches de sauvegarde d’hôte ProxMenux programmées. Deux modes de création (minuteur systemd propre ou association à une tâche vzdump PVE existante), règles de rétention appliquées par tâche avec proxmox-backup-client, Borg ou le nettoyage local, fichiers sous /var/lib/proxmenux/backup-jobs et script d’exécution produisant les mêmes archives que le processus interactif.",
"ogTitle": "Sauvegarde ProxMenux — tâches programmées",
"ogDescription": "Sauvegardes d'hôte programmées non surveillées avec mode de fixation, conservation, et les mêmes trois destinations que le flux interactif.",
"twitterTitle": "Tâches planifiées | ProxMenux",
"twitterDescription": "Tâches programmées de sauvegarde d’hôte sans intervention, avec mode d’association et rétention."
},
"header": {
"title": "Tâches programmées",
"description": "Tâches de sauvegarde d’hôte sans intervention. Deux modèles de création : une nouvelle tâche indépendante avec son propre calendrier, ou une tâche associée à une tâche vzdump PVE existante, dont elle reprend le calendrier et la rétention. Les deux produisent les mêmes archives que le processus interactif.",
"section": "Sauvegarde et restauration"
},
"intro": {
"title": "Les deux modèles de tâches programmées",
"body": "Une tâche programmée peut être créé selon l'un des deux modèles suivants :",
"modelsList": [
"<strong>Nouveau travail indépendant</strong> — ProxMenux définit lui-même l'horaire de travail avec sa propre minuterie systemd, indépendamment de toute autre tâche sur l'hôte. Compatible avec les trois destinations : Local, PBS et Borg.",
"<strong>Associer à une tâche vzdump PVE existante</strong> — la tâche n’a pas de calendrier propre ; elle s’exécute automatiquement quand la tâche vzdump parente sauvegarde les VM et LXC de cet hôte. Elle reprend son calendrier et sa rétention. Compatible avec les destinations locale et PBS (Borg n’est pas pris en charge, car PVE n’a pas de planificateur natif pour Borg)."
]
},
"attachBadge": {
"title": "Mode d’association — recommandé si une tâche vzdump PVE existe déjà",
"body": "Lorsqu’une tâche de sauvegarde vzdump PVE est déjà configurée pour les VM et LXC du nœud, l’association de la sauvegarde hôte la fait exécuter après celle des invités, dans le <strong>même cycle de sauvegarde</strong>. À la restauration, les configurations des invités viennent de la sauvegarde hôte (sous <code>/etc/pve</code>) et leurs disques des sauvegardes vzdump du même cycle. Cela facilite la récupération coordonnée du nœud, sans constituer un instantané atomique : des modifications pendant le cycle peuvent créer des écarts entre la configuration hôte et l’état des disques des invités."
},
"frequencyBadge": {
"title": "Fréquence recommandée",
"body": "Pour maximiser la compatibilité entre une sauvegarde hôte et sa future restauration, sauvegardez fréquemment l’hôte. Plus la copie est proche de son état actuel, moins la restauration doit réconcilier d’écarts de configuration, de paquets et de composants."
},
"modes": {
"heading": "Les deux modes",
"rows": [
{
"mode": "Nouveau travail planifié",
"backends": "Local, PBS, Borg",
"schedule": "Propre expression <code>OnCalendar</code> (syntaxe du calendrier systemd — par exemple <code>daily</code>, <code>Mon..Fri 03:00</code>).",
"retention": "Demandée séparément: <code>keep-last</code>, <code>keep-hourly</code>, <code>keep-daily</code>, <code>keep-weekly</code>, <code>keep-monthly</code>, <code>keep-yearly</code>. Appliquée par le script d’exécution après chaque sauvegarde réussie."
},
{
"mode": "Associer à une tâche vzdump PVE",
"backends": "Local, PBS (Borg n'a pas de planificateur côté PVE)",
"schedule": "Hérité de la tâche PVE parente. Aucun minuteur systemd n’est installé côté ProxMenux.",
"retention": "Héritée de la configuration <code>prune-backups</code> de la tâche parente (associée une à une aux variables <code>KEEP_*</code> du script d’exécution via <code>hb_pve_prune_to_keep_env</code>)."
}
]
},
"attachDetail": {
"heading": "Comment fonctionne le mode de fixation",
"intro": "PVE écrit les tâches <code>vzdump</code> dans <code>/etc/pve/jobs.cfg</code>, avec une section par tâche indiquant le stockage des sauvegardes VM et LXC. Le mode d’association exige un backend compris par ProxMenux (local ou PBS). La sauvegarde hôte s’exécute via le hook job-end après la fin de la tâche de sauvegarde des invités.",
"steps": [
{
"step": "1",
"detail": "Lors de la création de tâches, ProxMenux liste les tâches parent PVE compatibles via <code>hb_pve_list_vzdump_jobs_for_backend</code>. L'utilisateur en choisit un."
},
{
"step": "2",
"detail": "Le <code>.env</code> de l'emploi est écrit avec <code>PVE_PARENT_JOB</code>, <code>PVE_STORAGE</code> et les valeurs de <code>KEEP_*</code> héritées; aucun minuteur systemd n'est créé."
},
{
"step": "3",
"detail": "<code>hb_install_vzdump_hook</code> enregistre un hook dans <code>/etc/vzdump.conf</code>. À la phase job-end de toute tâche vzdump, il compare le <code>$STOREID</code> reçu au <code>PVE_STORAGE</code> de chaque tâche associée activée et appelle le script d’exécution en cas de correspondance. L’association se fait par stockage, et non par identifiant de la tâche parente choisie."
},
{
"step": "4",
"detail": "L’archive est enregistrée dans le même stockage que les sauvegardes vzdump : <code>path/dump/</code> pour la destination locale ou le dépôt PBS configuré dans l’entrée de stockage PVE."
}
],
"outroBody": "Le mode d’association n’a pas de minuteur propre. Désactiver ou supprimer la tâche PVE parente choisie arrête son déclenchement, mais une autre tâche vzdump utilisant le même stockage peut encore lancer la sauvegarde hôte. Désactivez ou supprimez la tâche ProxMenux elle-même pour l’empêcher. Lors d’une désactivation, son entrée reste sur disque pour permettre une réactivation ou une nouvelle association."
},
"storageLayout": {
"heading": "Fichiers qui constituent un travail",
"intro": "Chaque travail programmé est entièrement décrit par trois ou quatre fichiers sur disque. Les lire donne la configuration complète du travail sans compter sur l'interface.",
"rows": [
{
"path": "/var/lib/proxmenux/backup-jobs/JOB_ID.env",
"content": "Backend, identifiant de sauvegarde ou destination, calendrier (nouvelle tâche) ou tâche PVE parente (association), indicateur d’activation, valeurs de rétention <code>KEEP_*</code> et références aux identifiants."
},
{
"path": "/var/lib/proxmenux/backup-jobs/JOB_ID.paths",
"content": "Un chemin absolu par ligne : la sélection figée à partir du profil lors de la création de la tâche. Modifier le fichier utilise la nouvelle sélection à la prochaine exécution du minuteur."
},
{
"path": "/etc/systemd/system/proxmenux-backup-JOB_ID.timer + .service",
"content": "Nouveau mode seulement. Le service invoque <code>run_scheduled_backup.sh JOB_ID</code>. Le minuteur le planifie avec <code>Persistent=true</code> (exécutions manquées rattrapées au prochain démarrage) et un petit <code>RandomizedDelaySec=120</code> pour répartir la charge lorsque plusieurs tâches partagent la même expression OnCalendar."
},
{
"path": "/etc/vzdump.conf script-hook",
"content": "Mode d’association uniquement. Installé une fois par <code>hb_install_vzdump_hook</code> ; compare le <code>PVE_STORAGE</code> de chaque tâche associée au <code>$STOREID</code> transmis par PVE au hook."
}
]
},
"runner": {
"heading": "Ce que fait une tâche à son déclenchement",
"intro": "Chaque travail — qu’il s’agisse d’une nouvelle tâche indépendante ou d’une tâche associée — comporte la même séquence en trois étapes:",
"steps": [
"<strong>Prépare la sauvegarde.</strong> Lit la configuration de travail (destination, profil, chemins) et assemble l'arborescence des archives exactement comme le flux interactif. Le résultat est la même archive qu'une sauvegarde manuelle avec ces paramètres produirait.",
"<strong>Écrire à la destination.</strong> Charge ou écrit l'archive vers la destination configurée — un fichier local <code>.tar.zst</code>, une sauvegarde PBS ou une archive Borg — en utilisant exactement les mêmes outils et identifiants qu’une sauvegarde manuelle vers la même destination.",
"<strong>Appliquer la rétention.</strong> Supprime les anciennes sauvegardes de la destination, en maintenant les nombres <code>keep-last</code> / <code>keep-daily</code> / <code>keep-weekly</code> configurés sur le travail. La purge est effectuée par la destination elle-même: PBS applique sa propre conservation, Borg exécute <code>borg prune</code>, et pour Local ProxMenux supprime les fichiers qui tombent en dehors de la fenêtre <code>keep-last</code>."
]
},
"management": {
"heading": "Gestion des tâches",
"intro": "Le menu planificateur (Scripts TUI) et l'onglet Sauvegardes Monitor exposent les mêmes actions sur n'importe quel travail.",
"rows": [
{
"action": "Exécuter maintenant",
"detail": "Appelle immédiatement le script d’exécution, sans attendre le minuteur ou le hook vzdump. Utile pour vérifier la configuration sans attendre le prochain déclenchement."
},
{
"action": "Activer / Désactiver",
"detail": "Nouveau mode : <code>systemctl enable/disable --now</code> la minuterie. Attache le mode : retourne le drapeau <code>ENABLED</code> dans le travail env — le script hook l'honore au prochain déclenchement PVE."
},
{
"action": "Modifier",
"detail": "Rouvre les champs de destination, calendrier, profil et rétention et réécrit les fichiers de la tâche. Conserve son identifiant."
},
{
"action": "Supprimer",
"detail": "Supprime le fichier env, la liste des chemins et le minuteur et service systemd (nouvelle tâche), et désactive l’association au hook (mode d’association). Les archives déjà présentes à destination restent intactes."
},
{
"action": "Voir le journal",
"detail": "Affiche en continu <code>/var/log/proxmenux/backup-jobs/JOB_ID-YYYYMMDD_HHMMSS.log</code> : un fichier journal par exécution. Le programme d'exécution émet également une ligne d'état compacte à journald sous le service systemd."
}
]
},
"notifications": {
"heading": "Notifications",
"body": "Chaque exécution programmée déclenche les mêmes événements <code>hb_notify_lifecycle</code> que le flux interactif (<code>start</code>, <code>complete</code>, <code>fail</code>). Si les canaux de notification sont configurés dans le moniteur, les tâches non surveillées présentent leurs résultats de la même manière que les sauvegardes manuelles, un utilisateur n'a pas besoin de vérifier le journal pour savoir si une tâche a réussi."
},
"whereNext": {
"heading": "Où aller ensuite?",
"items": [
{
"label": "Création de sauvegardes",
"href": "/docs/backup-restore/creating-backups",
"tail": "— le flux interactif qui partage le moteur avec le planificateur."
},
{
"label": "Destinations",
"href": "/docs/backup-restore/destinations",
"tail": "— configuration par moteur utilisée à la fois par le flux interactif et le planificateur."
},
{
"label": "Restauration",
"href": "/docs/backup-restore/restoring",
"tail": " — le processus qui utilise les sauvegardes produites par les tâches."
}
]
}
}
+175
View File
@@ -0,0 +1,175 @@
{
"meta": {
"title": "Créer des VM dans Proxmox VE — assistants Synology, Windows, Linux et NAS | ProxMenux",
"description": "Créez et configurez des VM sur Proxmox VE avec ProxMenux. Assistants pour NAS (Synology DSM, TrueNAS, OpenMediaVault, XigmaNAS, etc.), Windows, distributions Linux et installateur macOS externe. Réglages adaptés pour le matériel, le stockage et le réseau.",
"ogTitle": "Créer des VM sur Proxmox VE : assistants Synology, Windows, Linux et NAS",
"ogDescription": "Assistants ProxMenux pour créer des VM Synology DSM, TrueNAS, OMV, XigmaNAS, Windows et Linux sur Proxmox VE.",
"ogImageAlt": "Menu Créer VM de ProxMenux",
"twitterTitle": "Création de VMs sur Proxmox VE | ProxMenux",
"twitterDescription": "Assistants pour VM Synology, TrueNAS, OMV, XigmaNAS, Windows et Linux sur Proxmox VE."
},
"header": {
"title": "Créer VM",
"description": "ProxMenux regroupe la création de VM dans un répartiteur interactif. Choisissez la famille de systèmes d'exploitation et l'assistant correspondant gère la sélection ISO, CPU, RAM, BIOS, réseau, stockage et — en option — GPU passant.",
"section": "Machines virtuelles"
},
"intro": {
"title": "Ce menu sert à",
"body": "Le menu Créer VM oriente vers plusieurs assistants. Il demande la famille du système et charge la sélection d’ISO et le configurateur adaptés. Le mode par défaut utilise des réglages raisonnables ; le mode avancé présente les options disponibles avant la création."
},
"opening": {
"heading": "Ouverture du menu",
"body": "Dans le menu principal de ProxMenux, sélectionnez <strong>Créer VM</strong>. Vous verrez ceci :",
"imageAlt": "Créer un répartiteur VM avec les options 3 ProxMenux (NAS / Windows / Linux) suivi de la section Scripts communautaires (macOS / Autres)"
},
"families": {
"heading": "Trois familles OS",
"intro": "Les trois entrées ProxMenux en haut du menu partagent le même moteur sous-jacent et le même flux post-ISO — elles se dirigent vers différents sélecteurs ISO et appliquent des valeurs par défaut pour chaque famille. Choisissez celui qui correspond à l'invité que vous voulez installer.",
"routes": [
{
"key": "nas",
"title": "Système NAS",
"icon": "HardDrive",
"href": "/docs/create-vm/system-nas",
"accent": "border-emerald-300 bg-emerald-50",
"iconBg": "bg-emerald-100 text-emerald-700",
"description": "Huit systèmes NAS en VM dédiées. La plupart utilisent le parcours ISO automatique ; Synology DSM dispose d’un assistant spécialisé avec chargeur.",
"bullets": [
"Synology DSM (chargeurs Arc / RR / Alpine RedPill M-shell)",
"TrueNAS SCALE et CORE (ZFS)",
"OpenMediaVault (basé sur Debian)",
"XigmaNAS (FreeBSD ZFS)",
"Rockstor (openSUSE / Btrfs), ZimaOS, FygoOS"
]
},
{
"key": "windows",
"title": "Système Windows",
"icon": "MonitorCog",
"href": "/docs/create-vm/system-windows",
"accent": "border-blue-300 bg-blue-50",
"iconBg": "bg-blue-100 text-blue-700",
"description": "Éditions Windows 10, 11 et Server avec des réglages adaptés (q35 + OVMF + TPM 2.0) et l’ISO des pilotes VirtIO déjà montée.",
"bullets": [
"UUP Dump pour les ISO à jour",
"Ou ISO local à partir de /var/lib/vz/template/iso",
"TPM 2.0 ajouté automatiquement",
"ISO des pilotes VirtIO connectée à ide3",
"canal d'agent invité activé"
]
},
{
"key": "linux",
"title": "Système Linux",
"icon": "Laptop",
"href": "/docs/create-vm/system-linux",
"accent": "border-amber-300 bg-amber-50",
"iconBg": "bg-amber-100 text-amber-700",
"description": "Catalogue sélectionné d’ISO Linux officielles téléchargées automatiquement depuis leurs projets, plus un sélecteur d’ISO locales pour les autres images.",
"bullets": [
"Ubuntu (Bureau / Serveur, 20.04–25.10)",
"Debian (Bureau / Netinst, 11–13)",
"Fedora, Arch, Rocky, Mint, openSUSE",
"Alpine, Kali, Manjaro",
"Chemin ISO local pour les images personnalisées"
]
}
]
},
"community": {
"title": "Scripts communautaires (non documentés ici)",
"intro": "Les deux entrées sous le séparateur <em>Community Scripts</em> exécutent du code qui <strong>ne fait pas partie de ProxMenux</strong>. Elles sont donc volontairement exclues de cette documentation :",
"macosRich": "<strong>Système macOS</strong> : exécute l’installateur externe <osxLink>OSX-PROXMOX</osxLink>. Il clone le dépôt d’origine, prépare l’hôte et <strong>redémarre automatiquement à la fin</strong>. Consultez la documentation du projet.",
"othersRich": "<strong>Autres systèmes (basés sur Linux)</strong> : charge une sélection d’installateurs communautaires pour serveurs domestiques, routeurs, pare-feu, etc. Chaque script est maintenu hors de ProxMenux."
},
"afterPick": {
"heading": "Ce qui se passe après avoir choisi un OS",
"intro": "Une fois l'ISO sélectionné, le répartiteur prend le même chemin indépendamment de la famille d'OS:",
"items": [
"<strong>Par défaut ou avancé.</strong> Un dialogue permet d’accepter les réglages ProxMenux ou d’ouvrir le configurateur complet : modèle et cœurs du CPU, RAM, BIOS/UEFI, carte réseau et type de machine.",
"<strong>Plan de stockage.</strong> Vous combinez un ou plusieurs disques virtuels, disques importés et périphériques PCI passants (contrôleur entier / NVMe) dans le même VM.",
"<strong>Passthrough GPU facultatif.</strong> Si un GPU compatible est détecté, ProxMenux propose l’assistant GPU après la création de la VM. Un redémarrage peut être nécessaire.",
"<strong>Création de la VM.</strong> La VM est créée, étiquetée et reçoit une description HTML mise en forme pour consultation rapide dans Proxmox."
],
"tipTitle": "Préférez Advanced pour les VMs que vous avez l'intention de conserver",
"tipBody": "Les préréglages par défaut fonctionnent bien pour des tests rapides. Pour un VM que vous avez l'intention de conserver, le chemin avancé vous permet de choisir le bon BIOS (SeaBIOS vs OVMF/UEFI), le type de machine (<code>i440fx</code> vs <code>q35</code>) et le contrôleur de disque (VirtIO SCSI single vs SATA) à l'avant – ils sont douloureux à changer plus tard."
},
"scripts": {
"heading": "Scripts utilisés",
"intro": "Le menu charge plusieurs scripts de composants partagés sans page individuelle. Ils sont listés ici comme référence. Chaque sous-page renvoie au script principal de sa procédure.",
"headerScript": "Script",
"headerRole": "Rôle",
"rows": [
{
"path": "menus/create_vm_menu.sh",
"role": "Point d’entrée et orientation."
},
{
"path": "vm/select_nas_iso.sh",
"role": "Sélection des ISO et systèmes NAS (Synology, TrueNAS, OMV, Rockstor, XigmaNAS, ZimaOS, FygoOS)."
},
{
"path": "vm/select_windows_iso.sh",
"role": "Sélecteur d’ISO Windows. Utilise le générateur UUP Dump si nécessaire."
},
{
"path": "vm/select_linux_iso.sh",
"role": "Sélecteur ISO Linux pour le flux Linux (distributions principales)."
},
{
"path": "vm/synology.sh",
"role": "Procédure Synology DSM : récupère le chargeur et l’image DSM et prépare le profil de VM."
},
{
"path": "vm/zimaos.sh",
"role": "Flux ZimaOS : télécharge l'image et l'enfile dans la définition VM."
},
{
"path": "vm/vm_configurator.sh",
"role": "Assistant par défaut vs Assistant avancé : CPU model/cores, RAM, BIOS, NIC, type de machine."
},
{
"path": "vm/disk_selector.sh",
"role": "Plan de stockage: disque virtuel, importation de disque, ou Passthrough Controller/NVMe."
},
{
"path": "vm/vm_creator.sh",
"role": "Création finale de VM : applique la configuration, fixe le stockage, écrit la description HTML."
},
{
"path": "vm/guest_agent_config.sh",
"role": "Hook facultatif de configuration de l’agent invité QEMU, utilisé par plusieurs procédures."
}
]
},
"related": {
"heading": "Voir aussi",
"items": [
{
"href": "/docs/disk-manager",
"label": "Gestionnaire de disque",
"tail": "— fixer des disques physiques existants ou importer des images de disques dans des VM."
},
{
"href": "/docs/utils/UUp-Dump-ISO-Creator",
"label": "Créateur d’ISO UUP Dump",
"tail": "— générer des ISO d'installation Windows prêts à utiliser comme support de démarrage."
},
{
"href": "/docs/utils/import-vm",
"label": "Importer VM de OVA / OVF",
"tail": "— apporter des VM préconçus à partir de VMware / VirtualBox / ProxMenux exportations."
},
{
"href": "/docs/hardware/gpu-vm-passthrough",
"label": "Ajouter GPU à VM (Passthrough)",
"tail": "— passer un GPU dans un VM fraîchement créé."
},
{
"href": "/docs/help-info/vm-ct-commands",
"label": "Commandes de gestion VM et CT",
"tail": "— référence qm pour le côté CLI."
}
]
}
}
@@ -0,0 +1,453 @@
{
"title": "Script de création de VM Synology",
"stepLabel": "Étape",
"intro": {
"heading": "Présentation",
"intro": "ProxMenux fournit un script automatisé qui crée et configure une machine virtuelle (VM) pour installer Synology DSM (DiskStation Manager) sur Proxmox VE. Ce script simplifie le processus en téléchargeant et en ajoutant l'un des chargeurs disponibles au démarrage VM, vous donnant l'option entre quatre choix différents :",
"loaders": [
{
"name": "AuxXxilium Arc",
"url": "https://github.com/AuxXxilium/arc",
"extra": ""
},
{
"name": "RedPill RR",
"url": "https://github.com/RROrg/rr",
"extra": ""
},
{
"name": "Alpine RedPill M-shell (projet TinyCore)",
"url": "https://github.com/PeterSuh-Q3/tinycore-redpill",
"extra": ""
}
],
"customLoader": "Chargeur personnalisé – option pour utiliser un chargeur personnalisé si vous préférez modifier ou créer votre propre configuration",
"simplifiesIntro": "Le script simplifie le processus de création de VM en offrant les options suivantes:",
"simplifies": [
"Sélection de configuration par défaut ou avancée",
"Configuration de CPU, RAM, BIOS et type de machine",
"Choix entre disque virtuel et passthrough d’un disque physique"
]
},
"config": {
"heading": "Configuration par défaut et avancée",
"intro": "Le script offre deux modes de configuration:",
"defaultHeading": "Configuration par défaut",
"defaultIntro": "Si vous sélectionnez la configuration par défaut, le script appliquera automatiquement les valeurs suivantes :",
"headerParam": "Paramètre",
"headerValue": "Valeur par défaut",
"defaultRows": [
{
"param": "Type de machine",
"value": "q35"
},
{
"param": "Type de BIOS",
"value": "OVMF (UEFI)"
},
{
"param": "Type de processeur",
"value": "Host"
},
{
"param": "Nombre de cœurs",
"value": "2"
},
{
"param": "Taille de la RAM",
"value": "4096 MB"
},
{
"param": "Pont",
"value": "vmbr0"
},
{
"param": "Adresse MAC",
"value": "Produit automatiquement"
},
{
"param": "Démarrer VM à la fin",
"value": "Non"
}
],
"defaultOutro": "Si vous souhaitez personnaliser la configuration, sélectionnez l'option Paramètres avancés dans le menu.",
"advancedHeading": "Configuration avancée",
"advancedIntro": "Si vous sélectionnez la configuration avancée, le script vous permettra de personnaliser chaque paramètre:",
"headerOptions": "Possibilités",
"advancedRows": [
{
"param": "Type de machine",
"options": "q35 ou i440fx"
},
{
"param": "Type de BIOS",
"options": "OVMF (UEFI) ou SeaBIOS (Légacy)"
},
{
"param": "Type de processeur",
"options": "Host ou KVM64"
},
{
"param": "Nombre de cœurs",
"options": "Nombre de cœurs CPU"
},
{
"param": "Taille de la RAM",
"options": "Quantité de mémoire attribuée à la VM"
},
{
"param": "Pont",
"options": "Pont réseau pour la connexion"
},
{
"param": "Adresse MAC",
"options": "Adresse MAC personnalisée"
},
{
"param": "VLAN",
"options": "Étiquette VLAN (le cas échéant)"
},
{
"param": "MTU",
"options": "Taille maximale de l'unité de transmission"
}
]
},
"diskSelection": {
"heading": "Sélection du disque",
"intro": "Le plan de stockage permet d’ajouter des disques virtuels, des disques physiques et des contrôleurs PCI ou périphériques NVMe. Les options de disque sont expliquées ci-dessous.",
"virtualHeading": "Disque virtuel",
"virtualItems": [
"Le script liste les options de stockage disponibles dans Proxmox",
"L'utilisateur sélectionne le disque et la taille en GB",
"Les disques virtuels sont connectés en <strong>SATA</strong> (sata0, sata1, etc.). Les disques de données virtuels et physiques partagent les six emplacements SATA numérotés de 0 à 5 ; le chargeur utilise un emplacement IDE distinct."
],
"physicalHeading": "Passage de disque physique",
"physicalItems": [
"Le script détecte tous les disques physiques disponibles",
"L'utilisateur sélectionne le ou les disques physiques qu'il souhaite utiliser.",
"Les disques physiques sont connectés en <strong>SATA</strong>. Ils partagent les six emplacements SATA numérotés de 0 à 5 avec les disques de données virtuels ; il ne s’agit pas de six disques physiques supplémentaires."
]
},
"loaderInstall": {
"heading": "Installation du chargeur",
"intro1": "Le script télécharge et extrait automatiquement le chargeur du dépôt du développeur. Si le téléchargement échoue, le script affichera un message d'erreur.",
"intro2Rich": "<strong>AuxXxilium Arc</strong>, <strong>RedPill RR</strong> et <strong>Alpine RedPill M-shell</strong> sont téléchargés et extraits automatiquement.",
"customRich": "Pour <strong>Chargeur personnalisé</strong>, le script recherche des fichiers dans <code>/var/lib/vz/template/iso</code>. Si plusieurs fichiers sont trouvés, vous serez invité à sélectionner le fichier souhaité.",
"uploadIntro": "Vous pouvez télécharger des chargeurs personnalisés à partir des options de stockage local:",
"imageAlt": "Ajouter un chargeur personnalisé",
"imageCaption": "Ajouter un chargeur personnalisé"
},
"vmCreation": {
"heading": "Création de VM",
"intro": "Une fois le chargeur téléchargé, le script crée le VM en utilisant les commandes suivantes:",
"items": [
"<code>qm create</code> – Crée la machine virtuelle avec les paramètres configurés",
"<code>qm importdisk</code> importe l’image du chargeur dans le stockage Proxmox. Le script la connecte ensuite à la VM sur ide0 pour la compatibilité.",
"<code>qm set</code> – Assigne des valeurs de configuration telles que CPU, RAM, et de stockage",
"<code>qm set VMID --boot order=ide0</code> définit le chargeur comme périphérique de démarrage. Remplacez VMID par l’ID de la VM."
]
},
"stepGuide": {
"heading": "Guide de configuration du chargeur de démarrage étape par étape",
"intro": "Chaque chargeur possède ses menus et méthodes de configuration. Les six étapes ci-dessous expliquent le processus commun ; suivez les indications du chargeur actuel en cas de différence. Les captures M-shell montrent une ancienne interface TinyCore, tandis que le script actuel télécharge Alpine RedPill M-shell.",
"selectorHeading": "Sélectionnez votre type de chargeur :",
"loaderButtons": {
"arc": "Arc Loader",
"rr": "RR Loader",
"tinycore": "TinyCore Loader"
}
},
"steps": [
{
"id": "step1",
"title": "Démarrer la VM et ouvrir le menu principal",
"intro": "Une fois que le VM est créé, démarrez-le. La première fois que vous démarrez le VM, vous accéderez au menu principal du chargeur pour sélectionner et configurer le modèle DSM que vous souhaitez construire. Une fois le chargeur créé, cette étape sera ignorée à moins de forcer manuellement une reconfiguration à partir du moniteur de démarrage. Tous les chargeurs ont également la possibilité de configurer le chargeur via une interface web.",
"loaders": {
"arc": [
{
"htmlBefore": "<strong>Interface web</strong>, Pour accéder à l'interface Web, il suffit d'ouvrir un navigateur Web et d'entrer l'adresse IP affichée dans la sortie console de VM. Par exemple, dans notre cas: http://192.169.0.32.",
"src": "https://macrimi.github.io/ProxMenux/vm/synology/arc/arc_1_0_1.png",
"alt": "Interface web d’Arc Loader",
"caption": "Interface web d’Arc Loader"
},
{
"htmlBefore": "<strong>Interface terminal</strong> : ouvrez-la directement depuis la console de la VM.",
"src": "https://macrimi.github.io/ProxMenux/vm/synology/arc/arc_1_1_1.png",
"alt": "Interface terminal d’Arc Loader",
"caption": "Interface terminal d’Arc Loader"
}
],
"rr": [
{
"htmlBefore": "<strong>Interface web</strong>, Pour accéder à l'interface web, il suffit d'ouvrir un navigateur Web et d'entrer l'adresse IP affichée dans la sortie console du VM, suivie du port <strong>7681</strong>. Par exemple, dans notre cas : <code>http://192.169.0.33:7681</code>.",
"src": "https://macrimi.github.io/ProxMenux/vm/synology/rr/rr_2_0_2.png",
"alt": "Exemple de commande RR",
"caption": "Interface Web du chargeur RR"
},
{
"htmlBefore": "<strong>Interface terminal</strong> : ouvrez-la depuis la console de la VM en saisissant <strong>menu.sh</strong>.",
"src": "https://macrimi.github.io/ProxMenux/vm/synology/rr/rr_2_1_1.png",
"alt": "Interface du chargeur RR",
"caption": "Interface du terminal du chargeur RR"
}
],
"tinycore": [
{
"htmlBefore": "<strong>Interface web</strong>, Pour accéder à l'interface web, il suffit d'ouvrir un navigateur Web et d'entrer l'adresse IP affichée dans la sortie console du VM, suivie du port <strong>7681</strong>. Par exemple, dans notre cas : <code>http://192.169.0.35:7681</code>.",
"src": "https://macrimi.github.io/ProxMenux/vm/synology/tinycore/tinycore_3_0_1.png",
"alt": "Interface de TinyCore Loader",
"caption": "Interface Web du chargeur TinyCore"
},
{
"htmlBefore": "<strong>Interface terminal</strong> : ouvrez-la directement depuis la console de la VM. Surveillez l’écran : il peut vous demander d’appuyer sur une touche pour continuer ou de changer de langue.",
"src": "https://macrimi.github.io/ProxMenux/vm/synology/tinycore/tinycore_3_1_1.png",
"alt": "Interface de TinyCore Loader",
"caption": "Interface du terminal de chargeur TinyCore"
}
]
}
},
{
"id": "step2",
"title": "Sélectionner un modèle",
"intro": "Après avoir chargé le menu, sélectionnez le modèle Synology DSM que vous souhaitez installer. Selon le chargeur, vous pouvez parfois avoir besoin d'élargir les options pour voir plus de modèles.",
"outro": "Dans notre exemple, nous choisirons le modèle SA6400.",
"loaders": {
"arc": [
{
"src": "https://macrimi.github.io/ProxMenux/vm/synology/arc/arc_1_2_1.png",
"alt": "Sélection du modèle Arc",
"caption": "Sélection du modèle Arc"
}
],
"rr": [
{
"src": "https://macrimi.github.io/ProxMenux/vm/synology/rr/rr_2_2_1.png",
"alt": "Sélection du modèle RR",
"caption": "Sélection du modèle RR"
}
],
"tinycore": [
{
"src": "https://macrimi.github.io/ProxMenux/vm/synology/tinycore/tinycore_3_2_1.png",
"alt": "Sélection du modèle TinyCore",
"caption": "Sélection du modèle TinyCore"
}
]
}
},
{
"id": "step3",
"title": "Sélectionner la version DSM",
"intro": "Après avoir sélectionné le modèle, vous devez choisir la version DSM que vous souhaitez installer.",
"loaders": {
"arc": [
{
"src": "https://macrimi.github.io/ProxMenux/vm/synology/arc/arc_1_3_1.png",
"alt": "Sélection de la version Arc - Étape 1",
"caption": "Sélection de la version Arc - Étape 1"
},
{
"src": "https://macrimi.github.io/ProxMenux/vm/synology/arc/arc_1_3_2.png",
"alt": "Sélection de la version Arc - Étape 2",
"caption": "Sélection de la version Arc - Étape 2"
}
],
"rr": [
{
"src": "https://macrimi.github.io/ProxMenux/vm/synology/rr/rr_2_3_1.png",
"alt": "Sélection de la version RR - Étape 1",
"caption": "Sélection de la version RR - Étape 1"
},
{
"src": "https://macrimi.github.io/ProxMenux/vm/synology/rr/rr_2_3_2.png",
"alt": "Sélection de la version RR - Étape 2",
"caption": "Sélection de la version RR - Étape 2"
},
{
"src": "https://macrimi.github.io/ProxMenux/vm/synology/rr/rr_2_3_3.png",
"alt": "Sélection de la version RR - Étape 3",
"caption": "Sélection de la version RR - Étape 3"
}
],
"tinycore": [
{
"src": "https://macrimi.github.io/ProxMenux/vm/synology/tinycore/tinycore_3_3_1.png",
"alt": "Sélection de la version TinyCore - Étape 1",
"caption": "Sélection de la version TinyCore - Étape 1"
},
{
"src": "https://macrimi.github.io/ProxMenux/vm/synology/tinycore/tinycore_3_3_2.png",
"alt": "Sélection de la version TinyCore - Étape 2",
"caption": "Sélection de la version TinyCore - Étape 2"
}
]
}
},
{
"id": "step4",
"title": "Sélectionner des addons",
"intro": "Cette étape vous permet d'ajouter des fonctionnalités supplémentaires ou des configurations personnalisées au chargeur.",
"loaders": {
"arc": [
{
"htmlBefore": "<strong>Arc</strong> vous donne la possibilité de configurer automatiquement ou manuellement les paramètres. Si la configuration automatique est sélectionnée, le chargeur commencera à appliquer les paramètres nécessaires et redémarrera automatiquement une fois le processus terminé.",
"src": "https://macrimi.github.io/ProxMenux/vm/synology/arc/arc_1_4_1.png",
"alt": "Configuration automatique d’Arc",
"caption": "Configuration automatique d’Arc"
},
{
"htmlBefore": "Si nous choisissons de ne pas utiliser le mode automatique, nous entrerons dans le menu pour configurer différentes options nécessaires pour le chargeur:",
"src": "https://macrimi.github.io/ProxMenux/vm/synology/arc/arc_1_4_2.png",
"alt": "Configuration manuelle d’Arc",
"caption": "Configuration manuelle d’Arc"
},
{
"src": "https://macrimi.github.io/ProxMenux/vm/synology/arc/arc_1_4_3.png",
"alt": "Configuration SN/MAC dans Arc",
"caption": "Configuration SN/MAC dans Arc"
},
{
"src": "https://macrimi.github.io/ProxMenux/vm/synology/arc/arc_1_4_4.png",
"alt": "Arc Sata Portmap",
"caption": "Arc Sata Portmap (utilisez l'option recommandée)"
},
{
"src": "https://macrimi.github.io/ProxMenux/vm/synology/arc/arc_1_4_5.png",
"alt": "Sélection des extensions dans Arc",
"caption": "Sélection des extensions dans Arc"
}
],
"rr": [
{
"src": "https://macrimi.github.io/ProxMenux/vm/synology/rr/rr_2_4_1.png",
"alt": "Extension RR — étape 1",
"caption": "Extension RR — étape 1"
},
{
"src": "https://macrimi.github.io/ProxMenux/vm/synology/rr/rr_2_4_2.png",
"alt": "Extension RR — étape 2",
"caption": "Extension RR — étape 2 : cliquez pour ajouter des extensions."
},
{
"src": "https://macrimi.github.io/ProxMenux/vm/synology/rr/rr_2_4_3.png",
"alt": "Extension RR — étape 3",
"caption": "Extension RR — étape 3 : cliquez sur celle de votre choix. Pour en ajouter d’autres, répétez les actions des images 2.4.2 et 2.4.3."
}
],
"tinycore": [
{
"src": "https://macrimi.github.io/ProxMenux/vm/synology/tinycore/tinycore_3_4_1.png",
"alt": "Configuration de TinyCore SN",
"caption": "Configuration de TinyCore SN"
},
{
"src": "https://macrimi.github.io/ProxMenux/vm/synology/tinycore/tinycore_3_4_2.png",
"alt": "Option aléatoire TinyCore",
"caption": "Option aléatoire TinyCore - L'option aléatoire est recommandée"
},
{
"src": "https://macrimi.github.io/ProxMenux/vm/synology/tinycore/tinycore_3_4_3.png",
"alt": "Configuration MAC de TinyCore",
"caption": "Configuration MAC de TinyCore"
},
{
"src": "https://macrimi.github.io/ProxMenux/vm/synology/tinycore/tinycore_3_4_4.png",
"alt": "TinyCore VM MAC",
"caption": "TinyCore VM MAC - Choisissez d'utiliser la MAC de votre VM ou une MAC aléatoire"
}
]
}
},
{
"id": "step5",
"title": "Construisez le chargeur",
"intro": "Une fois que vous avez sélectionné le modèle, la version DSM et les addons, procédez à la construction du chargeur. Ce processus peut prendre quelques minutes en fonction du chargeur et de la configuration sélectionnée. Pour démarrer, sélectionnez l'option \"Construire le chargeur\".",
"loaders": {
"arc": [
{
"src": "https://macrimi.github.io/ProxMenux/vm/synology/arc/arc_1_5_1.png",
"alt": "Construction du chargeur dans Arc",
"caption": "Construction du chargeur dans Arc"
}
],
"rr": [
{
"src": "https://macrimi.github.io/ProxMenux/vm/synology/rr/rr_2_5_1.png",
"alt": "Construction du chargeur dans RR",
"caption": "Construction du chargeur dans RR"
}
],
"tinycore": [
{
"src": "https://macrimi.github.io/ProxMenux/vm/synology/tinycore/tinycore_3_5_1.png",
"alt": "Construction du chargeur dans TinyCore",
"caption": "Construction du chargeur dans TinyCore"
}
]
}
},
{
"id": "step6",
"title": "Démarrer le chargeur",
"intro": "Une fois le chargeur construit, il vous invite à démarrer. Le VM redémarre avec la configuration que vous avez créée et démarre l'installation DSM.",
"loaders": {
"arc": [
{
"src": "https://macrimi.github.io/ProxMenux/vm/synology/arc/arc_1_6_1.png",
"alt": "Démarrage du chargeur dans Arc",
"caption": "Démarrage du chargeur dans Arc"
}
],
"rr": [
{
"src": "https://macrimi.github.io/ProxMenux/vm/synology/rr/rr_2_6_1.png",
"alt": "Démarrage du chargeur dans RR",
"caption": "Démarrage du chargeur dans RR"
}
],
"tinycore": [
{
"src": "https://macrimi.github.io/ProxMenux/vm/synology/tinycore/tinycore_3_6_1.png",
"alt": "Démarrage du chargeur dans TinyCore",
"caption": "Démarrage du chargeur dans TinyCore"
}
]
}
}
],
"dsmInstall": {
"heading": "Démarrer l'installation DSM",
"intro": "Une fois le chargeur démarré, vous pouvez trouver votre appareil Synology en utilisant:",
"afterCode": "Suivez les étapes à l'écran pour terminer l'installation de DSM.",
"setupAlt": "Configuration de DSM",
"setupCaption": "Écran de configuration de DSM",
"patience": "Veuillez être patient – Le processus peut prendre quelques minutes. Le pourcentage de progression sera automatiquement mis à jour au fur et à mesure que la configuration progresse. Un compte à rebours démarrera lorsque l'installation sera presque terminée.",
"finishAlt": "Installation terminée",
"finishCaption": "Installation terminée"
},
"tips": {
"heading": "Conseils",
"introItem": "Gardez à l'esprit que les options disponibles peuvent changer en fonction de la version du chargeur et des mises à jour du développeur. Si vous rencontrez des problèmes lors de la création du chargeur, consultez la documentation du chargeur:",
"docLinks": [
{
"label": "Documentation Arc",
"url": "https://github.com/AuxXxilium/arc"
},
{
"label": "Documentation RR",
"url": "https://github.com/RROrg/rr"
},
{
"label": "Documentation TinyCore",
"url": "https://github.com/PeterSuh-Q3/tinycore-redpill"
}
],
"olderModels": "Certains modèles DSM plus anciens peuvent avoir des problèmes à reconnaître les disques ou la carte réseau. Il est recommandé d'utiliser des modèles plus récents.",
"updateLabel": "Mise à jour :",
"updateBody": "Certains chargeurs offrent l'option de mettre à jour le chargeur directement depuis le menu.",
"importantLabel": "Important:",
"importantBody": "ProxMenux ne fournit pas de support pour les différents chargeurs."
}
}
@@ -0,0 +1,292 @@
{
"meta": {
"title": "Créer une VM : système Linux | Documentation ProxMenux",
"description": "Créez des machines virtuelles Linux sur Proxmox VE avec ProxMenux. Découvrez le catalogue d’ISO officielles (Ubuntu, Debian, Fedora, Arch, Rocky, Mint, openSUSE, Alpine, Kali, Manjaro), le plan de stockage commun, le passthrough GPU facultatif et les conseils après installation.",
"ogTitle": "Créer une VM : système Linux | Documentation ProxMenux",
"ogDescription": "Créez des VM Linux sur Proxmox VE : catalogue d’ISO officielles, stockage, passthrough GPU et conseils après installation.",
"ogImageAlt": "Menu ProxMenux Linux VM"
},
"header": {
"title": "Créer une VM : système Linux",
"description": "Créez une VM Linux sur Proxmox VE. ProxMenux propose un catalogue d’ISO Linux officielles à télécharger et un sélecteur d’ISO locales. Chaque parcours passe par l’assistant VM commun, le plan de stockage et l’assistant facultatif de passthrough GPU.",
"section": "Machines virtuelles"
},
"intro": {
"title": "Ce que ce script fait",
"body": "Choisissez une ISO Linux officielle à télécharger automatiquement ou une ISO locale déjà chargée. L’assistant commun passe ensuite par CPU, RAM et BIOS, le plan de stockage, le passthrough GPU facultatif et la création de la VM."
},
"image": {
"alt": "Options d'installation de ProxMenux Linux",
"caption": "Options d'installation Linux"
},
"config": {
"heading": "Configuration par défaut vs Configuration avancée",
"intro": "Une fois l'ISO sélectionné, ProxMenux demande s'il faut utiliser le profil VM par défaut ou ouvrir l'assistant avancé.",
"defaultHeading": "Configuration par défaut",
"headerParam": "Paramètre",
"headerValue": "Valeur par défaut",
"defaultRows": [
{
"param": "Type de machine",
"valueRich": "<code>q35</code>"
},
{
"param": "BIOS",
"value": "OVMF (UEFI)"
},
{
"param": "Type CPU",
"value": "Host"
},
{
"param": "Noyaux",
"value": "2"
},
{
"param": "RAM",
"value": "4096 MB"
},
{
"param": "Pont",
"valueRich": "<code>vmbr0</code>"
},
{
"param": "Adresse MAC",
"value": "Généré automatiquement"
},
{
"param": "Démarrer à la fin",
"value": "Non"
}
],
"advancedHeading": "Configuration avancée",
"advancedIntro": "L'assistant avancé expose chaque paramètre individuellement :",
"headerOptions": "Possibilités",
"advancedRows": [
{
"param": "Type de machine",
"optionsRich": "<code>q35</code> ou <code>i440fx</code>"
},
{
"param": "BIOS",
"options": "OVMF (UEFI) ou SeaBIOS (Légacy)"
},
{
"param": "Type CPU",
"options": "Host, KVM64 et autres modèles CPU proposés"
},
{
"param": "Noyaux",
"options": "Nombre de cœurs CPU"
},
{
"param": "RAM",
"options": "Mémoire attribuée au VM"
},
{
"param": "Pont",
"options": "Pont réseau"
},
{
"param": "Adresse MAC",
"options": "MAC personnalisée"
},
{
"param": "VLAN",
"options": "Étiquette VLAN (facultatif)"
},
{
"param": "MTU",
"options": "Taille MTU"
}
]
},
"storagePlan": {
"heading": "Plan de stockage",
"body": "Après CPU / RAM, ProxMenux ouvre le menu <strong>Plan de stockage</strong>, où vous pouvez combiner des disques virtuels, des disques importés et des périphériques PCI passants dans le même VM, ajoutant des éléments un à la fois et finissant lorsque vous avez terminé.",
"virtualDiskTitle": "a. Ajouter un disque virtuel",
"virtualDiskItems": [
"Liste les volumes de stockage Proxmox disponibles sur l'hôte.",
"Vous choisissez le stockage cible et la taille en GB.",
"Le disque utilise le bus choisi : SCSI (par défaut), SATA, VirtIO ou IDE. SATA offre six emplacements numérotés de 0 à 5 : <code>sata0</code>, <code>sata1</code>, …."
],
"importDiskTitle": "b. Ajouter un disque d'importation",
"importDiskItems": [
"Détecte les disques physiques qui sont sûrs à importer (le système et les disques protégés sont cachés).",
"Vous sélectionnez un ou plusieurs disques via une liste de contrôle.",
"Les disques importés utilisent le bus choisi et sont connectés par <code>qm set</code>."
],
"pciTitle": "c. Ajouter un contrôleur ou NVMe (passthrough PCI)",
"pciItems": [
"Détecte les appareils HBA SATA/SAS et NVMe sur l'hôte et vous permet de passer un contrôleur <em>entier</em> dans le VM. IOMMU doit être activé ; le script offre de l'activer et de redémarrer si nécessaire.",
"Une étape de confirmation met en garde contre le risque à l'échelle du contrôleur (la carte entière, y compris chaque disque sur elle, quitte l'hôte).",
"Les périphériques PCI sont affectés avec des commandes comme <code>qm set VMID --hostpci0 PCI_ADDRESS,pcie=1</code>. Remplacez VMID et PCI_ADDRESS par l’ID de VM et l’adresse PCI, et utilisez un indice hostpci libre pour chaque périphérique."
],
"resetTitle": "Réinitialiser et terminer",
"resetBody": "Le menu offre également <strong>r</strong> (réinitialiser la sélection actuelle et recommencer) et <strong>d</strong> (finir et poursuivre). Vous ne pouvez pas finir avec un plan vide."
},
"gpu": {
"heading": "Passage facultatif de GPU",
"body": "Après le plan de stockage, si un GPU compatible est détecté sur l'hôte ProxMenux offre de lancer l'assistant de passage GPU. Voir <gpuLink>Ajouter GPU à un VM (Passthrough)</gpuLink> pour savoir comment fonctionne l'assistant — un redémarrage d'hôte peut être nécessaire."
},
"autoFeatures": {
"heading": "Fonctions automatiques VM",
"efiTitle": "disque EFI",
"efiBody": "Lorsque OVMF (UEFI) est sélectionné, ProxMenux crée un disque système EFI 4 MB sur le stockage que vous choisissez afin que le firmware ait un endroit pour stocker ses variables.",
"isoTitle": "Montage ISO",
"isoBody": "L'installation ISO est fixée à <code>ide2</code> en tant que CD-ROM, prêt pour le premier démarrage.",
"guestTitle": "QEMU Agent invité",
"guestBody": "Le canal d'agent invité est activé dans la configuration VM. Vous devez toujours installer l'agent à l'intérieur de l'invité — voir les conseils ci-dessous."
},
"installOptions": {
"heading": "Options d'installation Linux",
"officialHeading": "ISO officielle (installation traditionnelle)",
"officialBody": "ProxMenux propose une sélection d’ISO Linux officielles. Choisissez-en une : le script la télécharge depuis le miroir du projet dans <code>/var/lib/vz/template/iso</code>, puis la connecte à la VM.",
"officialImageAlt": "Sélection de distribution Linux",
"officialImageCaption": "Sélection de distribution Linux",
"localHeading": "ISO locale",
"localBody": "Utilise une ISO Linux déjà présente dans <code>/var/lib/vz/template/iso</code>. Le script affiche tous les fichiers <code>*.iso</code> trouvés et vous permet d’en choisir un.",
"localImageAlt": "Menu local de sélection ISO",
"localImageCaption": "Menu local de sélection ISO",
"distros": [
{
"name": "Ubuntu",
"variants": [
"25.10 Desktop",
"24.04 Desktop",
"22.04 Desktop",
"20.04 Desktop",
"25.10 Server",
"24.04 Server",
"22.04 Server",
"20.04 Server"
]
},
{
"name": "Debian",
"variants": [
"13 Desktop",
"12 Desktop",
"11 Desktop",
"13 Netinst",
"12 Netinst",
"11 Netinst"
]
},
{
"name": "Fedora",
"variants": [
"Workstation 42"
]
},
{
"name": "Arch Linux",
"variants": [
"dernière version"
]
},
{
"name": "Rocky Linux",
"variants": [
"9"
]
},
{
"name": "Linux Mint",
"variants": [
"22.1 Cinnamon"
]
},
{
"name": "openSUSE",
"variants": [
"Leap 15.6"
]
},
{
"name": "Alpine Linux",
"variants": [
"3.21"
]
},
{
"name": "Kali Linux",
"variants": [
"2026.1"
]
},
{
"name": "Manjaro",
"variants": [
"25.0 GNOME"
]
}
]
},
"endToEnd": {
"heading": "Ce que fait le script de bout en bout",
"items": [
"Récupère l’ISO Linux par téléchargement officiel ou depuis un fichier local.",
"Applique la configuration par défaut ou avancée CPU / RAM / BIOS / type machine.",
"Ouvre le plan de stockage et fixe les disques virtuels sélectionnés, les disques importés et les périphériques PCI.",
"Crée le disque EFI lorsque UEFI est sélectionné.",
"Monte l'ISO Linux sur <code>ide2</code>.",
"Définit l'ordre de démarrage (disque d'abord, puis ISO).",
"Active le canal QEMU Guest Agent.",
"En option, exécute l'assistant de passage GPU.",
"Génère une description HTML de style jointe au VM.",
"Démarre la VM si vous l’avez choisi."
]
},
"postInstall": {
"heading": "Conseils après l'installation",
"guestAgentHeading": "Installez l’agent invité QEMU dans la VM",
"guestAgentBody": "ProxMenux active le canal de l’agent invité dans la configuration VM ; l’agent doit être installé dans le système invité. Il permet l’arrêt contrôlé et le gel des systèmes de fichiers pendant les sauvegardes pour améliorer la cohérence des données.",
"debian": "Debian / Ubuntu",
"fedora": "Fedora / Rocky / RHEL",
"arch": "Arch Linux",
"opensuse": "openSUSE",
"virtioHeading": "Support VirtIO sous Linux",
"virtioBody": "Les distributions Linux modernes incluent généralement les pilotes VirtIO de disque et réseau. Choisissez <code>virtio</code> pour les disques blocs VirtIO, ou <code>scsi</code> avec le contrôleur VirtIO SCSI configuré ; l’adaptateur réseau utilise aussi <code>virtio</code>. Vérifiez les pilotes avec les anciens installateurs.",
"virtioWarnTitle": "Distributions très anciennes",
"virtioWarnBody": "Les très anciens installateurs peuvent manquer des pilotes VirtIO nécessaires. Utilisez alors un contrôleur SATA / SCSI émulé ou fournissez les pilotes adaptés.",
"trimHeading": "Activer TRIM / discard sur un stockage SSD",
"trimBody": "Si la VM utilise un stockage Proxmox sur SSD et que le disque a été connecté avec l’option <code>discard</code>, vous pouvez transmettre les commandes TRIM du système invité. Deux possibilités :",
"trimItems": [
"Exécuter périodiquement <code>fstrim -av</code> (ou activer l'unité <code>fstrim.timer</code> sur les distributions systemd).",
"Ou monter des systèmes de fichiers avec l'option <code>discard</code> dans <code>/etc/fstab</code>."
],
"balloonHeading": "Allocation dynamique de mémoire (ballooning)",
"balloonBody": "Les noyaux Linux modernes incluent généralement le pilote <code>virtio_balloon</code>. Avec le périphérique balloon activé, Proxmox peut recueillir des statistiques mémoire. La récupération dynamique nécessite aussi une mémoire minimale inférieure au maximum configuré ; des valeurs égales maintiennent une allocation fixe."
},
"related": {
"heading": "Voir aussi",
"items": [
{
"href": "/docs/disk-manager/import-disk-image-vm",
"label": "Importer l'image disque vers la VM",
"tail": " — connecter une image Linux existante .qcow2 / .img / .raw à une nouvelle VM."
},
{
"href": "/docs/utils/import-vm",
"label": "Importer VM de OVA / OVF",
"tail": " — importer une VM Linux exportée depuis VMware / VirtualBox / Proxmox."
},
{
"href": "/docs/hardware/gpu-vm-passthrough",
"label": "Ajouter GPU à VM (Passthrough)",
"tail": "— pour les VM Linux qui ont besoin d'accélération GPU."
},
{
"href": "/docs/help-info/vm-ct-commands",
"label": "Commandes de gestion VM et CT",
"tail": "— qm CLI référence."
},
{
"href": "/docs/create-vm",
"label": "Vue d’ensemble de la création de VM",
"tail": "."
}
]
}
}
@@ -0,0 +1,147 @@
{
"meta": {
"title": "Créer une VM NAS | Documentation ProxMenux",
"description": "Créez des VM NAS sur Proxmox VE avec ProxMenux : Synology DSM avec chargeur, TrueNAS SCALE/CORE, OpenMediaVault, XigmaNAS, Rockstor, ZimaOS et FygoOS. Umbrel OS est disponible via un script communautaire.",
"ogTitle": "Créer une VM NAS | Documentation ProxMenux",
"ogDescription": "Créez des VM NAS sur Proxmox VE avec ProxMenux : Synology DSM avec chargeur, TrueNAS SCALE/CORE, OpenMediaVault, XigmaNAS, Rockstor, ZimaOS et FygoOS.",
"ogImageAlt": "Menu du NAS système ProxMenux"
},
"header": {
"title": "Créer une VM NAS",
"description": "ProxMenux prend en charge huit systèmes d'exploitation NAS en tant que VM dédiés, plus un chemin Umbrel OS optionnel via un script communautaire. La plupart des systèmes partagent le même flux auto-ISO; Synology DSM utilise un assistant de chargeur spécialisé.",
"section": "Machines virtuelles"
},
"intro": {
"title": "Comment fonctionne le sélecteur de NAS",
"body": "Pour le parcours ISO générique, le sélecteur tente de détecter la dernière version stable sur le miroir du projet, utilise une version de secours si nécessaire, télécharge l’ISO et ouvre le configurateur commun pour CPU, RAM, disques et réseau. Synology DSM et ZimaOS utilisent des installateurs spécifiques."
},
"image": {
"alt": "Sélecteur de NAS système ProxMenux",
"caption": "Sélecteur de NAS système"
},
"flowBadges": {
"loader": "Procédure avec chargeur",
"auto-iso": "Procédure ISO automatique",
"dedicated": "Script dédié"
},
"labels": {
"base": "Base",
"fileSystem": "Système de fichiers",
"viewDetails": "Afficher les détails"
},
"supported": {
"heading": "Systèmes NAS pris en charge",
"cards": [
{
"name": "Synology DSM",
"tagline": "DiskStation Manager avec le chargeur ARC / RR. Nécessite la configuration du chargeur avant le premier démarrage.",
"icon": "HardDrive",
"base": "Linux (sur mesure)",
"fileSystem": "Btrfs, ext4",
"href": "/docs/create-vm/system-nas/synology",
"flow": "loader"
},
{
"name": "TrueNAS SCALE",
"tagline": "TrueNAS basé sur Debian avec des applications Docker dans les versions actuelles et ZFS comme système de fichiers principal. Les anciennes versions de SCALE utilisaient Kubernetes.",
"icon": "Database",
"base": "Debian Linux",
"fileSystem": "ZFS",
"href": "/docs/create-vm/system-nas/system-nas-others#truenas-scale",
"flow": "auto-iso"
},
{
"name": "TrueNAS CORE",
"tagline": "TrueNAS basé sur FreeBSD, axé sur le stockage ZFS. Les jails et plugins de CORE 13.3 sont obsolètes et non pris en charge.",
"icon": "Database",
"base": "FreeBSD",
"fileSystem": "ZFS",
"href": "/docs/create-vm/system-nas/system-nas-others#truenas-core",
"flow": "auto-iso"
},
{
"name": "OpenMediaVault",
"tagline": "NAS léger basé sur Debian avec une architecture modulaire plugin. Parfait pour le matériel plus ancien.",
"icon": "Server",
"base": "Debian Linux",
"fileSystem": "ext4, XFS, Btrfs",
"href": "/docs/create-vm/system-nas/system-nas-others#openmediavault",
"flow": "auto-iso"
},
{
"name": "XigmaNAS",
"tagline": "NAS basé sur FreeBSD — le successeur original de FreeNAS, axé sur ZFS et la simplicité.",
"icon": "Database",
"base": "FreeBSD",
"fileSystem": "ZFS, UFS",
"href": "/docs/create-vm/system-nas/system-nas-others#xigmanas",
"flow": "auto-iso"
},
{
"name": "Rockstor",
"tagline": "NAS openSUSE construit autour de Btrfs. Rock-ons (applications Docker) prolongent la fonctionnalité.",
"icon": "HardDrive",
"base": "openSUSE Leap",
"fileSystem": "Btrfs",
"href": "/docs/create-vm/system-nas/system-nas-others#rockstor",
"flow": "auto-iso"
},
{
"name": "ZimaOS",
"tagline": "Léger NAS OS axé sur les médias, les applications Docker et la domotique. Utilise son propre installateur.",
"icon": "MonitorIcon",
"base": "Buildroot (issu de CasaOS)",
"fileSystem": "ext4",
"href": "/docs/create-vm/system-nas/system-nas-others#zimaos",
"flow": "dedicated"
},
{
"name": "FygoOS",
"tagline": "Edition internationale de fnOS : un NAS basé sur Debian avec des volumes de stockage, des applications et du streaming multimédia, géré depuis son interface web et les applications Fygo.",
"icon": "Server",
"base": "Debian Linux",
"fileSystem": "Btrfs, ext4",
"href": "/docs/create-vm/system-nas/system-nas-others#fygoos",
"flow": "auto-iso"
}
]
},
"umbrel": {
"title": "Option communautaire: Umbrel OS",
"bodyRich": "La neuvième entrée du menu NAS est <strong>Umbrel OS</strong>. Elle lance un <umbrelLink>installateur community-scripts</umbrelLink> maintenu hors de ProxMenux et non documenté ici. L’installateur gère tout le parcours et affiche les identifiants par défaut à la fin."
},
"zfsMem": {
"title": "Repère pour la mémoire ZFS",
"bodyRich": "Pour TrueNAS, prévoyez au moins <strong>8 Go de RAM</strong> pour un usage de base, davantage pour les charges lourdes. ZFS utilise la RAM pour le cache ARC, sans seuil universel de 8 Go pour tous les NAS ZFS. Vérifiez les exigences de la distribution et dimensionnez selon disques, services et applications ; OMV ou Rockstor en configuration légère peuvent demander moins."
},
"related": {
"heading": "Voir aussi",
"items": [
{
"href": "/docs/create-vm/system-nas/synology",
"label": "VM Synology",
"tail": "— installateur dédié pour Synology DSM (Xpenology) sur Proxmox."
},
{
"href": "/docs/create-vm/system-nas/system-nas-others",
"label": "Autre NAS système",
"tail": "— TrueNAS, OpenMediaVault, Rockstor, XigmaNAS, FygoOS et similaires."
},
{
"href": "/docs/disk-manager/import-disk-vm",
"label": "Importer le disque vers la VM",
"tail": "— passer les vrais disques physiques au NAS VM (recommandé sur les disques virtuels pour la production)."
},
{
"href": "/docs/help-info/zfs-commands",
"label": "Commandes de gestion ZFS",
"tail": "— utile si votre distribution NAS utilise ZFS ci-dessous."
},
{
"href": "/docs/create-vm",
"label": "Vue d’ensemble de la création de VM",
"tail": "."
}
]
}
}
@@ -0,0 +1,400 @@
{
"meta": {
"title": "Créer une VM : Synology DSM | Documentation ProxMenux",
"description": "Créez une VM Synology DSM sur Proxmox VE. ProxMenux télécharge le chargeur choisi (Arc, RR, Alpine RedPill M-shell ou une image personnalisée), l’importe comme disque de démarrage et configure CPU, RAM et stockage avec l’assistant par défaut ou avancé.",
"ogTitle": "Créer une VM : Synology DSM | Documentation ProxMenux",
"ogDescription": "Créez une machine virtuelle Synology DSM sur Proxmox VE avec ProxMenux."
},
"header": {
"title": "Créer une VM : Synology DSM",
"description": "Créez une VM Synology DSM sur Proxmox VE. ProxMenux télécharge le chargeur choisi (Arc, RR, Alpine RedPill M-shell ou une image personnalisée), l’importe comme disque de démarrage et configure CPU, RAM et stockage avec l’assistant par défaut ou avancé.",
"section": "Machines virtuelles · NAS"
},
"loaderLabels": {
"arc": "Arc Loader",
"rr": "RR Loader",
"tinycore": "TinyCore Loader"
},
"whatThisDoes": {
"title": "Ce que ça fait",
"bodyRich": "ProxMenux automatise la préparation de la VM pour Synology DSM : téléchargement d’un chargeur pris en charge, importation comme disque de démarrage IDE et application des réglages CPU, RAM, réseau et stockage choisis. La construction du chargeur, le choix du modèle et l’installation DSM se font <strong>dans la VM</strong>, avec l’interface web ou terminal du chargeur. Ces étapes communautaires changent souvent ; cette page fournit une base de travail."
},
"supportedLoaders": {
"heading": "Chargeurs pris en charge",
"intro": "Le script propose quatre sources de chargeur :",
"loaders": [
{
"name": "AuxXxilium Arc",
"url": "https://github.com/AuxXxilium/arc"
},
{
"name": "RedPill RR",
"url": "https://github.com/RROrg/rr"
},
{
"name": "Alpine RedPill M-shell (projet TinyCore)",
"url": "https://github.com/PeterSuh-Q3/tinycore-redpill"
}
],
"customRich": "<strong>Chargeur personnalisé</strong> — déposez votre propre image de chargeur dans <code>/var/lib/vz/template/iso</code> et le script le récupérera."
},
"config": {
"heading": "Configuration par défaut vs Configuration avancée",
"intro": "Au lancement, le script demande si vous voulez utiliser le profil VM ProxMenux par défaut ou ouvrir l’assistant avancé. Les valeurs par défaut sont adaptées à DSM et conviennent à la plupart des installations.",
"defaultHeading": "Configuration par défaut",
"headerParam": "Paramètre",
"headerValue": "Valeur par défaut",
"defaultRowsRich": [
{
"param": "Type de machine",
"valueRich": "<code>q35</code>"
},
{
"param": "BIOS",
"valueRich": "OVMF (UEFI)"
},
{
"param": "Type CPU",
"valueRich": "Host"
},
{
"param": "Cœurs",
"valueRich": "2"
},
{
"param": "RAM",
"valueRich": "4096 MB"
},
{
"param": "Pont",
"valueRich": "<code>vmbr0</code>"
},
{
"param": "Adresse MAC",
"valueRich": "Généré automatiquement"
},
{
"param": "Démarrer à la fin",
"valueRich": "Non"
}
],
"advancedHeading": "Configuration avancée",
"advancedIntro": "L’assistant avancé présente chaque paramètre séparément. Vous pouvez modifier les valeurs suivantes :",
"headerOptions": "Possibilités",
"advancedRowsRich": [
{
"param": "Type de machine",
"optionsRich": "<code>q35</code> ou <code>i440fx</code>"
},
{
"param": "BIOS",
"optionsRich": "OVMF (UEFI) ou SeaBIOS (Légacy)"
},
{
"param": "Type CPU",
"optionsRich": "Host ou KVM64"
},
{
"param": "Cœurs",
"optionsRich": "Nombre de cœurs CPU"
},
{
"param": "RAM",
"optionsRich": "Mémoire attribuée à la VM"
},
{
"param": "Pont",
"optionsRich": "Pont réseau"
},
{
"param": "Adresse MAC",
"optionsRich": "MAC personnalisée"
},
{
"param": "VLAN",
"optionsRich": "Étiquette VLAN (facultatif)"
},
{
"param": "MTU",
"optionsRich": "Taille MTU"
}
]
},
"storagePlan": {
"heading": "Plan de stockage",
"introRich": "Après CPU et RAM, ProxMenux ouvre le menu <strong>Plan de stockage</strong>. Vous pouvez y <strong>combiner</strong> disques virtuels, disques importés et périphériques PCI en passthrough dans la même VM. Ajoutez les éléments un par un, puis terminez le plan.",
"virtualHeading": "a. Ajouter un disque virtuel",
"virtualItemsRich": [
"Liste les volumes de stockage Proxmox disponibles sur l'hôte.",
"Vous choisissez le stockage cible et la taille en GB.",
"Le disque est connecté en SATA (<code>sata0</code>, <code>sata1</code>, …). Les disques de données virtuels et physiques partagent les six emplacements SATA numérotés de 0 à 5."
],
"importHeading": "b. Ajouter un disque d'importation",
"importItemsRich": [
"Détecte les disques physiques qui sont sûrs à importer (le système et les disques protégés sont cachés).",
"Vous sélectionnez un ou plusieurs disques via une liste de contrôle.",
"Les disques importés sont attachés comme SATA via <code>qm set</code>."
],
"pciHeading": "c. Ajouter un contrôleur ou NVMe (passthrough PCI)",
"pciItemsRich": [
"Détecte les appareils HBA SATA/SAS et NVMe sur l'hôte et vous permet de passer un contrôleur <em>entier</em> dans le VM. IOMMU doit être activé ; le script offre de l'activer et de redémarrer si nécessaire.",
"Une étape de confirmation met en garde contre le risque à l'échelle du contrôleur (la carte entière, y compris chaque disque sur elle, quitte l'hôte).",
"Les périphériques PCI sont affectés avec des commandes comme <code>qm set VMID --hostpci0 PCI_ADDRESS,pcie=1</code>. Remplacez VMID et PCI_ADDRESS par l’ID de VM et l’adresse PCI, et utilisez un indice hostpci libre pour chaque périphérique."
],
"resetCalloutTitle": "Réinitialiser et terminer",
"resetCalloutBodyRich": "Le menu offre également <strong>r</strong> (réinitialiser la sélection actuelle et recommencer) et <strong>d</strong> (finir et poursuivre). Vous ne pouvez pas terminer avec un plan vide — Synology a besoin d'au moins un disque pour installer DSM."
},
"gpu": {
"heading": "Passage facultatif de GPU",
"bodyRich": "Après le plan de stockage, si le script détecte un GPU compatible sur l'hôte, il demande si vous voulez le transmettre à ce VM. Voir <link>Ajouter GPU à un VM (Passthrough)</link> pour savoir comment fonctionne l'assistant — un redémarrage d'hôte peut être nécessaire."
},
"loaderInstall": {
"heading": "Installation du chargeur",
"intro1Rich": "<strong>Arc</strong>, <strong>RR</strong> et <strong>Alpine RedPill M-shell</strong> sont téléchargés et extraits automatiquement depuis leurs dépôts GitHub d’origine. En cas d’échec, le script s’arrête avec un message clair.",
"intro2Rich": "Pour l'option <strong>Custom Loader</strong> le script scanne <code>/var/lib/vz/template/iso</code>. Si plus d'un candidat est trouvé, vous êtes invité à choisir celui que vous voulez.",
"uploadIntro": "Vous pouvez télécharger des chargeurs personnalisés à partir du stockage local Proxmox:",
"imageAlt": "Ajouter un chargeur personnalisé",
"imageCaption": "Ajouter un chargeur personnalisé"
},
"vmCreation": {
"heading": "Création VM — ce que le script exécute",
"introRich": "Une fois que vous avez confirmé le chargeur, ProxMenux exécute l'équivalent de ces commandes <code>qm</code> :",
"itemsRich": [
"<code>qm create</code> — crée la VM avec CPU, RAM, BIOS et type de machine choisis.",
"<code>qm importdisk</code> importe l’image du chargeur dans le stockage Proxmox. Le script la connecte ensuite comme disque <strong>IDE</strong> sur ide0 pour la compatibilité.",
"<code>qm set VMID --sata0 DISK_REFERENCE</code> connecte un disque de données du plan. Remplacez VMID et DISK_REFERENCE par l’ID de VM et la référence du disque ; utilisez un indice SATA libre de 0 à 5. Le réseau est configuré par qm create.",
"<code>qm set VMID --hostpci0 PCI_ADDRESS,pcie=1</code> affecte un contrôleur PCI ou périphérique NVMe choisi. Remplacez VMID et PCI_ADDRESS par l’ID de VM et l’adresse PCI, et utilisez un indice hostpci libre par périphérique.",
"<code>qm set VMID --boot order=ide0</code> définit le chargeur comme périphérique de démarrage. Remplacez VMID par l’ID de la VM."
]
},
"stepByStep": {
"heading": "Configuration du chargeur étape par étape",
"intro": "Les six étapes communes sont : démarrer la VM, choisir modèle, version DSM et extensions, construire et démarrer. Les menus et options varient selon la version. Les captures M-shell montrent une ancienne interface TinyCore ; le script actuel télécharge Alpine RedPill M-shell. Suivez donc ses indications actuelles.",
"warnCalloutTitle": "Les chargeurs ne sont pas entretenus par ProxMenux",
"warnCalloutBody": "Arc, RR et Alpine RedPill M-shell sont des projets communautaires avec leur propre cadence de sortie. Si une étape semble différente des captures d'écran ci-dessous, le chargeur a probablement mis à jour — vérifiez la documentation propre du chargeur (liens au bas de cette page)."
},
"stepBadge": "Étape",
"step1": {
"title": "Démarrer la VM et ouvrir le menu principal",
"intro": "Démarrez la VM créée. Le premier démarrage ouvre la configuration du chargeur pour choisir et construire le modèle DSM. Les démarrages suivants ignorent cette étape, sauf si vous forcez une reconfiguration depuis le menu de démarrage du chargeur. Les trois chargeurs proposent une interface terminal et une interface web.",
"arc": {
"webRich": "<strong>Interface Web.</strong> Ouvrez un navigateur et accédez à l'IP affiché dans la console VM (dans notre exemple : <code>http://192.168.0.32</code>).",
"webAlt": "Interface web d’Arc Loader",
"webCaption": "Interface web d’Arc Loader",
"termRich": "<strong>Interface terminal</strong> : ouvrez-la directement depuis la console de la VM.",
"termAlt": "Interface terminal d’Arc Loader",
"termCaption": "Interface terminal d’Arc Loader"
},
"rr": {
"webRich": "<strong>Interface Web.</strong> Ouvrez un navigateur et allez à l'IP affiché dans la console VM suivie du port <strong>7681</strong> (exemple : <code>http://192.168.0.33:7681</code>).",
"webAlt": "Interface web du chargeur RR",
"webCaption": "Interface web du chargeur RR",
"termRich": "<strong>Interface terminal.</strong> Saisissez <code>menu.sh</code> dans la console de la VM pour l’ouvrir.",
"termAlt": "Interface du terminal de chargeur RR",
"termCaption": "Interface du terminal de chargeur RR"
},
"tinycore": {
"webRich": "<strong>Interface Web.</strong> Ouvrez un navigateur et allez à l'IP affiché dans la console VM suivie du port <strong>7681</strong> (exemple : <code>http://192.168.0.35:7681</code>).",
"webAlt": "Interface web du chargeur TinyCore",
"webCaption": "Interface web du chargeur TinyCore",
"termRich": "<strong>Interface terminal</strong> : ouvrez-la directement depuis la console de la VM. Surveillez l’écran : il peut vous demander d’appuyer sur une touche pour continuer ou de changer de langue.",
"termAlt": "Interface terminal du chargeur TinyCore",
"termCaption": "Interface terminal du chargeur TinyCore"
}
},
"step2": {
"title": "Sélectionnez le modèle",
"introRich": "Choisissez le modèle Synology DSM que vous souhaitez installer. Selon le chargeur, vous pouvez avoir besoin d'élargir les options pour voir la liste complète. Dans les captures d'écran ci-dessous, nous utilisons le modèle <strong>SA6400</strong> comme exemple.",
"arc": {
"alt": "Sélection du modèle Arc",
"caption": "Sélection du modèle Arc"
},
"rr": {
"alt": "Sélection du modèle RR",
"caption": "Sélection du modèle RR"
},
"tinycore": {
"alt": "Sélection du modèle TinyCore",
"caption": "Sélection du modèle TinyCore"
}
},
"step3": {
"title": "Sélectionnez la version DSM",
"intro": "Après avoir choisi le modèle, choisissez la version DSM à installer.",
"arc": [
{
"alt": "Version Arc — étape 1",
"caption": "Sélection de la version Arc — étape 1"
},
{
"alt": "Version Arc — étape 2",
"caption": "Sélection de la version Arc — étape 2"
}
],
"rr": [
{
"alt": "Version RR — étape 1",
"caption": "Sélection de la version RR — étape 1"
},
{
"alt": "Version RR — étape 2",
"caption": "Sélection de la version RR — étape 2"
},
{
"alt": "Version RR — étape 3",
"caption": "Sélection de la version RR — étape 3"
}
],
"tinycore": [
{
"alt": "Version TinyCore — étape 1",
"caption": "Sélection de la version TinyCore — étape 1"
},
{
"alt": "Version TinyCore — étape 2",
"caption": "Sélection de la version TinyCore — étape 2"
}
]
},
"step4": {
"title": "Sélectionner des addons",
"intro": "Cette étape vous permet d'ajouter des fonctionnalités supplémentaires ou une configuration personnalisée au chargeur.",
"arc": {
"autoRich": "<strong>Arc</strong> propose un mode automatique conseillé et un mode manuel. En mode automatique, le chargeur applique des réglages par défaut adaptés et redémarre seul une fois terminé.",
"autoAlt": "Configuration automatique d’Arc",
"autoCaption": "Configuration automatique d’Arc",
"manualRich": "En mode manuel, vous parcourez les options une par une :",
"manualAlt": "Configuration manuelle d’Arc",
"manualCaption": "Configuration manuelle d’Arc",
"snMacAlt": "Arc SN/MAC",
"snMacCaption": "Configuration Arc SN / MAC",
"portmapAlt": "Arc SATA portmap",
"portmapCaption": "Carte de port SATA Arc (utiliser l'option recommandée)",
"addonsAlt": "Extensions d’Arc",
"addonsCaption": "Sélection des extensions dans Arc"
},
"rr": [
{
"alt": "Addon RR — étape 1",
"caption": "Addon RR — étape 1"
},
{
"alt": "Addon RR — étape 2",
"caption": "Extension RR — étape 2 : cliquez pour ajouter une extension."
},
{
"alt": "Addon RR — étape 3",
"caption": "Addon RR — étape 3: cliquez sur l'addon que vous voulez. Répétez les deux captures d'écran précédentes pour ajouter plus."
}
],
"tinycore": [
{
"alt": "Configuration de TinyCore SN",
"caption": "Configuration de TinyCore SN"
},
{
"alt": "Option aléatoire TinyCore",
"caption": "Option aléatoire TinyCore (recommandée)"
},
{
"alt": "Configuration MAC de TinyCore",
"caption": "Configuration MAC de TinyCore"
},
{
"alt": "TinyCore VM MAC",
"caption": "TinyCore — choisissez la MAC du VM ou une MAC aléatoire"
}
]
},
"step5": {
"title": "Construire le chargeur",
"introRich": "Avec le modèle, la version DSM et les addons choisis, choisissez <strong>Construisez le Loader</strong>. Cela peut prendre quelques minutes en fonction du chargeur et des options sélectionnées.",
"arc": {
"alt": "Construction du chargeur dans Arc",
"caption": "Construction du chargeur dans Arc"
},
"rr": {
"alt": "Construction du chargeur dans RR",
"caption": "Construction du chargeur dans RR"
},
"tinycore": {
"alt": "Construction du chargeur dans TinyCore",
"caption": "Construction du chargeur dans TinyCore"
}
},
"step6": {
"title": "Démarrer le chargeur",
"intro": "Une fois le chargeur construit, la VM redémarre avec la configuration créée et l’installation DSM commence.",
"arc": {
"alt": "Démarrage du chargeur dans Arc",
"caption": "Démarrage du chargeur dans Arc"
},
"rr": {
"alt": "Démarrage du chargeur dans RR",
"caption": "Démarrage du chargeur dans RR"
},
"tinycore": {
"alt": "Démarrage du chargeur dans TinyCore",
"caption": "Démarrage du chargeur dans TinyCore"
}
},
"dsmInstall": {
"heading": "Démarrer l'installation DSM",
"intro": "Une fois le chargeur démarré, trouvez votre VM DSM en ouvrant :",
"afterCode": "Suivez les étapes à l'écran pour terminer l'installation de DSM.",
"setupAlt": "Configuration DSM",
"setupCaption": "Écran de configuration DSM",
"patience": "Patientez quelques minutes. La progression se met à jour automatiquement et un compte à rebours apparaît vers la fin de l’installation.",
"finishAlt": "Installation terminée",
"finishCaption": "Installation terminée"
},
"tips": {
"heading": "Conseils",
"recentTitle": "Utiliser des modèles DSM récents",
"recentBody": "Certains modèles DSM plus anciens ont du mal à reconnaître les disques ou la carte réseau. Préférez les modèles récents (p. ex. SA6400) pour une expérience de premier démarrage plus fluide.",
"updateTitle": "Mise à jour du chargeur",
"updateBody": "Certains chargeurs offrent la possibilité de se mettre à jour directement depuis leur menu de configuration — vous n'avez pas à détruire et recréer le VM.",
"warnTitle": "ProxMenux ne supporte pas les chargeurs",
"warnBody": "ProxMenux automatise le côté VM. Les problèmes de chargeur (modèle non trouvé, add-on défaut d'installation, DSM refusant de démarrer) sont hors de portée ici — utiliser le tracker de problème propre à chaque chargeur et la documentation.",
"docsHeading": "Documentation du chargeur",
"docLinks": [
{
"label": "Documentation Arc",
"url": "https://github.com/AuxXxilium/arc"
},
{
"label": "Documentation RR",
"url": "https://github.com/RROrg/rr"
},
{
"label": "Documentation TinyCore",
"url": "https://github.com/PeterSuh-Q3/tinycore-redpill"
}
]
},
"related": {
"heading": "Voir aussi",
"itemsRich": [
{
"href": "/docs/create-vm/system-nas",
"label": "Vue d’ensemble des systèmes NAS",
"tail": "— comparaison de Synology vs TrueNAS / OMV / Rockstor / XigmaNAS."
},
{
"href": "/docs/create-vm/system-nas/system-nas-others",
"label": "Autres systèmes NAS",
"tail": " — autres distributions NAS que Synology."
},
{
"href": "/docs/disk-manager/import-disk-vm",
"label": "Importer le disque vers la VM",
"tail": " — connecter des disques physiques à la VM Synology pour les performances de stockage."
},
{
"href": "/docs/create-vm",
"label": "Vue d’ensemble de la création de VM",
"tail": "."
}
]
}
}
@@ -0,0 +1,312 @@
{
"meta": {
"title": "Créer une VM : autres systèmes NAS | Documentation ProxMenux",
"description": "Créez des VM TrueNAS SCALE, TrueNAS CORE, OpenMediaVault, XigmaNAS, Rockstor, ZimaOS et FygoOS sur Proxmox VE avec ProxMenux. Configuration par défaut ou avancée, plan de stockage, passthrough GPU facultatif et ressources conseillées pour chaque système.",
"ogTitle": "Créer une VM : autres systèmes NAS | Documentation ProxMenux",
"ogDescription": "Créez TrueNAS SCALE / CORE, OpenMediaVault, XigmaNAS, Rockstor, ZimaOS et FygoOS VMs sur Proxmox VE avec ProxMenux.",
"ogImageAlt": "Sélecteur de NAS ProxMenux"
},
"header": {
"title": "Créer VM: Autres systèmes NAS",
"description": "ProxMenux peut créer un VM prêt à installer pour TrueNAS SCALE, TrueNAS CORE, OpenMediaVault, XigmaNAS, Rockstor, ZimaOS et FygoOS. Cette page couvre le flux de création partagé (configuration par défaut / avancée, nouveau plan de stockage, passage optionnel GPU) plus les notes par système et les spécifications recommandées.",
"section": "Machines virtuelles · NAS"
},
"intro": {
"title": "Comment ces systèmes sont créés",
"bodyRich": "Les sept systèmes partagent le même assistant ProxMenux. Le sélecteur de NAS choisit l'installateur correspondant (détectant automatiquement la dernière version stable pour TrueNAS, OMV, XigmaNAS, Rockstor et FygoOS) et passe ensuite au configurateur générique VM et au plan de stockage. ZimaOS utilise son propre script d'installation (<code>vm/zimaos.sh</code>) mais suit la même séquence CPU / RAM / stockage / option-GPU."
},
"config": {
"heading": "Configuration par défaut vs Configuration avancée",
"intro": "Lorsqu'un NAS est sélectionné, ProxMenux demande s'il faut utiliser le profil VM par défaut ou ouvrir l'assistant avancé. Les valeurs par défaut sont adaptées aux charges de travail du NAS — plus de RAM qu'un simple Linux VM car les systèmes basés sur ZFS en ont besoin pour le cache ARC.",
"defaultHeading": "Configuration par défaut",
"headerParam": "Paramètre",
"headerValue": "Valeur par défaut",
"defaultRowsRich": [
{
"param": "Type de machine",
"valueRich": "<code>q35</code>"
},
{
"param": "BIOS",
"valueRich": "OVMF (UEFI)<note> — SeaBIOS pour OpenMediaVault</note>"
},
{
"param": "Type CPU",
"valueRich": "Host"
},
{
"param": "Noyaux",
"valueRich": "2"
},
{
"param": "RAM",
"valueRich": "8192 MB<note> — 4096 MB pour ZimaOS</note>"
},
{
"param": "Pont",
"valueRich": "<code>vmbr0</code>"
},
{
"param": "Adresse MAC",
"valueRich": "Généré automatiquement"
},
{
"param": "Démarrer à la fin",
"valueRich": "Non"
}
],
"advancedHeading": "Configuration avancée",
"advancedIntro": "L'assistant avancé expose chaque paramètre individuellement :",
"headerOptions": "Possibilités",
"advancedRowsRich": [
{
"param": "Type de machine",
"optionsRich": "<code>q35</code> ou <code>i440fx</code>"
},
{
"param": "BIOS",
"optionsRich": "OVMF (UEFI) ou SeaBIOS (Légacy)"
},
{
"param": "Type CPU",
"optionsRich": "Host, KVM64 et autres modèles CPU proposés (ZimaOS : Host ou KVM64)"
},
{
"param": "Noyaux",
"optionsRich": "Nombre de cœurs CPU"
},
{
"param": "RAM",
"optionsRich": "Mémoire attribuée au VM"
},
{
"param": "Pont",
"optionsRich": "Pont réseau"
},
{
"param": "Adresse MAC",
"optionsRich": "MAC personnalisée"
},
{
"param": "VLAN",
"optionsRich": "Étiquette VLAN (facultatif)"
},
{
"param": "MTU",
"optionsRich": "Taille MTU"
}
],
"zfsCalloutTitle": "ZFS et RAM",
"zfsCalloutBody": "TrueNAS SCALE/CORE et XigmaNAS utilisent ZFS, dont le cache ARC profite de la RAM. TrueNAS nécessite au moins 8 Go pour un usage de base ; 16 Go ou plus peuvent aider pour des services et applications exigeants. Dimensionnez selon la distribution et la charge : 8 Go n’est pas un minimum universel de ZFS. Des configurations légères OMV, Rockstor ou ZimaOS peuvent demander moins."
},
"storagePlan": {
"heading": "Plan de stockage",
"intro": "Après CPU / RAM, ProxMenux ouvre le menu Plan de stockage, où vous pouvez combiner des disques virtuels, des disques importés et des périphériques PCI passants dans le même VM, ajoutant des éléments un à la fois et finissant lorsque vous avez terminé.",
"virtualHeading": "a. Ajouter un disque virtuel",
"virtualItemsRich": [
"Liste les volumes de stockage Proxmox disponibles sur l'hôte.",
"Vous choisissez le stockage cible et la taille en GB.",
"Le disque utilise le bus choisi : SCSI (par défaut), SATA, VirtIO ou IDE (ZimaOS : SCSI ou SATA). SATA offre six emplacements numérotés de 0 à 5 : <code>sata0</code>, <code>sata1</code>, …."
],
"importHeading": "b. Ajouter un disque d'importation",
"importItemsRich": [
"Détecte les disques physiques qui sont sûrs à importer (le système et les disques protégés sont cachés).",
"Vous sélectionnez un ou plusieurs disques via une liste de contrôle.",
"Les disques importés utilisent le bus choisi et sont connectés par <code>qm set</code>."
],
"pciHeading": "c. Ajouter un contrôleur ou NVMe (passthrough PCI)",
"pciItemsRich": [
"Détecte les appareils HBA SATA/SAS et NVMe sur l'hôte et vous permet de passer un contrôleur <em>entier</em> dans le VM. IOMMU doit être activé ; le script offre de l'activer et de redémarrer si nécessaire.",
"Une étape de confirmation met en garde contre le risque à l'échelle du contrôleur (la carte entière, y compris chaque disque sur elle, quitte l'hôte).",
"Les périphériques PCI sont affectés avec des commandes comme <code>qm set VMID --hostpci0 PCI_ADDRESS,pcie=1</code>. Remplacez VMID et PCI_ADDRESS par l’ID de VM et l’adresse PCI, et utilisez un indice hostpci libre pour chaque périphérique."
],
"resetCalloutTitle": "Réinitialiser et terminer",
"resetCalloutBodyRich": "Le menu offre également <strong>r</strong> (réinitialiser la sélection actuelle et recommencer) et <strong>d</strong> (finir et poursuivre). Vous ne pouvez pas finir avec un plan vide."
},
"gpu": {
"heading": "Passage facultatif de GPU",
"bodyRich": "Après le plan de stockage, si un GPU compatible est détecté sur l'hôte, ProxMenux propose de lancer l'assistant de passage GPU. Voir <link>Ajouter GPU à un VM (Passthrough)</link> pour savoir comment fonctionne l'assistant — un redémarrage d'hôte peut être nécessaire."
},
"autoFeatures": {
"heading": "Fonctions automatiques VM",
"efiTitle": "disque EFI",
"efiBody": "Lorsque OVMF (UEFI) est sélectionné, ProxMenux crée automatiquement un disque EFI 4 MB sur le stockage que vous choisissez, formaté pour correspondre au type de stockage (raw pour le stockage par répertoire).",
"isoTitle": "Montage ISO",
"isoBodyRich": "L'installation ISO est téléchargée (si nécessaire) et fixée à <code>ide2</code> sous forme de CD-ROM, prêt pour le premier démarrage.",
"guestTitle": "QEMU Agent invité",
"guestBody": "Le canal d'agent invité est activé dans la configuration VM. Vous devez toujours installer l'agent à l'intérieur de l'invité après la mise en place du NAS OS."
},
"endToEnd": {
"heading": "Ce que fait le script de bout en bout",
"itemsRich": [
"Détecte et télécharge la dernière ISO stable, ou utilise une version de secours si le projet d’origine est inaccessible.",
"Applique les réglages par défaut ou avancés de CPU, RAM, BIOS et type de machine.",
"Ouvre le plan de stockage et fixe les disques virtuels sélectionnés, les disques importés et les périphériques PCI.",
"Crée un disque EFI si UEFI est sélectionné.",
"Monte l'installation ISO sur <code>ide2</code>.",
"Définit l'ordre de démarrage (disque d'abord, puis ISO).",
"Active le canal QEMU Guest Agent.",
"En option, exécute l'assistant de passage GPU.",
"Génère une description HTML de style jointe au VM.",
"Démarre le VM si vous le souhaitez."
]
},
"perSystem": {
"heading": "Notes par système",
"shellLabel": "Interface Shell",
"webLabel": "Interface Web"
},
"systems": {
"truenasScale": {
"id": "truenas-scale",
"title": "TrueNAS SCALE",
"icon": "Database",
"officialName": "TrueNAS SCALE",
"officialUrl": "https://www.truenas.com/truenas-scale/",
"description": "TrueNAS basé sur Debian avec des applications Docker dans les versions actuelles, Linux KVM et ZFS comme système de fichiers principal. Les anciennes versions SCALE utilisaient Kubernetes. Il associe stockage ZFS et écosystème de conteneurs.",
"specs": [
"Interface conseillée : SATA ou SCSI, avec prise en charge de discard/TRIM",
"Minimum RAM: 8 GB (16 GB+ recommandé pour les charges de travail réelles)",
"Cœurs CPU minimum : 2 (4 ou plus conseillés)",
"Démarrage UEFI (OVMF) recommandé",
"Adaptateur réseau VirtIO pour le meilleur débit"
],
"shellImg": "/vm/truenas/truenas-scale-shell.png",
"webImg": "/vm/truenas/truenas-scale-web.png",
"shellAlt": "Interface shell SCALE TrueNAS",
"webAlt": "TrueNAS Interface web SCALE"
},
"truenasCore": {
"id": "truenas-core",
"title": "TrueNAS CORE",
"icon": "Database",
"officialName": "TrueNAS CORE",
"officialUrl": "https://www.truenas.com/truenas-core/",
"description": "TrueNAS basé sur FreeBSD, anciennement FreeNAS, axé sur ZFS. Les jails, plugins et fonctions de virtualisation de CORE 13.3 sont obsolètes et non pris en charge ; le développement se concentre sur les éditions Linux.",
"specs": [
"Interface recommandée: SATA",
"Minimum RAM: 8 GB (16 GB+ recommandé)",
"Cœurs CPU minimum : 2 (4 ou plus conseillés)",
"Démarrage UEFI (OVMF) recommandé",
"Adaptateur réseau VirtIO pour le meilleur débit"
],
"shellImg": "/vm/truenas/truenas-core-shell.png",
"webImg": "/vm/truenas/truenas-core-web.png",
"shellAlt": "Interface shell TrueNAS CORE",
"webAlt": "TrueNAS Interface web CORE"
},
"openmediavault": {
"id": "openmediavault",
"title": "OpenMediaVault",
"icon": "Server",
"officialName": "openmediavault.org",
"officialUrl": "https://www.openmediavault.org",
"description": "NAS basé sur Debian avec plugins modulaires. Peu gourmand et facile à utiliser sur un matériel modeste lorsque ZFS n’est pas nécessaire.",
"specs": [
"Interface recommandée: SATA ou VirtIO",
"Minimum RAM: 2 GB (4 GB+ recommandé)",
"Cœurs CPU minimum : 1 (2 ou plus conseillés)",
"BIOS: ProxMenux par défaut vers SeaBIOS pour OMV (surpasser en Advanced si nécessaire)",
"Adaptateur réseau VirtIO pour le meilleur débit"
],
"shellImg": "/vm/openmediavault/openmediavault-shell.png",
"webImg": "/vm/openmediavault/openmediavault-web.png",
"shellAlt": "Interface shell OpenMediaVault",
"webAlt": "Interface web OpenMediaVault"
},
"xigmanas": {
"id": "xigmanas",
"title": "XigmaNAS",
"icon": "Database",
"officialName": "xigmanas.com",
"officialUrl": "https://www.xigmanas.com",
"description": "NAS basé sur FreeBSD — la continuation directe de la base de codes FreeNAS originale (0.7). Concentré sur ZFS et la simplicité, avec une empreinte plus légère que TrueNAS.",
"specs": [
"Interface recommandée: SATA ou SCSI",
"Minimum RAM: 4 GB (8 GB+ recommandé pour ZFS)",
"Noyaux minimum CPU: 2",
"Démarrage UEFI (OVMF) recommandé",
"Adaptateur réseau VirtIO pour le meilleur débit"
]
},
"rockstor": {
"id": "rockstor",
"title": "Rockstor",
"icon": "HardDrive",
"officialName": "rockstor.com",
"officialUrl": "https://rockstor.com",
"description": "openSUSE Leap-based NAS construit autour de Btrfs. Snapshots, sous-volumes et le framework de l'application Rock-ons (Docker) pour les médias, le partage de fichiers et la sauvegarde.",
"specs": [
"Interface recommandée: SATA ou VirtIO",
"Minimum RAM: 2 GB (4 GB+ recommandé)",
"Noyaux minimum CPU: 2",
"Démarrage UEFI (OVMF) recommandé",
"Adaptateur réseau VirtIO pour le meilleur débit"
],
"shellImg": "/vm/rockstor/rockstor-shell.png",
"webImg": "/vm/rockstor/rockstor-web.png",
"shellAlt": "Interface shell Rockstor",
"webAlt": "Interface web Rockstor"
},
"zimaos": {
"id": "zimaos",
"title": "ZimaOS",
"icon": "MonitorIcon",
"officialName": "zimaspace.com",
"officialUrl": "https://www.zimaspace.com/zimaos",
"description": "Système NAS/serveur domestique léger construit avec Buildroot, issu de CasaOS, pour les médias, applications Docker et domotique. Son installateur ProxMenux dédié (vm/zimaos.sh) télécharge une image prête et propose les réglages CPU, RAM et stockage.",
"specs": [
"Interface recommandée: SATA ou VirtIO",
"RAM par défaut : 4 Go, pour médias et applications auto-hébergées",
"Noyaux minimum CPU: 2",
"Démarrage UEFI (OVMF)",
"Adaptateur réseau VirtIO pour le meilleur débit"
]
},
"fygoos": {
"id": "fygoos",
"title": "FygoOS",
"icon": "Server",
"officialName": "fygonas.com",
"officialUrl": "https://fygonas.com",
"description": "Édition internationale de fnOS, un NAS basé sur Debian. ProxMenux télécharge le dernier installateur ISO publié sur fygonas.com et le monte dans le VM. L'installateur met le système sur un disque; l'espace laissé sur ce disque peut contenir des volumes pour les applications et les fichiers. Après l'installation, la console affiche l'adresse de l'interface web, sur le port 5666 (le port 80 redirige vers elle): ouvrez-le dans un navigateur pour nommer l'appareil et créer le compte administrateur.",
"specs": [
"Disque système: FygoOS propose une partition système 64 GB, qui peut être plus petite dans un VM",
"Installation : Graphical Install, ou Rescuing Install si le mode graphique échoue",
"Démarrage UEFI (OVMF) sans clés Secure Boot, comme l’exige l’installateur",
"Réseau: Ethernet avec DHCP par défaut",
"Adaptateur réseau VirtIO pour le meilleur débit"
]
}
},
"related": {
"heading": "Voir aussi",
"itemsRich": [
{
"href": "/docs/create-vm/system-nas",
"label": "Aperçu du NAS système",
"tail": "— comparaison rapide entre toutes les options du NAS."
},
{
"href": "/docs/create-vm/system-nas/synology",
"label": "VM Synology",
"tail": " — procédure Synology DSM (Xpenology)."
},
{
"href": "/docs/disk-manager/import-disk-vm",
"label": "Importer le disque vers la VM",
"tail": "— recommandé pour les cas d'utilisation du NAS (vrais disques > disques virtuels)."
},
{
"href": "/docs/help-info/zfs-commands",
"label": "Commandes de gestion ZFS",
"tail": "— si vous choisissez TrueNAS ou une autre distribution appuyée par ZFS."
},
{
"href": "/docs/create-vm",
"label": "Vue d’ensemble de la création de VM",
"tail": "."
}
]
}
}
@@ -0,0 +1,259 @@
{
"meta": {
"title": "Créer une VM : système Windows | Documentation ProxMenux",
"description": "Créez et configurez des machines virtuelles Windows sur Proxmox VE avec ProxMenux. ISO via UUP Dump ou fichier local, configuration par défaut ou avancée, plan de stockage commun, passthrough GPU facultatif, TPM 2.0 et installation des pilotes VirtIO.",
"ogTitle": "Créer une VM : système Windows | Documentation ProxMenux",
"ogDescription": "Créez des VM Windows sur Proxmox VE avec ProxMenux : UUP Dump ou ISO locale, plan de stockage commun, passthrough GPU facultatif, TPM 2.0 et pilotes VirtIO.",
"ogImageAlt": "Menu ProxMenux Windows VM"
},
"header": {
"title": "Créer une VM : système Windows",
"description": "Créez une VM Windows sur Proxmox VE. ProxMenux gère le choix de l’ISO (UUP Dump ou locale), CPU, RAM, type de machine, plan de stockage commun, passthrough GPU facultatif, TPM 2.0 et installation des pilotes VirtIO.",
"section": "Machines virtuelles"
},
"intro": {
"title": "Ce que ce script fait",
"body": "Le parcours Windows demande la source de l’ISO : UUP Dump ou copie locale dans <code>/var/lib/vz/template/iso</code>. L’assistant VM commun utilise ensuite les réglages Windows : <code>q35</code>, OVMF et TPM 2.0. L’ISO des pilotes VirtIO est connectée comme second CD-ROM ; la VM est prête à lancer l’installateur Windows."
},
"image": {
"alt": "Options d'installation de ProxMenux Windows",
"caption": "Options d'installation de Windows"
},
"config": {
"heading": "Configuration par défaut vs Configuration avancée",
"intro": "Une fois l'ISO sélectionné, ProxMenux demande s'il faut utiliser le profil VM par défaut ou ouvrir l'assistant avancé. Le profil par défaut est accordé pour les éditions de bureau et de serveur Windows modernes.",
"defaultHeading": "Configuration par défaut",
"headerParam": "Paramètre",
"headerValue": "Valeur par défaut",
"defaultRows": [
{
"param": "Type de machine",
"valueRich": "<code>q35</code>"
},
{
"param": "BIOS",
"value": "OVMF (UEFI)"
},
{
"param": "Type CPU",
"value": "Host"
},
{
"param": "Cœurs",
"value": "4"
},
{
"param": "RAM",
"value": "8192 MB"
},
{
"param": "Pont",
"valueRich": "<code>vmbr0</code>"
},
{
"param": "Adresse MAC",
"value": "Généré automatiquement"
},
{
"param": "TPM",
"value": "Activé (v2.0)"
},
{
"param": "Démarrer à la fin",
"value": "Non"
}
],
"advancedHeading": "Configuration avancée",
"advancedIntro": "L’assistant avancé présente chaque paramètre séparément :",
"headerOptions": "Possibilités",
"advancedRows": [
{
"param": "Type de machine",
"optionsRich": "<code>q35</code> ou <code>i440fx</code>"
},
{
"param": "BIOS",
"options": "OVMF (UEFI) ou SeaBIOS (Légacy)"
},
{
"param": "Type CPU",
"options": "Host, KVM64 et autres modèles CPU proposés"
},
{
"param": "Cœurs",
"options": "Nombre de cœurs CPU"
},
{
"param": "RAM",
"options": "Mémoire attribuée à la VM"
},
{
"param": "Pont",
"options": "Pont réseau"
},
{
"param": "Adresse MAC",
"options": "MAC personnalisée"
},
{
"param": "VLAN",
"options": "Étiquette VLAN (facultatif)"
},
{
"param": "MTU",
"options": "Taille MTU"
},
{
"param": "TPM",
"options": "TPM 2.0 est ajouté automatiquement pour Windows ; cet assistant ne permet pas de le désactiver."
}
],
"tpmWarnTitle": "Les exigences TPM dépendent de l’édition Windows",
"tpmWarnBody": "Windows 11 nécessite normalement TPM 2.0. Windows Server 2022 l’exige pour certaines fonctions de sécurité, pas pour toutes les installations. ProxMenux ajoute un TPM virtuel pour Windows ; l’assistant avancé ne propose pas de réglage pour le désactiver."
},
"storagePlan": {
"heading": "Plan de stockage",
"body": "Après CPU / RAM, ProxMenux ouvre le menu <strong>Plan de stockage</strong>, où vous pouvez combiner des disques virtuels, des disques importés et des périphériques PCI passants dans le même VM, ajoutant des éléments un à la fois et finissant lorsque vous avez terminé.",
"virtualDiskTitle": "a. Ajouter un disque virtuel",
"virtualDiskItems": [
"Liste les volumes de stockage Proxmox disponibles sur l'hôte.",
"Vous choisissez le stockage cible et la taille en GB.",
"Le disque utilise le bus choisi : SCSI (par défaut), SATA, VirtIO ou IDE. SATA offre six emplacements numérotés de 0 à 5 : <code>sata0</code>, <code>sata1</code>, …."
],
"importDiskTitle": "b. Ajouter un disque d'importation",
"importDiskItems": [
"Détecte les disques physiques qui sont sûrs à importer (le système et les disques protégés sont cachés).",
"Vous sélectionnez un ou plusieurs disques via une liste de contrôle.",
"Les disques importés utilisent le bus choisi et sont connectés par <code>qm set</code>."
],
"pciTitle": "c. Ajouter un contrôleur ou NVMe (passthrough PCI)",
"pciItems": [
"Détecte les appareils HBA SATA/SAS et NVMe sur l'hôte et vous permet de passer un contrôleur <em>entier</em> dans le VM. IOMMU doit être activé ; le script offre de l'activer et de redémarrer si nécessaire.",
"Une étape de confirmation met en garde contre le risque à l'échelle du contrôleur (la carte entière, y compris chaque disque sur elle, quitte l'hôte).",
"Les périphériques PCI sont affectés avec des commandes comme <code>qm set VMID --hostpci0 PCI_ADDRESS,pcie=1</code>. Remplacez VMID et PCI_ADDRESS par l’ID de VM et l’adresse PCI, et utilisez un indice hostpci libre pour chaque périphérique."
],
"resetTitle": "Réinitialiser et terminer",
"resetBody": "Le menu offre également <strong>r</strong> (réinitialiser la sélection actuelle et recommencer) et <strong>d</strong> (finir et poursuivre). Vous ne pouvez pas finir avec un plan vide."
},
"gpu": {
"heading": "Passage facultatif de GPU",
"body": "Après le plan de stockage, si un GPU compatible est détecté sur l'hôte ProxMenux offre de lancer l'assistant de passage GPU. Voir <gpuLink>Ajouter GPU à un VM (Passthrough)</gpuLink> pour savoir comment fonctionne l'assistant — un redémarrage d'hôte peut être nécessaire."
},
"autoFeatures": {
"heading": "Fonctions automatiques VM",
"efiTitle": "disque EFI",
"efiBody": "Lorsque OVMF (UEFI) est sélectionné, ProxMenux crée un disque système EFI 4 MB sur le stockage que vous choisissez et le fixe au VM de sorte que le firmware UEFI a un endroit pour stocker ses variables.",
"tpmTitle": "TPM 2.0",
"tpmBody": "ProxMenux ajoute un TPM 2.0 virtuel aux VM Windows. Il satisfait l’exigence TPM de Windows 11 et permet les fonctions Windows Server qui dépendent de TPM.",
"isoTitle": "Montage ISO",
"isoBody": "L’ISO d’installation est connectée à <code>ide2</code>. L’ISO des pilotes VirtIO est téléchargée si nécessaire et connectée à <code>ide3</code> pour l’étape <em>Charger un pilote</em>.",
"guestTitle": "QEMU Agent invité",
"guestBody": "Le canal d'agent invité est activé dans la configuration VM. L'agent lui-même est installé dans Windows en exécutant <code>virtio-win-guest-tools.exe</code> après configuration."
},
"installOptions": {
"heading": "Options d'installation de Windows",
"intro": "ProxMenux propose deux méthodes pour obtenir les supports d'installation Windows:",
"uupTitle": "Créateur d’ISO UUP Dump",
"uupLogoAlt": "Logo UUP Dump",
"uupBody": "Le script <strong>UUP Dump ISO Creator</strong> est un utilitaire ProxMenux qui crée une ISO Windows à la demande à partir des serveurs Windows Update de Microsoft. Il récupère les fichiers d’installation officiels, y compris les versions Insider Preview.",
"uupItems": [
"Accès aux dernières versions Windows.",
"Prend en charge les versions d'Insider Preview.",
"Fichiers d’installation Microsoft officiels et non modifiés.",
"Création et montage automatique ISO dans le VM.",
"Supporte les éditions Home, Pro et Enterprise."
],
"uupLearnMore": "En savoir plus sur UUP Dump ISO Creator",
"localTitle": "Installation avec ISO local",
"localBody": "Utilise une ISO Windows que vous avez déjà téléchargée sur le stockage local de l'hôte (<code>/var/lib/vz/template/iso</code>). Le script liste chaque ISO non-VirtIO qu'il trouve et vous permet de le choisir.",
"localImageAlt": "Menu local de sélection ISO",
"localImageCaption": "Menu local de sélection ISO"
},
"endToEnd": {
"heading": "Ce que fait le script de bout en bout",
"items": [
"Obtient l'ISO Windows (UUP Dump build ou copie locale).",
"Applique la configuration par défaut ou avancée CPU / RAM / BIOS / type machine.",
"Ouvre le plan de stockage et fixe les disques virtuels sélectionnés, les disques importés et les périphériques PCI.",
"Crée le disque EFI pour les installations UEFI et connecte le TPM 2.0.",
"Monte l'ISO Windows sur <code>ide2</code>.",
"Télécharge l’ISO des pilotes VirtIO et la monte sur <code>ide3</code>.",
"Définit l'ordre de démarrage (disque d'abord, puis ISO).",
"Active le canal QEMU Guest Agent.",
"En option, exécute l'assistant de passage GPU.",
"Génère une description HTML de style jointe au VM.",
"Démarre la VM si vous l’avez choisi."
]
},
"virtio": {
"heading": "Pilotes VirtIO pendant l'installation",
"body": "Le créateur de VM utilise par défaut des disques SCSI avec contrôleur VirtIO SCSI et un adaptateur réseau VirtIO. Une ISO Windows standard peut nécessiter leurs pilotes depuis l’ISO VirtIO montée sur <code>ide3</code>. Les disques SATA fonctionnent généralement avec les pilotes Windows intégrés ; choisir SATA ne change pas l’adaptateur réseau VirtIO.",
"warnTitle": "Chargez le pilote réseau VirtIO si Windows n’a pas de réseau",
"warnBody": "La VM utilise un adaptateur réseau VirtIO (<code>virtio</code>). Si Windows ne contient pas son pilote, chargez-le pendant l’installation pour accéder au réseau. Sinon, l’activation et Windows Update peuvent être indisponibles au premier démarrage.",
"stepLabel": "Étape",
"steps": [
{
"title": "Accédez à l'écran \"Où voulez-vous installer Windows?\"",
"body": "Lors de la configuration de Windows, si aucun disque n'est affiché, le pilote de stockage de votre interface sélectionnée (SCSI ou VirtIO) n'est pas encore chargé. Chargez-le manuellement depuis l'ISO VirtIO monté.",
"img": "/vm/windows/virtio-step-1.png",
"caption": "Configuration Windows sans disque affiché"
},
{
"title": "Cliquez sur « Charger un pilote »",
"bodyRich": "Cliquez sur <strong>Load driver</strong> pour parcourir le VirtIO ISO monté et choisir le pilote de stockage qui correspond à l'interface que vous avez choisie.",
"img": "/vm/windows/virtio-step-2.png",
"caption": "Cliquez sur Charger le pilote pour parcourir l'ISO VirtIO"
},
{
"title": "Parcourir dans le dossier du pilote correct",
"bodyRich": "Sur l’ISO VirtIO, choisissez <code>vioscsi</code> pour le contrôleur VirtIO SCSI ou <code>viostor</code> pour les disques blocs VirtIO. Choisissez ensuite le sous-dossier de votre version Windows et de votre architecture.",
"img": "/vm/windows/virtio-step-3.png",
"caption": "Parcourir dans le dossier du pilote approprié"
},
{
"title": "Sélectionnez le pilote",
"bodyRich": "Windows liste les pilotes disponibles. Choisissez celui qui correspond à votre configuration (généralement <strong>Red Hat VirtIO contrôleur SCSI</strong>) et cliquez sur <strong>Suivant</strong>.",
"img": "/vm/windows/virtio-step-4.png",
"caption": "Sélectionnez le pilote VirtIO qui correspond à votre interface disque"
},
{
"title": "(Facultatif) Installez le pilote réseau",
"bodyRich": "Si vous avez également choisi VirtIO comme interface réseau, chargez le pilote réseau dans le dossier <code>NetKVM</code> de la même ISO, en sélectionnant le sous-dossier pour votre version Windows. Sans cette étape, Windows s'installe sans accès à Internet.",
"img": "/vm/windows/virtio-step-5.png",
"caption": "Charger le pilote réseau VirtIO pour activer Internet pendant l'installation"
}
],
"tipTitle": "Après l’installation : exécuter virtio-win-guest-tools.exe",
"tipBody": "Après l’installation de Windows, ouvrez l’ISO VirtIO dans l’Explorateur de fichiers et lancez <code>virtio-win-guest-tools.exe</code>. Il installe les pilotes restants (réseau, affichage, entrée, ballooning) et l’agent invité QEMU en une seule opération."
},
"related": {
"heading": "Voir aussi",
"items": [
{
"href": "/docs/utils/UUp-Dump-ISO-Creator",
"label": "Créateur d’ISO UUP Dump",
"tail": "— générer des ISO d'installation Windows à jour sur l'hôte Proxmox."
},
{
"href": "/docs/disk-manager/import-disk-image-vm",
"label": "Importer l'image disque vers la VM",
"tail": " — importer une image disque Windows existante (.vmdk, .qcow2, .img ou .raw) dans une VM existante ; convertir d’abord les images .vhdx dans un format pris en charge."
},
{
"href": "/docs/hardware/gpu-vm-passthrough",
"label": "Ajouter GPU à VM (Passthrough)",
"tail": "— pour Windows VMs avec GPU accéléré matériellement."
},
{
"href": "/docs/help-info/vm-ct-commands",
"label": "Commandes de gestion VM et CT",
"tail": "— qm CLI référence."
},
{
"href": "/docs/create-vm",
"label": "Vue d’ensemble de la création de VM",
"tail": "."
}
]
}
}
@@ -0,0 +1,128 @@
{
"meta": {
"title": "Ajouter un contrôleur ou un NVMe à une VM | Documentation ProxMenux",
"description": "Attribuez un contrôleur de stockage SATA/SAS HBA ou un périphérique NVMe à une VM Proxmox par passthrough PCI avec ProxMenux. L’outil gère l’activation d’IOMMU, la détection des conflits et l’affectation avec qm set --hostpci.",
"ogTitle": "Ajouter un contrôleur ou un NVMe à une VM | Documentation ProxMenux",
"ogDescription": "Attribuez un HBA SATA/SAS complet ou un périphérique NVMe à une VM Proxmox. ProxMenux gère IOMMU, la détection des conflits et l’affectation hostpci."
},
"header": {
"title": "Ajouter un contrôleur ou un NVMe à une VM",
"description": "Attribuez un adaptateur de bus SATA/SAS (HBA) complet ou un périphérique NVMe à une VM Proxmox par passthrough PCI. ProxMenux vérifie IOMMU et l’active avec votre accord, recense les périphériques compatibles, écarte les conflits et configure l’affectation avec qm set --hostpci.",
"section": "Gestionnaire de disque · VM"
},
"intro": {
"title": "Ce que cela fait (et ne fait pas)",
"body": "Il s’agit d’un <strong>passthrough au niveau du périphérique</strong> : la carte PCIe quitte le contrôle du noyau de l’hôte et est liée à <code>vfio-pci</code>. La VM voit le contrôleur lui-même, au lieu de disques transmis individuellement, et charge son propre pilote pour ce modèle précis. Tous les disques qui y sont raccordés suivent automatiquement, avec les données SMART natives, toutes les fonctions du firmware et aucune couche Proxmox intermédiaire."
},
"howRuns": {
"heading": "Comment fonctionne le script",
"body": "Le flux a deux phases avec une séparation claire entre \"collecter l'information, vérifier IOMMU et lister les candidats\" et \"en fait fixer l'appareil PCI\". Jusqu'à la confirmation finale rien n'est écrit à la config VM."
},
"iommu": {
"heading": "Les groupes IOMMU — pourquoi la carte entière part à la fois",
"body": "La limite d’isolation du passthrough PCI est le <strong>groupe IOMMU</strong>, la plus petite unité que l’IOMMU du CPU peut isoler. Les périphériques d’un même groupe ne peuvent pas être isolés les uns des autres. Si un contrôleur SATA partage son groupe avec un contrôleur USB, le passthrough SATA peut exiger de libérer aussi l’USB de l’hôte, ou être impossible. Il n’attribue pas automatiquement tous les périphériques du groupe à la VM.",
"outro": "ProxMenux montre le groupe IOMMU à côté de chaque appareil et vous avertit lorsqu'un groupe porte plus que le contrôleur que vous voulez. Vous pouvez toujours procéder si les périphériques supplémentaires du groupe sont acceptables (tous les contrôleurs de disque, par exemple), ou revenir en arrière s'ils ne le sont pas."
},
"prereqs": {
"heading": "Préalables",
"items": [
"<strong>Le CPU et la carte mère prennent en charge</strong> VT-d (Intel) ou AMD-Vi, et la fonction est activée dans le firmware (BIOS/UEFI). ProxMenux peut activer la partie noyau, mais ne peut pas modifier le réglage du firmware.",
"La VM cible est <strong>éteinte</strong> avant l’affectation de périphériques PCI.",
"Le contrôleur/NVMe <strong> n'est pas celui qui détient le système de fichiers racine Proxmox</strong>. Le script cache tout ce qui est utilisé par l'hôte.",
"Le système invité dispose des pilotes du contrôleur. Linux prend en charge presque tous les HBA sans ajout de pilote ; sous Windows, le pilote du fabricant doit être installé <em>avant</em> le démarrage avec le contrôleur affecté."
],
"warnTitle": "La migration à chaud est impossible",
"warnBody": "Un VM avec PCI passethrough est lié au noeud qui détient physiquement la carte. La migration en direct à travers les nœuds échouera. Planifiez les sauvegardes / réplication en conséquence."
},
"steps": {
"heading": "Étape par étape",
"stepLabel": "Étape",
"list": [
{
"title": "Choisir la VM cible",
"bodyRich": "ProxMenux lit <code>qm list</code> et affiche chaque VM. Choisissez celui qui recevra le contrôleur.",
"img": "/disk/nvme-passthrough/vm-selection.png",
"alt": "Boîte de dialogue de sélection VM",
"caption": "Boîte de dialogue de sélection VM"
},
{
"title": "Vérification IOMMU",
"bodyRich": "Si IOMMU n’est pas activé dans la ligne de commande du noyau, ProxMenux propose de l’activer. Il modifie <code>/etc/kernel/cmdline</code> pour systemd-boot ou <code>/etc/default/grub</code> pour GRUB et ajoute le paramètre adapté au CPU :",
"items": [
"<code>intel_iommu=on</code> pour les processeurs Intel.",
"<code>amd_iommu=on</code> pour processeurs AMD."
],
"outro": "Un redémarrage est nécessaire après cette modification. Le script propose de redémarrer maintenant ou plus tard ; le passthrough ne peut continuer que lorsque la nouvelle ligne de commande du noyau est active.",
"img": "/disk/nvme-passthrough/iommu-warning.png",
"alt": "Boîte de dialogue IOMMU requis",
"caption": "IOMMU requis : proposition d’activation et de redémarrage"
},
{
"title": "Énumération du périphérique",
"body": "ProxMenux liste tous les contrôleurs de stockage (SATA / SAS HBA) et tous les périphériques NVMe du bus PCI. Pour chaque appareil, il affiche :",
"items": [
"Adresse PCI (<code>00:17.0</code>, <code>01:00.0</code>, ...).",
"Description du fournisseur / de l'appareil.",
"Groupe IOMMU, avec un avertissement ⚠ s’il est partagé avec d’autres périphériques sans rapport.",
"Les disques actuellement derrière le contrôleur (pour que vous sachiez ce qui va le suivre au VM)."
],
"img": "/disk/nvme-passthrough/device-list.png",
"alt": "Liste des contrôleurs et périphériques NVMe",
"caption": "Liste des contrôleurs et périphériques NVMe avec les groupes IOMMU"
},
{
"title": "Détection des conflits",
"bodyRich": "Le script bloque les périphériques manifestement dangereux : ceux déjà attribués à une autre VM via <code>hostpci</code> dans sa configuration, ceux utilisés par l’hôte comme le contrôleur du disque racine, ou ceux d’un groupe IOMMU dont les autres membres ne peuvent pas être identifiés de façon sûre. Les périphériques admissibles sont proposés à la sélection.",
"img": "/disk/nvme-passthrough/conflict-warning.png",
"alt": "Avertissement de détection des conflits",
"caption": "Détection des conflits — dispositif bloqué avec raison"
},
{
"title": "Affecter et terminer",
"bodyRich": "Pour chaque appareil sélectionné ProxMenux exécute <code>qm set &lt;VMID&gt; --hostpciN &lt;pci-addr&gt;,pcie=1</code>, en choisissant la prochaine fente libre <code>hostpci</code>. Si IOMMU a été activé pendant cette session, on vous rappelle de redémarrer avant de démarrer le VM.",
"img": "/disk/nvme-passthrough/assignment.png",
"alt": "Résumé de l'attribution",
"caption": "Résumé de l’affectation : emplacements hostpciN et adresses PCI attribuées"
}
]
},
"manual": {
"heading": "Équivalent manuel"
},
"troubleshoot": {
"heading": "Dépannage",
"noGroupsTitle": "IOMMU activé, mais aucun groupe dans /sys/kernel/iommu_groups/",
"noGroupsBody": "Redémarrer est nécessaire pour que le noyau cmdline prenne effet. Si les groupes sont encore manquants après le redémarrage, VT-d / AMD-Vi est probablement désactivé dans le firmware — vérifiez la configuration BIOS/UEFI.",
"busyTitle": "La VM ne démarre pas : \"hostpciN: device busy\"",
"busyBody": "Un autre processus utilise encore le périphérique PCI. Les causes courantes sont une VM ayant planté sans le libérer ou le noyau de l’hôte l’ayant repris au dernier démarrage. Exécutez <code>lspci -nnk -s &lt;addr&gt;</code> pour identifier le pilote associé ; il devrait s’agir de <code>vfio-pci</code>. Un redémarrage complet de l’hôte résout généralement le problème.",
"noDisksTitle": "Invité voit le contrôleur mais pas les disques",
"noDisksBody": "Le système invité ne dispose pas du pilote de ce contrôleur. Ce cas est rare sous Linux, mais se présente sous Windows : installez le pilote du fabricant, par exemple LSI/Broadcom pour les anciens HBA SAS, lorsque la carte n’est pas affectée, puis redémarrez avec la carte affectée.",
"sharedTitle": "Le groupe IOMMU contient un périphérique sans rapport",
"sharedBody": "Options : (a) déplacer la carte vers un autre emplacement PCIe pour changer son groupe, (b) activer <em>ACS override</em> dans le noyau pour diviser les groupes (compromis de sécurité : se renseigner avant de l’appliquer), ou (c) choisir une autre carte dans un groupe mieux isolé."
},
"related": {
"heading": "Voir aussi",
"items": [
{
"href": "/docs/disk-manager/import-disk-vm",
"label": "Importer le disque vers la VM",
"tail": "— modèle alternatif: attachez un disque physique via Proxmox sans passage PCIe complet."
},
{
"href": "/docs/hardware/gpu-vm-passthrough",
"label": "Ajouter GPU à VM (Passthrough)",
"tail": "— les mêmes concepts IOMMU/VFIO appliqués à un GPU."
},
{
"href": "/docs/help-info/gpu-commands",
"label": "commandes GPU Passthrough",
"tail": "— Les commandes de vérification IOMMU s'appliquent également au contrôleur / NVMe passant."
},
{
"href": "/docs/disk-manager",
"label": "Aperçu du gestionnaire de disque",
"tail": "."
}
]
}
}
@@ -0,0 +1,142 @@
{
"meta": {
"title": "Formater ou effacer un disque physique | Documentation ProxMenux",
"description": "Effacez et formatez les disques physiques sur Proxmox VE avec ProxMenux. Quatre modes, des filtres stricts excluant les disques système, montés ou utilisés, et une double confirmation avec saisie du chemin complet.",
"ogTitle": "Formater ou effacer un disque physique | Documentation ProxMenux",
"ogDescription": "Effacez ou formatez un disque physique sur Proxmox. Filtres de sécurité, quatre modes et double confirmation."
},
"header": {
"title": "Formater ou effacer un disque physique",
"description": "Effacez ou formatez un disque physique sur l’hôte Proxmox. ProxMenux ne montre que les disques entièrement libres : aucun usage par le système, aucune référence dans les invités et aucun montage. Il impose une double confirmation, oui/non puis saisie du chemin complet du disque, avant toute destruction de données.",
"section": "Gestionnaire de disques · Utilitaires"
},
"danger": {
"title": "Outil destructif",
"body": "Chaque opération ici écrit sur le disque. Il n'y a pas d'annulation. ProxMenux applique des filtres de sécurité stricts et des confirmations, mais la responsabilité de choisir le bon disque est à vous. Lisez le chemin du disque deux fois avant de le taper."
},
"howRuns": {
"heading": "Comment fonctionne le script",
"body": "Le processus comporte deux phases séparées par un filtre de sécurité à trois contrôles. La première recueille le choix du disque, le mode et les détails du système de fichiers. Aucune écriture n’a lieu avant la validation finale de la seconde phase, juste avant l’exécution."
},
"visibility": {
"heading": "Règles de visibilité",
"intro": "Avant même que le menu apparaisse, ProxMenux filtre la liste des disques. Seuls les candidats qui sont en sécurité sont présentés :",
"items": [
"<strong>Affichés</strong> : les disques <em>non</em> utilisés par l’hôte (pool racine, swap, montages, ZFS/LVM/RAID actifs) et <em>non</em> référencés dans une configuration VM/LXC, que l’invité soit démarré ou arrêté.",
"<strong>Masqués</strong> : disques de l’hôte et du système.",
"<strong>Masqués</strong> : disques référencés dans une configuration VM/LXC."
],
"safetyTitle": "Sécurité lors de la confirmation et de l'exécution",
"safetyItems": [
"Les disques contenant des métadonnées anciennes ou actives déclenchent des avertissements détaillés <em>avant</em> la confirmation.",
"Les disques utilisés par une VM <strong>en cours d’exécution</strong> sont <strong>strictement bloqués</strong> à la confirmation.",
"Les disques comportant des partitions montées sont <strong>strictement bloqués</strong> à l’exécution. Une nouvelle validation a lieu juste avant toute écriture.",
"Deux confirmations sont toujours nécessaires : un dialogue <em>oui/non</em> et la saisie exacte du chemin complet du disque."
]
},
"modes": {
"heading": "Modes de fonctionnement",
"intro": "Après avoir choisi un disque, vous choisissez l'un des quatre modes. Ils diffèrent dans ce qu'ils détruisent et ce qu'ils laissent derrière eux:",
"headerMode": "Mode",
"headerPart": "Table de partitions",
"headerData": "Données",
"headerUseCase": "Cas d'utilisation",
"rows": [
{
"mode": "1. Tout effacer",
"part": "Détruite",
"data": "Signatures effacées",
"useCase": "Supprime la table de partitions et les métadonnées de système de fichiers et RAID, met à zéro les 16 premiers et derniers Mio et, sur les disques qui prennent en charge discard, applique un TRIM à tout le disque. Le reste des données n’est pas écrasé et peut encore être récupérable sur un HDD ; ce n’est pas un effacement sécurisé."
},
{
"mode": "2. Supprimer les étiquettes FS",
"part": "Préservé",
"data": "Préservé",
"useCase": "Supprime les anciennes signatures ZFS / LVM / RAID pour empêcher la prise en charge automatique du disque. Les données utilisateur ne sont pas écrasées en bloc, mais la suppression des signatures peut les rendre inaccessibles."
},
{
"mode": "3. Écraser les données avec des zéros",
"part": "Préservé",
"data": "Détruites (écrasées par des zéros)",
"useCase": "Écraser les partitions existantes avec des zéros en conservant la table de partitions. Les espaces non alloués et les zones de réserve des SSD ne sont pas couverts ; cela ne garantit pas un assainissement complet du périphérique."
},
{
"mode": "4. Format complet",
"part": "Nouvelle GPT",
"data": "Détruite",
"useCase": "Disque prêt à utiliser avec une seule nouvelle partition et un nouveau système de fichiers."
}
],
"fullFormatOutro": "<strong>Format complet</strong> continue avec deux dialogues supplémentaires:",
"fullFormatItems": [
"<strong>Système de fichiers</strong> : <code>ext4</code>, <code>xfs</code>, <code>exfat</code> (portable) ou <code>btrfs</code>. Si un outil manque, par exemple <code>mkfs.btrfs</code>, l’opération s’arrête avec un message explicite.",
"<strong>Étiquette</strong> : nom facultatif du système de fichiers pour l’identifier."
]
},
"steps": {
"heading": "Étape par étape",
"stepLabel": "Étape",
"list": [
{
"title": "Choisir un disque libre",
"body": "ProxMenux liste les disques qui passent les filtres ci-dessus. Ceux marqués ⚠ contiennent d’anciennes métadonnées dont les détails sont affichés pour vous indiquer ce que vous allez écraser."
},
{
"title": "Choisir un mode d'opération",
"bodyRich": "Choisissez <strong>Tout effacer</strong>, <strong>Supprimer les étiquettes FS</strong>, <strong>Écraser les données avec des zéros</strong> ou <strong>Format complet</strong> selon le tableau ci-dessus."
},
{
"title": "(Format complet seulement) Choisir le système de fichiers et l'étiquette",
"body": "ext4 / xfs / exfat / btrfs, plus une étiquette en option."
},
{
"title": "Confirmer deux fois",
"bodyRich": "ProxMenux présente un résumé de ce qui va se passer. Vous acceptez avec une boîte de dialogue oui/non et <strong> tapez le chemin complet du disque</strong> exactement comme indiqué (par exemple <code>/dev/sdc</code>). Tout le reste avorte."
},
{
"title": "Revalidation et exécution",
"body": "Juste avant d'écrire, le script revérifie l'état du disque. Si une partition a été montée ou un VM a commencé dans l'intervalle, l'exécution est interrompue. Sinon, l'opération choisie tourne et un résumé est imprimé à la fin."
}
]
},
"manual": {
"heading": "Équivalents manuels",
"body": "Si vous préférez exécuter les commandes équivalentes à la main :"
},
"troubleshoot": {
"notListedTitle": "Disque non listé dans le menu",
"notListedBody": "Il a été filtré pour la sécurité. Raisons courantes : il est monté (même à <code>/mnt/tmp</code>), il est un membre actif ZFS / LVM / RAID, il est référencé par une config VM ou LXC, ou c'est votre disque racine Proxmox. Exécutez <code>lsblk -f</code> et <code>cat /proc/mdstat</code> sur l'hôte pour comprendre pourquoi.",
"busyTitle": "\"Disk may be busy\" / échec du démontage",
"busyBody": "Quelque chose tient toujours un fichier ouvert sur une partition de ce disque — le plus souvent un conteneur ou un shell dont cwd est à l'intérieur d'un point de montage. Identifiez-le avec <code>lsof | grep /dev/sdX</code> ou <code>fuser -vm /dev/sdX1</code>, arrêtez-le, puis lancez l'outil."
},
"related": {
"heading": "Voir aussi",
"items": [
{
"href": "/docs/disk-manager/smart-disk-test",
"label": "Santé et test du disque SMART",
"tail": "— vérifier un disque avant / après l'essuyage pour confirmer qu'il est sain."
},
{
"href": "/docs/disk-manager/import-disk-vm",
"label": "Importer le disque vers la VM",
"tail": "— passer un disque fraîchement formaté à un VM."
},
{
"href": "/docs/storage-share/host-local-disk",
"label": "Ajouter le disque local comme stockage Proxmox",
"tail": " — enregistrer un disque essuyé comme stockage Proxmox pool."
},
{
"href": "/docs/help-info/storage-commands",
"label": "Commandes de stockage et de disques",
"tail": " — référence de lsblk, blkid et parted."
},
{
"href": "/docs/disk-manager",
"label": "Aperçu du gestionnaire de disque",
"tail": "."
}
]
}
}
@@ -0,0 +1,110 @@
{
"meta": {
"title": "Importer une image disque dans une VM | Documentation ProxMenux",
"description": "Importez un fichier image disque (.img / .qcow2 / .vmdk / .raw) dans une VM Proxmox existante avec ProxMenux. Interface, émulation SSD et option de démarrage par image, avec qm importdisk en arrière-plan.",
"ogTitle": "Importer une image disque dans une VM | Documentation ProxMenux",
"ogDescription": "Importer des images disque .img / .qcow2 / .vmdk / .raw dans un VM existant avec ProxMenux. Utilise qm importdisk sous le capot."
},
"header": {
"title": "Importer l'image disque vers la VM",
"description": "Importer un fichier image disque (.img, .qcow2, .vmdk ou .raw) dans un Proxmox VM existant. ProxMenux recueille toutes les décisions dès le départ — cible VM, stockage Proxmox, répertoire source, interface, émulation SSD, ordre de démarrage — et exécute ensuite qm importdisk pour chaque image sélectionnée.",
"section": "Gestionnaire de disque · VM"
},
"intro": {
"title": "Ce que ça fait",
"body": "Contrairement à <em>Importer le disque vers la VM</em>, qui affecte un disque physique brut, ce processus utilise un <strong>fichier</strong> sur l’hôte, exporté d’un autre hyperviseur, téléchargé comme image cloud ou extrait d’une sauvegarde. Il le convertit en disque de VM Proxmox sur le stockage choisi. L’original est conservé : ProxMenux le copie sans le déplacer."
},
"howRuns": {
"heading": "Comment fonctionne le script",
"body": "Le flux a deux phases. La phase 1 recueille toutes les décisions (VM, stockage, répertoire source, images, options par image) directement via des dialogues. La phase 2 exécute <code>qm importdisk</code> pour chaque image sélectionnée. Jusqu'à ce que la phase 2 commence, rien n'est copié et la configuration VM n'est pas touchée."
},
"prereqs": {
"heading": "Préalables",
"items": [
"Au moins une VM est définie sur l’hôte. La VM cible doit être <strong>éteinte</strong>.",
"Au moins un fichier image d'un format pris en charge dans le répertoire source. Prise en charge: <code>.img</code>, <code>.qcow2</code>, <code>.vmdk</code>, <code>.raw</code>.",
"Assez d'espace libre sur le stockage Proxmox cible pour tenir chaque disque importé.",
"ProxMenux recherche des images dans <code>/var/lib/vz/template/iso</code> par défaut. Vous pouvez le pointer vers n'importe quel autre répertoire de l'hôte quand il le demande."
]
},
"steps": {
"heading": "Étape par étape",
"stepLabel": "Étape",
"list": [
{
"title": "Choisir la VM cible",
"bodyRich": "ProxMenux lit <code>qm list</code> et affiche chaque VM. Choisissez celui qui recevra le ou les disques importés."
},
{
"title": "Choisir le stockage Proxmox",
"bodyRich": "La liste contient chaque stockage qui a le type de contenu <code>images</code> activé. S'il n'y a qu'un seul candidat, il est sélectionné automatiquement et le dialogue est ignoré."
},
{
"title": "Choisir le répertoire source",
"bodyRich": "Choisissez le répertoire par défaut (<code>/var/lib/vz/template/iso</code>) ou saisissez un autre chemin, généralement celui où vous avez téléchargé ou envoyé l’image. Le script refuse les chemins inexistants."
},
{
"title": "Choisissez une ou plusieurs images",
"bodyRich": "Le répertoire est scanné pour les fichiers <code>.img</code> / <code>.qcow2</code> / <code>.vmdk</code> / <code>.raw</code>. Vous pouvez en sélectionner plusieurs à la fois; chacun d'eux passera par les options par image dans la prochaine étape."
},
{
"title": "Options par image",
"intro": "Pour chaque image sélectionnée ProxMenux demande:",
"items": [
"<strong>Interface</strong> — <code>scsi</code> (par défaut), <code>virtio</code>, <code>sata</code> ou <code>ide</code>. Correspond à la façon dont l'invité verra le disque.",
"<strong>Émulation SSD</strong> : proposée uniquement pour les interfaces autres que VirtIO. Ajoute <code>ssd=1</code> pour que l’invité reconnaisse un disque SSD. La prise en charge de discard/TRIM doit être configurée séparément.",
"<strong>Amorçable</strong> : si vous répondez oui, ProxMenux place le disque en tête de l’ordre de démarrage de la VM."
]
},
{
"title": "Importer et connecter",
"bodyRich": "ProxMenux exécute <code>qm importdisk</code> pour chaque image, en convertissant le format si nécessaire. Il connecte le disque au prochain emplacement libre (<code>scsiN</code>, <code>sataN</code>, …) avec les options choisies et met à jour l’ordre de démarrage si un disque a été marqué comme amorçable. La progression s’affiche dans le terminal."
}
]
},
"manual": {
"heading": "Équivalent manuel",
"body": "L’importation d’une seule image correspond à trois commandes <code>qm</code> :",
"warnTitle": "Conversion du format d'image",
"warnBody": "Lorsque le stockage cible ne peut pas contenir le format source nativement (par exemple, le stockage LVM ne peut pas contenir <code>.qcow2</code>), <code>qm importdisk</code> convertit l'image de manière transparente. Cela peut prendre plusieurs minutes pour les images multi-GB; planifier en conséquence et ne pas interrompre le script."
},
"troubleshoot": {
"heading": "Dépannage",
"noImagesTitle": "\"Aucune image disque compatible trouvée\"",
"noImagesBody": "Le script n’a trouvé aucun fichier <code>.img</code>, <code>.qcow2</code>, <code>.vmdk</code> ou <code>.raw</code>. Vérifiez la casse de l’extension, la présence du fichier directement dans le répertoire choisi (les sous-répertoires ne sont pas parcourus) et les droits de lecture de root.",
"slowTitle": "L'importation est lente",
"slowBody": "Les conversions entre VMDK, QCOW2 et raw peuvent être limitées par le CPU et les entrées-sorties. La vitesse dépend des lectures à la source, des écritures à destination et de la décompression éventuelle. Préférez des sources raw ou qcow2 si possible.",
"uefiTitle": "Le disque importé démarre dans le shell UEFI",
"uefiBody": "L’image a été créée pour le mode hérité (SeaBIOS), mais la VM utilise OVMF, ou inversement. Changez le BIOS de la VM dans Proxmox pour correspondre à l’image, ou recréez l’image dans le bon mode avant l’importation."
},
"related": {
"heading": "Voir aussi",
"items": [
{
"href": "/docs/disk-manager/import-disk-vm",
"label": "Importer le disque vers la VM",
"tail": "— même flux mais pour les disques physiques bruts (passthrough)."
},
{
"href": "/docs/utils/import-vm",
"label": "Importer VM de OVA / OVF",
"tail": "— lorsque vous avez un paquet complet VM, pas seulement une image de disque."
},
{
"href": "/docs/utils/UUp-Dump-ISO-Creator",
"label": "Créateur d’ISO UUP Dump",
"tail": "— générer une ISO Windows si vous en avez besoin pour une nouvelle installation."
},
{
"href": "/docs/help-info/storage-commands",
"label": "Commandes de stockage et de disques",
"tail": " — référence de qm importdisk et qemu-img convert."
},
{
"href": "/docs/disk-manager",
"label": "Aperçu du gestionnaire de disque",
"tail": "."
}
]
}
}
@@ -0,0 +1,115 @@
{
"meta": {
"title": "Importer le disque vers LXC | ProxMenux Documentation",
"description": "Joindre un disque physique à un conteneur LXC existant sur Proxmox VE en utilisant ProxMenux. Gestion de la détection de système de fichiers / formatage, point de montage, non privilégié → conversion privilégiée et chemins de périphériques persistants.",
"ogTitle": "Importer le disque vers LXC | ProxMenux Documentation",
"ogDescription": "Connectez un disque physique à un conteneur LXC existant. Gestion du système de fichiers, du point de montage et de la conversion de non privilégié à privilégié."
},
"header": {
"title": "Importer un disque vers LXC",
"description": "Connectez un disque physique à un conteneur LXC existant sur l’hôte Proxmox. ProxMenux détecte les disques libres, propose de les formater avec un système de fichiers pris en charge, puis relie la partition à un point de montage dans le conteneur à l’aide de chemins de périphériques persistants.",
"section": "Gestionnaire de disque · LXC"
},
"intro": {
"title": "Passthrough VM vs Passthrough LXC",
"body": "Ce passthrough LXC <strong>ne fournit pas un périphérique bloc brut</strong>. Le conteneur reçoit un <em>point de montage</em>, c’est-à-dire un répertoire reposant sur une partition choisie sur l’hôte. Contrairement à une VM, il utilise le noyau de l’hôte ; le système de fichiers (ext4/xfs/btrfs) est donc lu et géré par l’hôte Proxmox puis exposé au conteneur."
},
"howRuns": {
"heading": "Comment fonctionne le script",
"body": "Le processus comporte deux phases distinctes : collecte des informations et des choix, puis modification effective de la configuration du conteneur. Rien n’est monté dans le CT avant la confirmation finale.",
"summary": "ProxMenux exclut le disque racine, les disques montés et ceux référencés dans une configuration VM/LXC. Les membres actifs de ZFS/LVM/RAID sont masqués ; les anciennes signatures portent un symbole ⚠ pour pouvoir les effacer avant le formatage."
},
"prereqs": {
"heading": "Préalables",
"items": [
"Au moins un conteneur LXC défini sur l'hôte.",
"Le conteneur est <strong>privilégié</strong>, ou vous acceptez la conversion proposée par le script.",
"Au moins un disque physique non utilisé par l'hôte ou tout autre invité."
],
"warnTitle": "Conteneur privilégié requis",
"warnBody": "Ce script exige un conteneur <strong>privilégié</strong> pour connecter directement le disque. S’il détecte <code>unprivileged: 1</code>, il propose de modifier <code>/etc/pve/lxc/&lt;CTID&gt;.conf</code> sur place. Cela change le modèle de sécurité sans remapper les propriétaires des fichiers existants. Sauvegardez le conteneur et vérifiez les propriétaires avant d’accepter, ou recréez-le en mode privilégié."
},
"steps": {
"heading": "Étape par étape",
"stepLabel": "Étape",
"list": [
{
"title": "Choisir le conteneur cible",
"img": "/disk/select-container.png",
"caption": "Menu de sélection des conteneurs",
"bodyRich": "ProxMenux liste tous les conteneurs LXC de l’hôte (<code>pct list</code>). Choisissez celui qui recevra le disque. S’il est non privilégié, le script propose de le convertir maintenant."
},
{
"title": "Choisir le disque physique",
"img": "/disk/disk-selection-ct.png",
"caption": "Disques libres détectés sur l’hôte, avec ⚠ pour les anciennes métadonnées",
"bodyRich": "Seuls les candidats sûrs sont affichés. Contrairement au processus pour VM, ce script connecte <strong>un disque par exécution</strong>. Relancez-le pour chaque disque supplémentaire."
},
{
"title": "Formater ou réutiliser",
"intro": "Le script inspecte le disque :",
"items": [
"S'il porte déjà un système de fichiers supporté (ext4 / xfs / btrfs), vous pouvez le réutiliser tel quel (les fichiers existants sont conservés).",
"S'il n'a pas de système de fichiers pris en charge, vous êtes offert pour le formater. Choisir ext4 / xfs / btrfs."
]
},
{
"title": "Choisir le point de montage",
"bodyRich": "Tapez le chemin où le conteneur doit voir le disque, par exemple. <code>/mnt/data</code> ou <code>/mnt/disk_passthrough</code>. C'est le chemin <em>dans le conteneur</em> ; l'hôte voit déjà la partition sous <code>/dev/disk/by-id/…</code>."
},
{
"title": "Connecter et vérifier",
"img": "/disk/assignment-ct.png",
"caption": "Attribution à CT",
"bodyRich": "ProxMenux ajoute une nouvelle entrée <code>mpN:</code> à la configuration du conteneur, saute les index déjà utilisés et relise la configuration pour la confirmer. Si le conteneur est en cours d'exécution, le montage est en direct; sinon, il prend effet au prochain départ.",
"extraImg": "/disk/result-point.png",
"extraAlt": "Point de montage créé avec succès",
"extraCaption": "Point de montage créé et vérifié"
}
]
},
"manual": {
"heading": "Équivalent manuel",
"body": "Le script enveloppe <code>pct set</code>. Une invocation directe pour un seul disque ressemble à :"
},
"important": {
"heading": "Considérations importantes",
"items": [
"<strong>Un disque par exécution</strong>. Relancez le script pour chaque disque supplémentaire.",
"Ne connectez <strong>pas</strong> la même partition à plusieurs conteneurs susceptibles de la monter simultanément : les écritures concurrentes corrompent le système de fichiers.",
"<strong>Les anciennes métadonnées</strong> (signature RAID / ZFS / LVM) doivent être effacées manuellement avant que le script ne vous laisse formater, sinon <code>mkfs</code> refuse d'écraser. Utilisez l'outil <wipeLink>Format / Wipe Physical Disk</wipeLink> pour cela."
]
},
"troubleshoot": {
"heading": "Dépannage",
"unprivTitle": "\"Ne peut pas continuer avec un conteneur non privilégié\"",
"unprivBody": "Vous avez refusé la conversion : le script s’est arrêté sans rien modifier. Pour continuer, relancez-le et acceptez : le script arrête le conteneur, sauvegarde sa configuration dans <code>/etc/pve/lxc/&lt;CTID&gt;.conf.bak</code> et remplace <code>unprivileged: 1</code> par <code>unprivileged: 0</code>. Ce changement ne convertit pas à lui seul les UID/GID des fichiers existants ; sauvegardez donc d’abord le conteneur et corrigez les propriétaires, ou restaurez ou recréez-le en mode privilégié.",
"permsTitle": "Les autorisations à l'intérieur du conteneur sont erronées",
"permsBody": "Le montage dans un conteneur privilégié conserve les propriétaires des fichiers existants ; un système de fichiers neuf appartient souvent à <code>root:root</code>. Si le service utilise un autre compte, par exemple <code>www-data</code> pour Nextcloud, vérifiez son UID/GID et ajustez les fichiers nécessaires avec <code>chown</code>/<code>chmod</code>. Ces changements affectent aussi le disque sous-jacent."
},
"related": {
"heading": "Voir aussi",
"items": [
{
"href": "/docs/disk-manager/import-disk-vm",
"label": "Importer le disque vers la VM",
"tail": " — processus équivalent pour les VM."
},
{
"href": "/docs/storage-share/lxc-mount-points",
"label": "Points de montage LXC (hôte ↔ CT)",
"tail": "— partager les répertoires hôtes avec un CT au lieu de fixer un disque entier."
},
{
"href": "/docs/help-info/vm-ct-commands",
"label": "Commandes de gestion VM et CT",
"tail": "— pct config / push / pull reference."
},
{
"href": "/docs/disk-manager",
"label": "Aperçu du gestionnaire de disque",
"tail": "."
}
]
}
}
@@ -0,0 +1,113 @@
{
"meta": {
"title": "Importer le disque vers VM | ProxMenux Documentation",
"description": "Connectez un disque physique à une VM Proxmox existante avec ProxMenux. Détection excluant les disques système, montés, utilisés ou membres actifs ZFS/RAID/LVM, chemins persistants /dev/disk/by-id et interfaces SATA / SCSI / VirtIO / IDE.",
"ogTitle": "Importer le disque vers VM | ProxMenux Documentation",
"ogDescription": "Joindre un disque physique à un Proxmox VM existant. Utilise des chemins de /dev/disk/by-id persistants et prend en charge SATA / SCSI / VirtIO / IDE."
},
"header": {
"title": "Importer le disque vers la VM",
"description": "Joindre un disque physique qui existe déjà sur l'hôte Proxmox à une machine virtuelle existante. ProxMenux détecte les disques libres, vous permet de choisir la cible VM, le type de bus (SATA / SCSI / VirtIO / IDE) et fixe tout en utilisant des chemins de /dev/disk/by-id persistants afin que la cartographie survive aux reboots et aux changements d'ordre des appareils.",
"section": "Gestionnaire de disque · VM"
},
"intro": {
"title": "Ce que ça fait",
"body": "Cette méthode utilise un disque physique brut comme support d’une interface de disque virtuel. L’invité ne reçoit pas automatiquement les données SMART natives ni les fonctions du contrôleur physique ; utilisez le passthrough PCI du contrôleur si elles sont nécessaires. Le disque est connecté via son chemin <code>/dev/disk/by-id/…</code> lorsqu’il existe, pour préserver l’affectation si l’ordre des périphériques change au démarrage ; sinon, <code>/dev/sdX</code> est utilisé."
},
"howRuns": {
"heading": "Comment fonctionne le script",
"body": "Le processus comporte deux phases distinctes : collecte des informations et des choix, puis connexion des disques à la VM. La configuration reste inchangée jusqu’à la confirmation finale.",
"summary": "ProxMenux exclut les candidats non sûrs : disque racine, disques montés sur l’hôte, membres actifs ZFS/LVM/RAID et disques référencés dans une configuration VM/LXC. Ceux comportant d’<em>anciennes</em> métadonnées ZFS/RAID/LVM inutilisées sont marqués ⚠, sans être bloqués."
},
"prereqs": {
"heading": "Préalables",
"items": [
"Au moins un VM défini sur l'hôte (le script envoie directement à <code>qm list</code>).",
"La <strong>VM cible est éteinte</strong>. Si elle fonctionne, le script s’arrête avec un message ; l’ajout à chaud de disques n’est pas pris en charge par ce processus.",
"Au moins un disque physique sur l'hôte qui n'est pas utilisé par l'hôte ou tout autre invité."
]
},
"steps": {
"heading": "Étape par étape",
"stepLabel": "Étape",
"list": [
{
"title": "Choisir la VM cible",
"bodyRich": "ProxMenux liste toutes les VM de l’hôte avec <code>qm list</code>. Choisissez celle qui recevra le disque. Si elle fonctionne, le script s’arrête et demande de l’éteindre d’abord."
},
{
"title": "Choisissez le ou les disques physiques à attacher",
"img": "/disk/disk-selection.png",
"caption": "Disques libres détectés sur l’hôte, avec ⚠ pour les anciennes métadonnées",
"body": "Le script examine les disques de l’hôte et ne propose que ceux pouvant être connectés sans conflit. La liste permet d’en sélectionner plusieurs. Les disques avec d’anciennes signatures ZFS/LVM/RAID restent affichés avec ⚠ pour indiquer qu’il faut effacer ces signatures avant leur formatage par l’invité."
},
{
"title": "Choisissez l'interface du bus",
"img": "/disk/disk-assigment.png",
"caption": "Sélection de l'interface de bus",
"intro": "Choisissez comment l'invité devrait voir le disque:",
"items": [
"<strong>SCSI</strong> — par défaut moderne pour Linux et Windows avec les pilotes VirtIO-SCSI installés.",
"<strong>SATA</strong> — large compatibilité, fonctionne hors de la boîte sur presque tous les invités.",
"<strong>VirtIO</strong> : périphérique bloc paravirtualisé efficace ; nécessite des pilotes dans l’invité.",
"<strong>IDE</strong> — pour les anciens clients qui n'ont aucun des pilotes ci-dessus."
]
},
{
"title": "Connecter et vérifier",
"bodyRich": "ProxMenux attache chaque disque sélectionné avec son meilleur chemin <code>/dev/disk/by-id/</code>, saute les index des fentes qui sont déjà utilisés dans la config VM (<code>scsi0</code>, <code>sata0</code>, ...) et relis la config pour confirmer l'assignation. Un résumé est imprimé à la fin."
}
]
},
"manual": {
"heading": "Équivalent manuel",
"body": "Le script est un wrapper autour de <code>qm set</code>. La commande exacte pour un seul disque ressemble à ceci :",
"migrationTitle": "La migration à chaud est impossible",
"migrationBody": "Une VM avec un disque physique connecté directement est <strong>liée à l’hôte qui expose ce disque</strong>. Un autre nœud ne dispose généralement ni du même chemin <code>/dev/disk/by-id/…</code> ni des données. Sauvegardez et transférez ces données séparément, ou utilisez des disques virtuels gérés sur stockage partagé ou avec réplication prise en charge. Ne supposez pas que la réplication Proxmox couvre ce périphérique.",
"shareTitle": "Ne partagez pas de disque physique entre VMs",
"shareBody": "La fixation du même disque physique à deux VMs en même temps corrompra les données sur l'écriture suivante. ProxMenux détecte cette situation et la bloque, mais si vous contournez le script (direct <code>qm set</code>), assurez-vous qu'un seul invité monte le disque."
},
"troubleshoot": {
"heading": "Dépannage",
"noDisksTitle": "\"Aucun disque disponible pour ce VM\"",
"noDisksIntro": "Le script a trouvé des disques, mais chaque candidat a été filtré. Raisons communes:",
"noDisksItems": [
"Chaque disque restant est déjà référencé dans la configuration de la cible VM.",
"Chaque disque restant est monté sur l'hôte ou fait partie d'un ZFS / LVM / RAID actif.",
"L'hôte a seulement le disque racine installé."
],
"noDisksOutro": "Exécutez <code>lsblk -f</code> sur l'hôte pour examiner l'état de chaque disque.",
"noVisibleTitle": "VM ne voit pas le disque après le démarrage",
"noVisibleBody": "Si vous avez choisi <strong>SCSI</strong> ou <strong>VirtIO</strong>, l'invité a besoin du pilote correspondant. Sur Linux qui est natif du noyau; sur Windows vous avez besoin de l'ISO VirtIO et d'un pilote d'installation (voir la page <winLink>Créer VM: Système Windows</winLink>). Le passage à SATA dans l'onglet matériel du VM est une solution rapide pour confirmer que le disque est physiquement attaché."
},
"related": {
"heading": "Voir aussi",
"items": [
{
"href": "/docs/disk-manager/import-disk-image-vm",
"label": "Importer l'image disque vers la VM",
"tail": " — même processus pour les fichiers image (qcow2 / vmdk / raw / img)."
},
{
"href": "/docs/disk-manager/import-disk-lxc",
"label": "Importer un disque vers LXC",
"tail": " — processus équivalent pour les conteneurs LXC."
},
{
"href": "/docs/disk-manager/add-controller-nvme-vm",
"label": "Ajouter un contrôleur ou un NVMe à une VM",
"tail": "— lorsque vous avez besoin d'un PCIe complet / NVMe passthrough plutôt que le disque attaché."
},
{
"href": "/docs/help-info/storage-commands",
"label": "Commandes de stockage et de disques",
"tail": " — référence de qm importdisk et des commandes shell associées."
},
{
"href": "/docs/disk-manager",
"label": "Aperçu du gestionnaire de disque",
"tail": "."
}
]
}
}
@@ -0,0 +1,135 @@
{
"meta": {
"title": "Gestionnaire de disques Proxmox : VM/LXC, tests SMART et effacement | ProxMenux",
"description": "Gérez les disques physiques d’un hôte Proxmox VE avec ProxMenux : connexion aux VM ou LXC (qm set scsi/sata/virtio, pct mp), import d’images img / qcow2 / vmdk / raw, passthrough de HBA ou contrôleurs NVMe complets, effacement avec contrôles de sécurité et autotests SMART.",
"ogTitle": "Gestionnaire de disques Proxmox : VM/LXC, tests SMART et effacement",
"ogDescription": "Connecter des disques aux VM/LXC, importer des images, utiliser le passthrough PCI des contrôleurs, effacer avec contrôles de sécurité et lancer des tests SMART sur Proxmox VE.",
"twitterTitle": "Gestionnaire de disques Proxmox | ProxMenux",
"twitterDescription": "Connexion de disques aux VM/LXC, import d’images, passthrough PCI, effacement avec contrôles de sécurité et tests SMART."
},
"header": {
"title": "Gestionnaire de disque",
"description": "Le menu Gestionnaire de disques regroupe les outils ProxMenux pour les disques physiques de l’hôte : connexion aux VM et LXC, import d’images, passthrough d’un contrôleur complet ou d’un périphérique NVMe, effacement avec contrôles de sécurité et tests SMART.",
"section": "Gestionnaire de disque"
},
"intro": {
"title": "Ce menu sert à",
"body": "Ces outils utilisent les <strong>disques physiques visibles par l’hôte Proxmox et les fichiers image qui y sont stockés</strong>. Le menu comporte trois groupes : <strong>VM</strong> (connexion de disques ou import d’images), <strong>LXC</strong> (connexion à un conteneur) et <strong>Utilitaires</strong> (formatage et état SMART). Les opérations de connexion et d’effacement masquent ou bloquent les disques système et utilisés ; SMART peut les examiner sans les effacer."
},
"opening": {
"heading": "Ouverture du menu",
"body": "Dans le menu principal de ProxMenux, sélectionnez <strong>Disk Manager</strong>. Vous verrez ceci :",
"imageAlt": "Menu Gestionnaire de disque avec blocs VM, LXC et Utilitaires"
},
"groups": {
"heading": "Trois groupes d'outils",
"intro": "Le menu est organisé en trois groupes : <strong>VM</strong>, <strong>LXC</strong> et <strong>Utilitaires</strong>. Cliquez sur une carte pour accéder directement aux outils du groupe.",
"vmTitle": "VM",
"vmBody": "Outils qui fonctionnent sur des machines virtuelles existantes. Le VM doit être éteint; ProxMenux le valide avant de toucher la configuration.",
"vmItems": [
"Importer le disque vers la VM",
"Importer l'image disque vers la VM",
"Ajouter un contrôleur ou un NVMe à une VM"
],
"lxcTitle": "LXC",
"lxcBody": "Outils pour conteneurs LXC existants. Ce script exige un conteneur privilégié et propose de changer le paramètre si nécessaire. Lisez d’abord les précautions sur la conversion et les propriétaires des fichiers sur la page de l’outil.",
"lxcItems": [
"Importer un disque vers LXC"
],
"utilitiesTitle": "Utilitaires",
"utilitiesBody": "Outils côté hôte qui fonctionnent sur les disques eux-mêmes, indépendamment de tout VM ou conteneur.",
"utilitiesItems": [
"Formater ou effacer un disque physique",
"Santé et test du disque SMART"
]
},
"vm": {
"heading": "VM",
"intro": "Outils qui fonctionnent sur des machines virtuelles existantes. Le VM doit être éteint; ProxMenux le valide avant de toucher la configuration.",
"options": [
{
"icon": "HardDrive",
"href": "/docs/disk-manager/import-disk-vm",
"title": "Importer le disque vers la VM",
"description": "Joindre un disque physique non assigné à un VM existant. Prend en charge SATA / SCSI / VirtIO / IDE, utilise des chemins de /dev/disk/by-id persistants."
},
{
"icon": "FileDown",
"href": "/docs/disk-manager/import-disk-image-vm",
"title": "Importer l'image disque vers la VM",
"description": "Importez des images disque (.img / .qcow2 / .vmdk / .raw) dans une VM existante. Processus en deux phases utilisant qm importdisk."
},
{
"icon": "Cpu",
"href": "/docs/disk-manager/add-controller-nvme-vm",
"title": "Ajouter un contrôleur ou un NVMe à une VM",
"description": "Passthrough PCI d’un HBA SATA/SAS complet ou d’un périphérique NVMe à une VM. Gestion de l’activation d’IOMMU et de la détection des conflits."
}
]
},
"lxc": {
"heading": "LXC",
"intro": "Outils pour conteneurs LXC existants. Ce script exige un conteneur privilégié et propose de changer le paramètre si nécessaire. Lisez d’abord les précautions sur la conversion et les propriétaires des fichiers sur la page de l’outil.",
"options": [
{
"icon": "Boxes",
"href": "/docs/disk-manager/import-disk-lxc",
"title": "Importer un disque vers LXC",
"description": "Joindre un disque physique non assigné à un conteneur LXC existant comme point de montage. Gérer la détection de système de fichiers / format et la conversion privilégiée."
}
]
},
"utilities": {
"heading": "Utilitaires",
"intro": "Outils côté hôte qui fonctionnent sur les disques eux-mêmes, indépendamment de tout VM ou conteneur.",
"options": [
{
"icon": "Eraser",
"href": "/docs/disk-manager/format-disk",
"title": "Formater/effacer le disque physique (sûr)",
"description": "Effacement de disques avec des contrôles stricts : seuls les disques entièrement libres sont affichés et une double confirmation est toujours requise."
},
{
"icon": "Activity",
"href": "/docs/disk-manager/smart-disk-test",
"title": "Santé et test du disque SMART",
"description": "Exécutez des contrôles de santé SMART et des auto-tests courts/longs sur les disques SATA, SAS et NVMe. Exporte JSON pour le moniteur."
}
]
},
"safety": {
"title": "Règles de sécurité pour la connexion et l’effacement des disques",
"intro": "Les opérations de connexion et d’effacement excluent les périphériques susceptibles de nuire à l’hôte :",
"items": [
"Le <strong>disque système</strong> et les membres actifs du pool racine, du swap et de ZFS/LVM/RAID sont toujours masqués.",
"Les disques <strong> montés</strong> n'importe où sur l'hôte sont cachés ou bloqués lors de l'exécution.",
"Les disques <strong> référencés par un VM ou LXC</strong> en cours d'exécution ne peuvent pas être réaffectés ou effacés.",
"Les opérations qui peuvent modifier l'état hôte (activer IOMMU, effacer) nécessitent une confirmation explicite."
]
},
"related": {
"heading": "Voir aussi",
"items": [
{
"href": "/docs/storage-share",
"label": "Gestionnaire de stockage et de partage",
"tail": "— enregistrer le stockage dans Proxmox lui-même (NFS / Samba / iSCSI / local) et partager les dossiers entre hôte et CT."
},
{
"href": "/docs/help-info/storage-commands",
"label": "Commandes de stockage et de disques",
"tail": " — référence des périphériques bloc, LVM, pvesm et SMART."
},
{
"href": "/docs/help-info/zfs-commands",
"label": "Commandes de gestion ZFS",
"tail": "— pour les pools et ensembles de données ZFS."
},
{
"href": "/docs/hardware/gpu-vm-passthrough",
"label": "Ajouter GPU à VM (Passthrough)",
"tail": "— les mêmes concepts IOMMU/VFIO appliqués aux GPU."
}
]
}
}
@@ -0,0 +1,146 @@
{
"meta": {
"title": "État et tests SMART des disques | Documentation ProxMenux",
"description": "Effectuez des contrôles SMART et des tests de disques sur Proxmox VE avec ProxMenux. Prise en charge de SATA/SAS avec smartmontools et de NVMe avec nvme-cli, autotests courts et longs et export JSON pour ProxMenux Monitor.",
"ogTitle": "État et tests SMART des disques | Documentation ProxMenux",
"ogDescription": "SMART contrôles de santé et auto-tests pour les disques SATA / SAS et NVMe sur Proxmox. Exportation de JSON pour le moniteur."
},
"header": {
"title": "Santé et test du disque SMART",
"description": "Lisez les données SMART et lancez des autotests sur les disques physiques de l’hôte Proxmox. ProxMenux installe automatiquement smartmontools pour SATA/SAS et nvme-cli pour NVMe, lance les tests dans le firmware du disque (les tests longs continuent après la fermeture du terminal) et exporte les résultats JSON pour ProxMenux Monitor.",
"section": "Gestionnaire de disques · Utilitaires"
},
"intro": {
"title": "C'est pour quoi ?",
"body": "SMART (Autosurveillance, analyse et technologie de rapport) permet au lecteur lui-même de signaler sa santé et de faire des auto-tests. Cet outil expose ces données sans que vous ayez besoin de vous souvenir de la bonne invocation <code>smartctl</code> / <code>nvme</code> et persiste la sortie en tant que JSON afin que le moniteur puisse grapher les tendances au fil du temps."
},
"howRuns": {
"heading": "Comment fonctionne le script",
"body": "Toutes les actions ici sont non destructives — SMART lit les compteurs de firmware de disque, et les auto-tests sont en attente dans le lecteur lui-même. Aucune séparation de phase n'est nécessaire. Le flux est: vérification de dépendance → sélection de disque → sélection d'action → invocation d'outil (smartctl ou nvme-cli selon le bus disque) → sortie imprimée plus l'exportation de JSON pour le moniteur."
},
"deps": {
"heading": "Dépendances",
"body": "L'outil installe automatiquement ce dont il a besoin à la première fois. Les lecteurs SATA / SAS dépendent de <code>smartmontools</code>; les lecteurs NVMe dépendent de <code>nvme-cli</code>. Les deux :"
},
"actions": {
"heading": "Actions disponibles",
"headerAction": "Action",
"headerWhat": "Ce qu'il lit / exécute",
"headerDur": "Durée",
"rows": [
{
"action": "État de santé rapide",
"whatRich": "État global PASSED/FAILED et attributs clés.<br /><code>smartctl -H</code> + <code>-A</code> (SATA/SAS) ou <code>nvme smart-log</code> (NVMe).",
"dur": "Instantané"
},
{
"action": "Rapport complet",
"whatRich": "Données complètes SMART, scrollable. <code>smartctl -x</code> pour SATA/SAS ou <code>nvme smart-log</code> + <code>id-ctrl</code> pour NVMe.",
"dur": "Instantané"
},
{
"action": "Essai court",
"what": "Contrôle élémentaire de la surface et des circuits, lancé dans le firmware du disque.",
"dur": "~2 minutes"
},
{
"action": "Essai long",
"what": "Analyse complète de la surface. Elle s’exécute sur le disque et continue même si vous fermez le terminal.",
"dur": "Heures (selon la taille du disque)"
},
{
"action": "Vérifier la progression du test",
"what": "Statut de l'auto-essai actif ou le plus récent.",
"dur": "Instantané"
}
],
"tipTitle": "Les longs essais survivent à la fermeture du terminal",
"tipBody": "Un test long s’exécute <em>dans le disque</em> sans dépendre du maintien du processus ProxMenux. Vous pouvez fermer le terminal et revenir à <strong>Vérifier la progression du test</strong>. Un redémarrage de l’hôte, une réinitialisation du contrôleur ou une coupure de courant peut interrompre le test et la collecte des résultats ; ne présumez pas d’une reprise automatique."
},
"json": {
"heading": "Exportation de JSON pour le moniteur",
"intro": "Les actions d’état, de test court et de progression écrivent un JSON horodaté dans <code>/usr/local/share/proxmenux/smart/&lt;disk&gt;/</code> ; les résultats des tests longs sont collectés en arrière-plan. Le rapport complet est uniquement affiché. Structure :",
"outro": "ProxMenux Monitor utilise ces fichiers pour afficher l’évolution de l’état de chaque disque. Les anciens fichiers sont supprimés automatiquement lorsque la limite de conservation est atteinte."
},
"steps": {
"heading": "Étape par étape",
"stepLabel": "Étape",
"list": [
{
"title": "Choisir un disque",
"body": "ProxMenux répertorie chaque disque physique de l'hôte avec son modèle et sa taille. Contrairement à l'outil Format, cette liste n'est pas filtrée par sécurité — lire SMART est une opération non destructive.",
"img": "/disk/smart/disk-selection.png",
"alt": "Menu de sélection de disque SMART",
"caption": "Menu de sélection de disque SMART"
},
{
"title": "Choisir une action",
"body": "Choisissez entre état de santé rapide, rapport complet, test court, test long ou vérifier les progrès. Le menu reste ouvert après chaque action afin que vous puissiez enchaîner plusieurs requêtes contre le même disque.",
"img": "/disk/smart/action-menu.png",
"alt": "Menu d'action SMART",
"caption": "Menu d'action SMART (actions 5 + annulation)"
},
{
"title": "(Test long seulement) Confirmer l'exécution de fond",
"body": "ProxMenux indique que le test continuera après la fermeture du terminal et montre où sera enregistré le résultat JSON. Confirmez pour lancer le test.",
"img": "/disk/smart/long-test-warning.png",
"alt": "Boîte de dialogue de confirmation de test longue",
"caption": "Confirmation de test longue — fonctionne en arrière-plan, résultat enregistré en JSON"
},
{
"title": "Examen des résultats",
"bodyRich": "L’état, les tests et la progression s’affichent dans le terminal ; <strong>Rapport complet</strong> s’ouvre dans une boîte de dialogue défilante. Le JSON est exporté pour les actions décrites plus haut, sauf Rapport complet. Pour les tests longs, revenez à <strong>Vérifier la progression du test</strong> sur le même disque.",
"img": "/disk/smart/quick-status.png",
"alt": "État de santé rapide",
"caption": "État de santé rapide (SATA — smartctl -H + -A)"
}
]
},
"manual": {
"heading": "Équivalents manuels",
"nvmeWarnTitle": "Les autotests NVMe dépendent du firmware du disque",
"nvmeWarnBody": "Chaque lecteur NVMe ne supporte pas la commande d'auto-test courte/long. Si un lecteur refuse le test, le journal SMART et les données du contrôleur ID (<code>nvme smart-log</code> + <code>id-ctrl</code>) sont toujours le signal de santé le plus fiable."
},
"troubleshoot": {
"heading": "Dépannage",
"noSmartTitle": "\"Ne pouvait pas lire les données SMART de /dev/sdX\"",
"noSmartBody": "Le disque est probablement derrière un contrôleur RAID / SAS qui ne passe pas SMART à travers. Avec des cartes à base de megaraid, essayez <code>smartctl -d megaraid,N /dev/sdX</code>. Pour les HBA en mode IT, l'invocation directe fonctionne.",
"longTitle": "Un long test ne se termine jamais",
"longBody": "Le disque exécute le test dans son firmware et une forte activité peut le retarder. Essayez pendant une période calme, par exemple la nuit. Pour SATA, <code>smartctl -c</code> indique le pourcentage restant, et pour SAS, <code>smartctl -l selftest</code> ; le journal des autotests contient l’état final et les éventuels LBA en erreur. Une erreur de lecture doit être examinée ; la lenteur seule ne prouve pas un secteur défectueux."
},
"related": {
"heading": "Voir aussi",
"items": [
{
"href": "/docs/disk-manager/format-disk",
"label": "Formater ou effacer un disque physique",
"tail": "— réutiliser un disque après avoir confirmé sa santé."
},
{
"href": "/docs/help-info/storage-commands",
"label": "Commandes de stockage et de disques → État SMART",
"tail": "— référence smartctl / nvme."
},
{
"href": "/docs/help-info/zfs-commands",
"label": "Commandes de gestion ZFS",
"tail": " — zpool scrub vérifie les sommes de contrôle des données ZFS et complète les tests matériels SMART."
},
{
"href": "/docs/monitor/dashboard/storage",
"label": "ProxMenux Monitor — onglet de stockage",
"tail": " — vue détaillée du disque utilisant le JSON exporté ici : table SMART complète, historique et rapport PDF."
},
{
"href": "/docs/monitor/dashboard/hardware",
"label": "ProxMenux Monitor — Onglet matériel",
"tail": "— Sommaire de stockage avec modèle, capacité et vitesse de liaison négociée (courant vs maximum sur NVMe)."
},
{
"href": "/docs/disk-manager",
"label": "Aperçu du gestionnaire de disque",
"tail": "."
}
]
}
}
@@ -0,0 +1,58 @@
{
"meta": {
"title": "Dépôts externes | Documentation ProxMenux",
"description": "ProxMenux intègre certains dépôts de scripts externes, notamment community-scripts et ZimaOS, comme alternatives dans ses menus. La source de chaque script est indiquée ; les bogues sont à signaler à son responsable d’origine.",
"ogTitle": "Dépôts externes | Documentation ProxMenux",
"ogDescription": "Dépôts de scripts externes intégrés comme alternatives dans les menus de ProxMenux."
},
"header": {
"title": "Dépôts externes",
"description": "ProxMenux intègre certains dépôts de scripts externes comme alternatives dans ses menus. Ces scripts proviennent de sources tierces de confiance, clairement indiquées lors de leur affichage dans le menu.",
"section": "Dépôts externes"
},
"practice": {
"title": "Ce que cela signifie dans la pratique",
"body": "Lorsqu’une option utilise un script externe plutôt que du code propre à ProxMenux, le menu indique son origine et le dépôt chargé. ProxMenux sert de lanceur et ne modifie pas ces scripts. Les problèmes liés à leur fonctionnement relèvent du responsable du dépôt d’origine."
},
"integrated": {
"heading": "Dépôts actuellement intégrés",
"usedInLabel": "Utilisé dans:",
"items": [
{
"name": "community-scripts / ProxmoxVE",
"url": "https://community-scripts.github.io/ProxmoxVE/",
"description": "Successeur spirituel des scripts d’aide de tteck. Vaste catalogue de scripts qui déploient en une seule exécution des LXC (Home Assistant, Plex, Frigate…), des VM, des extensions et des réglages PVE.",
"usedIn": "Lanceur de Helper Scripts et Réseau (correction de l’offloading réseau pour Intel e1000e)"
}
]
},
"attribution": {
"heading": "Attribution et reconnaissance",
"items": [
"Les auteurs d’origine sont toujours cités dans le menu et sur la page qui documente l’intégration du script.",
"Un lien vers le dépôt source est affiché avant l’exécution du script et sur la page de documentation correspondante.",
"Soutenez les développeurs de ces projets externes avec une ⭐, un parrainage ou des rapports de bogues bien documentés."
]
},
"report": {
"title": "Où signaler les problèmes avec les scripts externes",
"body": "Si un script externe ne fonctionne pas comme prévu, <strong>signalez-le directement dans son dépôt</strong>, pas à ProxMenux. ProxMenux le télécharge et l’exécute sans modifier son code. Son responsable d’origine pourra analyser et corriger le problème. Les issues de ProxMenux concernent le lanceur ou l’intégration du script."
},
"suggest": {
"heading": "Proposer de nouveaux dépôts externes",
"intro": "Vous avez trouvé un script ou un dépôt qui s'intégrerait bien dans un menu ProxMenux ? Suggérez-le via:",
"discussionTitle": "💬 Ouvrir une discussion",
"discussionBody": "Idéal pour les idées : recueillez l’avis de la communauté avant d’en faire une demande de fonctionnalité.",
"issueTitle": "🐛 Ouvrir une issue",
"issueBody": "Pour les demandes de fonctionnalités précises, au périmètre clairement défini."
},
"candidate": {
"title": "Ce qui fait un bon candidat à l'intégration",
"items": [
"Code source ouvert et responsable actif.",
"Idempotent : peut être exécuté plusieurs fois sans risque.",
"Ne modifie pas la configuration principale de Proxmox sans le signaler.",
"Résout un problème que ProxMenux ne couvre pas encore, sans dupliquer les fonctionnalités."
]
}
}
+677
View File
@@ -0,0 +1,677 @@
{
"meta": {
"title": "Glossaire | Documentation ProxMenux",
"description": "Définitions des termes employés dans la documentation ProxMenux : Proxmox, stockage, réseau et virtualisation.",
"ogTitle": "Glossaire | Documentation ProxMenux",
"ogDescription": "Référence rapide pour les termes techniques utilisés dans la documentation ProxMenux."
},
"header": {
"title": "Glossaire",
"description": "Définitions courtes des termes utilisés dans ProxMenux et pour décrire le fonctionnement de Proxmox.",
"section": "Glossaire"
},
"callout": {
"title": "Comment utiliser cette page",
"bodyRich": "Chaque entrée comporte une catégorie et une courte définition. Les liens <em>Voir aussi</em> ouvrent la documentation correspondante. Utilisez la navigation A–Z pour accéder directement à une lettre."
},
"jumpHeading": "Aller à la lettre",
"seeAlsoLabel": "Voir aussi:",
"aliasesLabel": "aussi:",
"missingCallout": {
"title": "Il manque un terme ?",
"leadRich": "Si un terme manque, ouvrez une issue ou une PR sur <ext>GitHub</ext>. Le glossaire se trouve dans <code>web/messages/en/docs/glossary.json</code>, avec les catalogues correspondants pour chaque langue."
},
"entries": [
{
"term": "ACS",
"aliases": [
"Access Control Services",
"Contournement ACS"
],
"category": "Virtualisation",
"definitionRich": "Fonctions de contrôle d’accès PCIe contribuant à isoler le trafic entre périphériques. Les groupes IOMMU dépendent du matériel et de la topologie. Le correctif <em>ACS override</em> peut diviser les groupes signalés par Linux, sans ajouter d’isolation matérielle ; les attribuer à des VM distinctes présente un risque de sécurité.",
"seeAlso": [
{
"label": "Ajouter le contrôleur ou NVMe au VM",
"href": "/docs/disk-manager/add-controller-nvme-vm"
}
]
},
{
"term": "ARC",
"aliases": [
"Adaptive Replacement Cache"
],
"category": "Stockage",
"definitionRich": "Cache de lecture ZFS en RAM de l’hôte, contenant les blocs récemment et fréquemment utilisés. Sa limite par défaut dépend de la version et de l’installation de Proxmox. Les options de post-installation ProxMenux permettent de la plafonner.",
"seeAlso": [
{
"label": "Après installation : stockage",
"href": "/docs/post-install/storage"
},
{
"label": "Commandes ZFS",
"href": "/docs/help-info/zfs-commands"
}
]
},
{
"term": "Montage bind",
"category": "Linux",
"definitionRich": "Fonction Linux rendant une partie du système de fichiers accessible depuis un autre chemin. ProxMenux utilise ces montages pour partager des répertoires de l’hôte avec les conteneurs LXC via <code>pct set -mpN</code>.",
"seeAlso": [
{
"label": "Points de montage LXC",
"href": "/docs/storage-share/lxc-mount-points"
}
]
},
{
"term": "Agrégat réseau",
"aliases": [
"Regroupement d’interfaces réseau",
"Agrégation de liens"
],
"category": "Réseau",
"definitionRich": "Regroupe plusieurs interfaces physiques en une interface logique pour la redondance (active-backup), le débit agrégé (LACP / 802.3ad), ou les deux. Configuration dans <code>/etc/network/interfaces</code>."
},
{
"term": "Pont",
"aliases": [
"vmbrX",
"vmbr0",
"Pont Linux"
],
"category": "Réseau",
"definitionRich": "Commutateur virtuel de couche 2 sur l’hôte. <code>vmbr0</code> relie généralement les invités au réseau physique. D’autres ponts (<code>vmbr1</code>, <code>vmbr2</code>...) permettent de séparer les réseaux selon leurs liaisons physiques et leur configuration.",
"seeAlso": [
{
"label": "Analyse des ponts et réparation guidée",
"href": "/docs/network/bridge-analysis"
}
]
},
{
"term": "Ceph",
"category": "Stockage",
"definitionRich": "Stockage distribué intégré à Proxmox pour les clusters hyperconvergés. Les OSD (Object Storage Daemons) constituent la base du stockage objet, bloc et fichier. La version Ceph requise dépend de la version Proxmox et du parcours de mise à niveau ; consultez le guide correspondant.",
"seeAlso": [
{
"label": "Mettre à niveau le PVE 8 vers le PVE 9",
"href": "/docs/utils/upgrade-pve8-pve9"
}
]
},
{
"term": "CT",
"aliases": [
"Conteneur",
"Conteneur LXC"
],
"category": "Proxmox",
"definitionRich": "Abréviation de « conteneur » dans Proxmox pour une instance LXC. Son CTID numérique correspond à <code>/etc/pve/lxc/&lt;CTID&gt;.conf</code>. Voir aussi <strong>LXC</strong>.",
"seeAlso": [
{
"label": "Gestion des VM et conteneurs",
"href": "/docs/help-info/vm-ct-commands"
}
]
},
{
"term": "deb822",
"category": "Linux",
"definitionRich": "Format moderne des sources APT : fichiers <code>.sources</code> en blocs structurés avec les champs Types, URIs, Suites, Components et Signed-By. Remplace le format à une ligne <code>.list</code> et devient la norme à partir de PVE 9 / Debian Trixie.",
"seeAlso": [
{
"label": "Mettre à niveau le PVE 8 vers le PVE 9",
"href": "/docs/utils/upgrade-pve8-pve9"
}
]
},
{
"term": "dGPU",
"aliases": [
"GPU dédié"
],
"category": "Virtualisation",
"definitionRich": "Carte graphique distincte, généralement reliée en PCIe, contrairement à un <strong>iGPU</strong>. Elle peut être attribuée à une VM via VFIO ou utilisée par plusieurs conteneurs LXC via les fichiers de périphérique et le pilote hôte, selon la compatibilité matérielle et applicative.",
"seeAlso": [
{
"label": "Ajouter un GPU à une VM (passthrough)",
"href": "/docs/hardware/gpu-vm-passthrough"
}
]
},
{
"term": "Dialog",
"category": "Linux",
"definitionRich": "Outil basé sur ncurses pour afficher menus, invites et barres de progression dans le terminal. Les menus ProxMenux utilisent dialog."
},
{
"term": "DKMS",
"aliases": [
"Prise en charge du module de noyau dynamique"
],
"category": "Linux",
"definitionRich": "Infrastructure de recompilation des modules externes enregistrés, comme NVIDIA ou ZFS, lors d’un changement de noyau. La compilation nécessite des sources compatibles et les en-têtes correspondants.",
"seeAlso": [
{
"label": "Installer le Coral TPU (Host)",
"href": "/docs/hardware/install-coral-tpu-host"
}
]
},
{
"term": "Fail2Ban",
"category": "Linux",
"definitionRich": "Service qui détecte les échecs d’authentification répétés dans les journaux et bloque les IP concernées via le pare-feu. ProxMenux fournit des jails préconfigurées pour SSH, l’interface Proxmox et Monitor.",
"seeAlso": [
{
"label": "Fail2Ban",
"href": "/docs/security/fail2ban"
}
]
},
{
"term": "Fastfetch",
"category": "Linux",
"definitionRich": "Outil d’information système avec dessin ASCII affiché à l’ouverture d’une session shell. Remplace <code>neofetch</code> et peut être activé dans les options de post-installation ProxMenux.",
"seeAlso": [
{
"label": "Après installation : options",
"href": "/docs/post-install/optional"
}
]
},
{
"term": "GRUB",
"aliases": [
"GRand Unified Bootloader"
],
"category": "Linux",
"definitionRich": "Chargeur d’amorçage des installations Linux utilisant GRUB. Configuration dans <code>/etc/default/grub</code> et <code>/boot/grub/</code> ; appliquez les modifications avec <code>update-grub</code>. Proxmox peut aussi utiliser systemd-boot : vérifiez le chargeur actif avant de modifier les paramètres du noyau.",
"seeAlso": [
{
"label": "commandes GPU Passthrough",
"href": "/docs/help-info/gpu-commands"
}
]
},
{
"term": "iGPU",
"aliases": [
"GPU intégré"
],
"category": "Virtualisation",
"definitionRich": "Processeur graphique intégré au boîtier du CPU, comme Intel UHD / Iris ou Radeon dans les APU Ryzen. Il est souvent partagé entre plusieurs LXC via <code>/dev/dri</code>, plutôt qu’attribué exclusivement à une VM.",
"seeAlso": [
{
"label": "Ajouter un GPU à LXC",
"href": "/docs/hardware/igpu-acceleration-lxc"
}
]
},
{
"term": "ifupdown / ifupdown2",
"category": "Réseau",
"definitionRich": "Système classique de configuration réseau Debian, basé sur <code>/etc/network/interfaces</code>. Proxmox utilise par défaut sa réécriture <code>ifupdown2</code>, qui permet le rechargement à chaud avec <code>ifreload -a</code>."
},
{
"term": "initramfs",
"category": "Linux",
"definitionRich": "Système de fichiers initial en RAM utilisé avant le montage de la racine réelle. Il contient les pilotes nécessaires au démarrage. Après modification de VFIO, de l’IOMMU ou des pilotes de stockage, reconstruisez-le avec <code>update-initramfs -u -k all</code>."
},
{
"term": "IOMMU",
"aliases": [
"Unité de gestion de la mémoire d ' entrée/sortie",
"VT-d",
"AMD-Vi"
],
"category": "Virtualisation",
"definitionRich": "Fonction matérielle (Intel VT-d / AMD-Vi) nécessaire au passthrough PCIe vers les VM. Activez-la dans le firmware et vérifiez son activation dans le noyau. Selon la plateforme et les valeurs par défaut, les paramètres <code>intel_iommu=on</code> ou <code>amd_iommu=on</code> peuvent être nécessaires.",
"seeAlso": [
{
"label": "Post-Installation : Virtualisation",
"href": "/docs/post-install/virtualization"
},
{
"label": "Ajouter un GPU à une VM (passthrough)",
"href": "/docs/hardware/gpu-vm-passthrough"
}
]
},
{
"term": "Groupe IOMMU",
"category": "Virtualisation",
"definitionRich": "Ensemble de périphériques constituant la plus petite unité d’isolation IOMMU. Ses membres ne sont pas nécessairement isolés entre eux ; vérifiez-les tous avant une attribution VFIO. Liste : <code>find /sys/kernel/iommu_groups/ -type l | sort -V</code>."
},
{
"term": "iSCSI",
"aliases": [
"Internet SCSI"
],
"category": "Stockage",
"definitionRich": "Protocole de stockage bloc sur IP : un disque distant apparaît comme un périphérique SCSI local. Ajout dans Proxmox via <code>pvesm add iscsi</code>.",
"seeAlso": [
{
"label": "Ajouter la cible iSCSI comme stockage Proxmox",
"href": "/docs/storage-share/host-iscsi"
}
]
},
{
"term": "KVM",
"aliases": [
"Machine virtuelle à noyau"
],
"category": "Virtualisation",
"definitionRich": "Module du noyau Linux transformant l’hôte en hyperviseur. Associé à <strong>QEMU</strong> pour l’émulation des périphériques, il constitue la base des VM Proxmox."
},
{
"term": "LVM",
"aliases": [
"Logical Volume Manager"
],
"category": "Stockage",
"definitionRich": "Gestionnaire de volumes Linux regroupant le stockage physique en groupes (VG) contenant des volumes logiques (LV). Les installations Proxmox basées sur LVM utilisent souvent LVM-thin pour les disques invités ; d’autres solutions existent. Outils : <code>pvs</code>, <code>vgs</code> et <code>lvs</code>.",
"seeAlso": [
{
"label": "Commandes de stockage et de disques",
"href": "/docs/help-info/storage-commands"
}
]
},
{
"term": "LXC",
"aliases": [
"Linux Containers"
],
"category": "Linux",
"definitionRich": "Virtualisation au niveau du système : des espaces utilisateur isolés partagent le noyau hôte. Généralement moins de surcoût que les VM, avec une frontière d’isolation différente. Proxmox gère les LXC via <code>pct</code>.",
"seeAlso": [
{
"label": "Gestion des VM et conteneurs",
"href": "/docs/help-info/vm-ct-commands"
}
]
},
{
"term": "Lynis",
"category": "Linux",
"definitionRich": "Outil d’audit de sécurité libre de CISOfy. Analyse l’hôte et fournit un score de durcissement ainsi que des recommandations concrètes. ProxMenux installe la version du dépôt GitHub d’origine plutôt que le paquet Debian plus ancien.",
"seeAlso": [
{
"label": "Lynis",
"href": "/docs/security/lynis"
}
]
},
{
"term": "Adresse MAC",
"aliases": [
"Adresse matérielle"
],
"category": "Réseau",
"definitionRich": "Identifiant d’interface Ethernet, généralement sur 48 bits, attribué par le matériel ou le logiciel. Les <em>Noms réseau persistants</em> de ProxMenux associent les MAC à des noms stables (<code>eno1</code>, <code>enp3s0</code>) malgré une nouvelle énumération PCI.",
"seeAlso": [
{
"label": "Noms d'interface persistants",
"href": "/docs/network/persistent-names"
}
]
},
{
"term": "MOTD",
"aliases": [
"Message du jour"
],
"category": "Linux",
"definitionRich": "Texte affiché après connexion SSH, stocké dans <code>/etc/motd</code>. ProxMenux peut ajouter une bannière après installation ; la désinstallation restaure le fichier précédent si une sauvegarde existe."
},
{
"term": "NFS",
"aliases": [
"Système de fichiers réseau"
],
"category": "Stockage",
"definitionRich": "Protocole de partage de fichiers réseau issu d’Unix. Ajout comme stockage Proxmox via <code>pvesm add nfs</code> ; ProxMenux propose aussi des assistants pour clients et serveurs NFS en LXC.",
"seeAlso": [
{
"label": "Gestionnaire de stockage et de partage",
"href": "/docs/storage-share"
}
]
},
{
"term": "nftables / iptables",
"category": "Réseau",
"definitionRich": "Outils de pare-feu Linux. <code>nftables</code> est l’infrastructure moderne ; <code>iptables</code> peut utiliser un moteur classique ou compatible nft. Le service classique <code>pve-firewall</code> utilise iptables ; l’alternative proxmox-firewall utilise nftables.",
"seeAlso": [
{
"label": "Commandes réseau",
"href": "/docs/help-info/network-commands"
}
]
},
{
"term": "nouveau",
"category": "Linux",
"definitionRich": "Pilote graphique NVIDIA libre inclus dans Linux. Pour installer le pilote propriétaire, empêchez nouveau de prendre en charge le même GPU, généralement en bloquant son chargement et en reconstruisant l’initramfs.",
"seeAlso": [
{
"label": "Guide d'installation NVIDIA",
"href": "/guides/nvidia"
}
]
},
{
"term": "Dépôt no-subscription",
"category": "Proxmox",
"definitionRich": "Dépôt de paquets Proxmox accessible sans abonnement entreprise. Les paquets sont moins validés que dans le dépôt enterprise, recommandé par Proxmox en production. Les options de post-installation ProxMenux permettent de configurer les dépôts.",
"seeAlso": [
{
"label": "Post-Install: Paramètres de base",
"href": "/docs/post-install/basic-settings"
}
]
},
{
"term": "OVA / OVF",
"aliases": [
"Open Virtualization Format"
],
"category": "Virtualisation",
"definitionRich": "Formats DMTF pour distribuer des VM portables. <strong>OVA</strong> regroupe les fichiers dans une archive TAR ; <strong>OVF</strong> décrit la VM en XML avec ses fichiers disque, souvent VMDK. La prise en charge de l’import dépend de l’hyperviseur cible et de la configuration.",
"seeAlso": [
{
"label": "Exportation de VM vers OVA / OVF",
"href": "/docs/utils/export-vm"
},
{
"label": "Importer VM de OVA / OVF",
"href": "/docs/utils/import-vm"
}
]
},
{
"term": "OVMF",
"aliases": [
"firmware UEFI",
"Open Virtual Machine Firmware"
],
"category": "Virtualisation",
"definitionRich": "Firmware UEFI pour VM, sélectionné avec <code>qm set &lt;vmid&gt; -bios ovmf</code>. Utilisé pour les invités UEFI, notamment Windows 11 et les configurations Secure Boot. <code>efidisk0</code> conserve les variables EFI ; beaucoup d’autres invités acceptent encore le BIOS classique.",
"seeAlso": [
{
"label": "Ajouter un GPU à une VM (passthrough)",
"href": "/docs/hardware/gpu-vm-passthrough"
}
]
},
{
"term": "PBS",
"aliases": [
"Proxmox Backup Server"
],
"category": "Proxmox",
"definitionRich": "Produit de sauvegarde Proxmox distinct avec transferts incrémentaux, déduplication et chiffrement côté client facultatif pour VM et CT. Utilisable comme destination vzdump ; un serveur séparé est préférable au stockage des sauvegardes sur l’hôte protégé."
},
{
"term": "pct",
"category": "Proxmox",
"definitionRich": "Outil en ligne de commande pour gérer les conteneurs LXC dans Proxmox : <code>pct list / start / stop / shutdown / config / enter / exec / push / pull / destroy</code>.",
"seeAlso": [
{
"label": "Gestion des VM et conteneurs",
"href": "/docs/help-info/vm-ct-commands"
}
]
},
{
"term": "pmxcfs",
"aliases": [
"Proxmox Cluster Filesystem"
],
"category": "Proxmox",
"definitionRich": "Système de fichiers virtuel basé sur FUSE, monté dans <code>/etc/pve/</code>. Réplique la configuration entre les nœuds du cluster : les modifications sous <code>/etc/pve/</code> sont propagées automatiquement."
},
{
"term": "pveam",
"aliases": [
"Gestionnaire d'appliances Proxmox VE"
],
"category": "Proxmox",
"definitionRich": "Outil du catalogue local de modèles CT. <code>pveam update</code> actualise l’index ; <code>pveam available</code> liste les modèles et <code>pveam download &lt;storage&gt; &lt;template&gt;</code> en télécharge un."
},
{
"term": "pveproxy",
"category": "Proxmox",
"definitionRich": "Service HTTPS de l’interface et du terminal web Proxmox, sur le port 8006. Il redémarre pendant les mises à niveau majeures ; ProxMenux refuse donc de lancer PVE 8 → 9 depuis le terminal web."
},
{
"term": "pvesm",
"aliases": [
"Gestionnaire de stockage Proxmox"
],
"category": "Proxmox",
"definitionRich": "Outil CLI pour la gestion du stockage Proxmox. <code>pvesm status</code> affiche tous les stockages configurés; <code>pvesm add &lt;type&gt;</code> enregistre de nouveaux stockages (NFS, Samba, iSCSI, dir, ZFS, LVM, ...).",
"seeAlso": [
{
"label": "Commandes de stockage et de disques",
"href": "/docs/help-info/storage-commands"
}
]
},
{
"term": "Conteneur privilégié",
"category": "Linux",
"definitionRich": "Conteneur LXC dont root <em>correspond à l’UID 0 de l’hôte</em>, avec toujours des espaces de noms et d’autres restrictions. Moins isolé qu’un conteneur non privilégié. GPU, USB et Samba ne nécessitent pas systématiquement ce mode ; les droits et les correspondances UID comptent."
},
{
"term": "ProxMenux Monitor",
"category": "ProxMenux",
"definitionRich": "Tableau de bord web facultatif de ProxMenux. Affiche les statistiques hôte en temps réel (CPU, RAM, disques, réseau), une vue des VM et LXC, et une connexion avec 2FA, sur le port TCP <code>8008</code>.",
"seeAlso": [
{
"label": "ProxMenux Monitor",
"href": "/docs/settings/proxmenux-monitor"
}
]
},
{
"term": "qcow2",
"aliases": [
"QEMU Copy-On-Write v2"
],
"category": "Stockage",
"definitionRich": "Format d’image disque VM courant sur le stockage de type répertoire. Prend en charge l’allocation à la demande, les instantanés et la copie sur écriture. Conversion : <code>qemu-img convert -O qcow2 ...</code>."
},
{
"term": "qm",
"aliases": [
"Gestionnaire QEMU"
],
"category": "Proxmox",
"definitionRich": "Outil de gestion des VM Proxmox : <code>qm list / start / stop / shutdown / config / set / destroy / importdisk / migrate</code>. Équivalent de <code>pct</code> pour les conteneurs.",
"seeAlso": [
{
"label": "Gestion des VM et conteneurs",
"href": "/docs/help-info/vm-ct-commands"
}
]
},
{
"term": "Q35",
"category": "Virtualisation",
"definitionRich": "Type de machine QEMU émulant le chipset Intel Q35 avec PCIe. Préférable à i440FX pour le passthrough PCIe et les systèmes invités modernes. Configuration : <code>qm set &lt;vmid&gt; -machine q35</code>."
},
{
"term": "QEMU",
"category": "Virtualisation",
"definitionRich": "Émulateur de machines et outil de virtualisation libre. Proxmox l’associe à KVM pour exécuter des VM avec des performances proches du matériel natif."
},
{
"term": "rclone",
"category": "Linux",
"definitionRich": "Outil en ligne de commande compatible avec de nombreux services, dont Google Drive, Dropbox, OneDrive, Mega et S3. Le guide de sauvegarde cloud l’utilise pour monter un stockage distant en répertoire destiné aux archives vzdump.",
"seeAlso": [
{
"label": "Sauvegarder vers un cloud personnel",
"href": "/guides/backup_cloud"
}
]
},
{
"term": "Samba / SMB / CIFS",
"category": "Stockage",
"definitionRich": "Famille de protocoles de partage de fichiers Microsoft. <strong>SMB</strong> est le protocole, <strong>Samba</strong> son implémentation libre sous Linux et <strong>CIFS</strong> un ancien dialecte SMB. Ajout dans Proxmox avec <code>pvesm add cifs</code>.",
"seeAlso": [
{
"label": "Gestionnaire de stockage et de partage",
"href": "/docs/storage-share"
}
]
},
{
"term": "SeaBIOS",
"category": "Virtualisation",
"definitionRich": "Implémentation libre du BIOS classique utilisée par QEMU. Firmware par défaut des nouvelles VM sauf choix d’OVMF. Adapté aux systèmes anciens et aux installations Linux ne nécessitant pas UEFI."
},
{
"term": "smartctl / SMART",
"aliases": [
"Self-Monitoring, Analysis and Reporting Technology"
],
"category": "Stockage",
"definitionRich": "Diagnostic intégré aux disques indiquant leur état, les erreurs et les résultats des autotests. L’outil est <code>smartctl</code>, du paquet <code>smartmontools</code> ; <code>nvme-cli</code> ajoute les commandes propres aux NVMe.",
"seeAlso": [
{
"label": "Santé et test du disque SMART",
"href": "/docs/disk-manager/smart-disk-test"
},
{
"label": "Commandes de stockage → Section SMART",
"href": "/docs/help-info/storage-commands"
}
]
},
{
"term": "systemd / systemctl / journalctl",
"category": "Linux",
"definitionRich": "Système d’initialisation Debian / Proxmox. <code>systemctl</code> gère les services : démarrage, arrêt, activation et état. <code>journalctl</code> lit le journal binaire produit par <code>systemd-journald</code>."
},
{
"term": "sysctl",
"category": "Linux",
"definitionRich": "Outil de lecture et modification des paramètres du noyau. Les réglages persistants vont généralement dans <code>/etc/sysctl.d/*.conf</code> ; la lecture de <code>/etc/sysctl.conf</code> dépend du service de chargement. ProxMenux propose un profil sysctl après installation.",
"seeAlso": [
{
"label": "Post-Installation: Réseau",
"href": "/docs/post-install/network"
}
]
},
{
"term": "trixie",
"category": "Linux",
"definitionRich": "Nom de code pour Debian 13, la base OS pour Proxmox VE 9. Prédécesseur: <em>bookworm</em> (Debian 12 / PVE 8).",
"seeAlso": [
{
"label": "Mettre à niveau le PVE 8 vers le PVE 9",
"href": "/docs/utils/upgrade-pve8-pve9"
}
]
},
{
"term": "udev",
"category": "Linux",
"definitionRich": "Gestionnaire de périphériques Linux. Réagit aux événements matériels et crée ou supprime les entrées sous <code>/dev</code>. Les règles de <code>/etc/udev/rules.d/</code> peuvent fixer les noms d’interface par MAC, créer les périphériques NVIDIA au chargement du pilote, etc."
},
{
"term": "UID / GID idmap",
"aliases": [
"Déplacement UID"
],
"category": "Linux",
"definitionRich": "Avec la correspondance par défaut des LXC <strong>non privilégiés</strong>, les UID et GID hôtes sont décalés de <code>+100000</code> : UID 0 correspond à 100000 et 1000 à 101000. Les correspondances personnalisées peuvent différer ; les propriétaires des montages bind doivent être cohérents.",
"seeAlso": [
{
"label": "Points de montage LXC",
"href": "/docs/storage-share/lxc-mount-points"
}
]
},
{
"term": "Conteneur non privilégié",
"category": "Linux",
"definitionRich": "Conteneur LXC dont root correspond à un UID hôte non privilégié, normalement 100000. Cela réduit les droits sur l’hôte tout en partageant son noyau. L’accès matériel reste possible avec les droits et correspondances adaptés ; le mode privilégié n’est pas systématiquement nécessaire."
},
{
"term": "VFIO",
"aliases": [
"Fonction virtuelle E/S"
],
"category": "Virtualisation",
"definitionRich": "Infrastructure du noyau Linux pour des pilotes sécurisés en espace utilisateur, utilisée pour attribuer directement des périphériques PCIe aux VM. Elle utilise <code>vfio</code>, <code>vfio_iommu_type1</code> et <code>vfio_pci</code>, configurés dans <code>/etc/modprobe.d/vfio.conf</code>.",
"seeAlso": [
{
"label": "Post-Installation : Virtualisation",
"href": "/docs/post-install/virtualization"
}
]
},
{
"term": "VirtIO",
"category": "Virtualisation",
"definitionRich": "Famille de pilotes paravirtualisés pour réseau, stockage, mémoire dynamique et GPU. Évite le surcoût du matériel ancien émulé, comme e1000 ou IDE. L’invité doit disposer des pilotes : intégrés à Linux, disponibles sur ISO séparée pour Windows."
},
{
"term": "VLAN",
"aliases": [
"Réseau local virtuel"
],
"category": "Réseau",
"definitionRich": "Étiquettes 802.1Q divisant un réseau physique en plusieurs réseaux logiques. Configuration par pont ou interface dans <code>/etc/network/interfaces</code>."
},
{
"term": "VM",
"aliases": [
"Machine virtuelle"
],
"category": "Proxmox",
"definitionRich": "Machine virtuelle gérée par Proxmox avec QEMU/KVM, disposant de son propre noyau invité. Son VMID numérique correspond à <code>/etc/pve/qemu-server/&lt;VMID&gt;.conf</code>. Généralement plus de surcoût que LXC, avec une frontière d’isolation reposant sur un noyau distinct.",
"seeAlso": [
{
"label": "Gestion des VM et conteneurs",
"href": "/docs/help-info/vm-ct-commands"
}
]
},
{
"term": "vzdump",
"category": "Proxmox",
"definitionRich": "Outil de sauvegarde Proxmox pour VM et CT. Les archives fichier <strong>ne sont pas incrémentales</strong> ; les destinations PBS permettent des transferts incrémentaux. Les tâches configurent mode (snapshot / suspend / stop), compression (zstd, gzip ou lzo, par exemple), rétention et notifications.",
"seeAlso": [
{
"label": "Commandes de sauvegarde et de restauration",
"href": "/docs/help-info/backup-commands"
}
]
},
{
"term": "ZFS",
"aliases": [
"Zettabyte File System"
],
"category": "Stockage",
"definitionRich": "Système de fichiers et gestionnaire de volumes avec instantanés, réplication send/receive, sommes de contrôle et compression. Peut réparer les données corrompues si une copie redondante valide existe. Le cache <strong>ARC</strong> utilise de la RAM et peut être limité.",
"seeAlso": [
{
"label": "Commandes de gestion ZFS",
"href": "/docs/help-info/zfs-commands"
}
]
}
]
}
@@ -0,0 +1,235 @@
{
"meta": {
"title": "Commandes de sauvegarde Proxmox — vzdump, qmrestore, pct restore | ProxMenux",
"description": "Référence des commandes de sauvegarde et de restauration Proxmox VE : vzdump pour les VM et les conteneurs LXC, qmrestore pour les VM, pct restore pour les conteneurs, sauvegardes planifiées dans /etc/pve/jobs.cfg, scripts de hook et chemins à exclure.",
"ogTitle": "Commandes de sauvegarde Proxmox — vzdump, qmrestore, pct restore",
"ogDescription": "Référence des commandes vzdump, qmrestore et pct restore pour sauvegarder et restaurer les VM et conteneurs LXC de Proxmox.",
"twitterTitle": "Commandes de sauvegarde Proxmox | ProxMenux",
"twitterDescription": "Commandes vzdump, qmrestore et pct restore pour sauvegarder et restaurer les VM et conteneurs Proxmox."
},
"header": {
"title": "Sauvegarde et restauration",
"description": "Référence commentée des commandes vzdump, qmrestore et pct restore pour les sauvegardes Proxmox. Comprend la planification, les options avancées comme les hook scripts, les chemins à exclure et la priorité des E/S, ainsi que la gestion des fichiers de sauvegarde.",
"section": "Aide et informations"
},
"intro": {
"title": "Trois modes de sauvegarde",
"body": "Pour les VM, <strong>snapshot</strong> effectue une sauvegarde à chaud sans nécessiter d’instantanés du stockage. <strong>suspend</strong> suspend la VM auparavant, sans nécessairement améliorer la cohérence. <strong>stop</strong> l’arrête d’abord ; une VM auparavant active peut reprendre après le début de la sauvegarde. Pour LXC, snapshot exige un stockage compatible avec les instantanés, suspend utilise deux passes rsync et stop maintient le conteneur arrêté pendant toute la sauvegarde."
},
"commandGroups": [
{
"title": "Sauvegarde VM",
"commands": [
{
"command": "vzdump <vmid>",
"description": "Créer une sauvegarde d’une VM ou d’un CT donné"
},
{
"command": "vzdump <vmid> --storage <storage>",
"description": "Sauvegarder la VM vers un stockage donné"
},
{
"command": "vzdump <vmid> --mode snapshot",
"description": "Créer une sauvegarde instantané (pour les VM)"
},
{
"command": "vzdump <vmid> --mode suspend",
"description": "Suspendre la VM avant la sauvegarde à chaud, ancien mode suspend"
},
{
"command": "vzdump <vmid> --mode stop",
"description": "Arrêter la VM avant de lancer la sauvegarde"
},
{
"command": "vzdump --all",
"description": "Sauvegarder toutes les VM et tous les conteneurs"
},
{
"command": "vzdump --all --exclude <vmid1>,<vmid2>",
"description": "Sauvegarde tous sauf les VM spécifiés"
}
]
},
{
"title": "Options de sauvegarde",
"commands": [
{
"command": "vzdump <vmid> --compress zstd",
"description": "Utiliser la compression zstd pour la sauvegarde"
},
{
"command": "vzdump <vmid> --compress gzip --pigz <threads>",
"description": "Utiliser pigz avec plusieurs threads"
},
{
"command": "vzdump <vmid> --storage <storage> --notes-template <text>",
"description": "Ajouter des notes à la sauvegarde"
},
{
"command": "vzdump <vmid> --mailto <email>",
"description": "Envoyer un courriel de notification"
},
{
"command": "vzdump <vmid> --prune-backups keep-last=<n>",
"description": "Conserver seulement n sauvegardes par VM"
},
{
"command": "vzdump <vmid> --stdexcludes 0",
"description": "N'excluez pas les fichiers temporaires"
},
{
"command": "vzdump <vmid> --quiet 1",
"description": "Suppression des messages de sortie"
}
]
},
{
"title": "Restaurer les sauvegardes",
"commands": [
{
"command": "qmrestore <backup-file> <vmid>",
"description": "Restaurer VM depuis la sauvegarde"
},
{
"command": "qmrestore <backup-file> <vmid> --storage <storage>",
"description": "Restaurer vers un stockage donné"
},
{
"command": "qmrestore <backup-file> <vmid> --unique",
"description": "Restaurer la VM avec de nouvelles adresses MAC aléatoires"
},
{
"command": "pct restore <vmid> <backup-file>",
"description": "Restaurer le conteneur de la sauvegarde"
},
{
"command": "pct restore <vmid> <backup-file> --storage <storage>",
"description": "Restaurer le conteneur vers un stockage donné"
},
{
"command": "pct restore <vmid> <backup-file> --rootfs <storage>:<size-GiB>",
"description": "Restaurer avec un disque racine alloué sur le stockage et avec la taille choisis"
},
{
"command": "pct restore <vmid> <backup-file> --unprivileged 1",
"description": "Restaurer en tant que CT non privilégié"
}
]
},
{
"title": "Gestion des sauvegardes",
"commands": [
{
"command": "ls -la /var/lib/vz/dump/",
"description": "Lister les sauvegardes dans l'emplacement par défaut"
},
{
"command": "find /var/lib/vz/dump/ -name \"*.vma*\"",
"description": "Trouver des sauvegardes VM"
},
{
"command": "find /var/lib/vz/dump/ -name \"*.tar*\"",
"description": "Trouver des sauvegardes de conteneurs"
},
{
"command": "pvesm list <storage> --content backup",
"description": "Lister les sauvegardes dans le stockage spécifique"
},
{
"command": "rm /var/lib/vz/dump/<backup-file>",
"description": "Supprimer un fichier de sauvegarde"
},
{
"command": "cat /etc/vzdump.conf",
"description": "Afficher la configuration de sauvegarde"
}
]
},
{
"title": "Sauvegardes programmées",
"commands": [
{
"command": "cat /etc/pve/jobs.cfg",
"description": "Afficher le calendrier de sauvegarde"
},
{
"command": "nano /etc/vzdump.conf",
"description": "Modifier la configuration de sauvegarde"
},
{
"command": "systemctl list-timers",
"description": "Lister les minuteurs systemd"
},
{
"command": "systemctl status cron",
"description": "Vérifier l'état du service cron"
},
{
"command": "pvenode task list --typefilter vzdump",
"description": "Lister les tâches de sauvegarde terminées"
},
{
"command": "pvenode task log <upid>",
"description": "Afficher le journal d’une tâche de sauvegarde à partir de son UPID"
}
]
},
{
"title": "Opérations avancées",
"commands": [
{
"command": "qmrestore <backup> <vmid> --force",
"description": "Forcer la restauration en écrasant la VM existante"
},
{
"command": "vzdump <vmid> --dumpdir <directory>",
"description": "Spécifier le répertoire de sauvegarde personnalisé"
},
{
"command": "vzdump <vmid> --script <script>",
"description": "Exécuter un script de hook pendant la sauvegarde"
},
{
"command": "vzdump <vmid> --exclude-path <path>",
"description": "Exclure les chemins spécifiques de la sauvegarde"
},
{
"command": "vzdump <vmid> --ionice <priority>",
"description": "Définir la priorité E/S pour le processus de sauvegarde"
},
{
"command": "vzdump <vmid> --lockwait <minutes>",
"description": "Attendez le verrou"
},
{
"command": "qm importdisk <vmid> <disk-image> <storage>",
"description": "Importer un fichier image disque (par exemple raw, qcow2 ou vmdk) comme disque inutilisé, pas une archive de sauvegarde vzdump"
}
]
}
],
"testRestores": {
"title": "Testez vos restaurations",
"bodyRich": "Restaurez régulièrement une sauvegarde vers un VMID de test libre avec <code>qmrestore --unique</code>, démarrez la VM dans un réseau de test isolé et vérifiez son contenu. L’option unique génère de nouvelles adresses MAC ; elle ne change ni les IP statiques ni les paramètres des applications. Testez les conteneurs de même avec <code>pct restore</code>."
},
"related": {
"heading": "Rubriques connexes",
"items": [
{
"href": "/docs/help-info/vm-ct-commands",
"label": "Gestion VM et CT",
"tail": "— commandes du cycle de vie qm et pct."
},
{
"href": "/docs/help-info/storage-commands",
"label": "Stockage et disques",
"tail": "— gestion du stockage pvesm."
},
{
"href": "/docs/help-info",
"label": "Vue d’ensemble de l’aide et des informations",
"tail": "."
}
]
}
}
@@ -0,0 +1,162 @@
{
"meta": {
"title": "Commandes de passthrough GPU dans Proxmox — lspci, VFIO, IOMMU, qm set hostpci | ProxMenux",
"description": "Référence du passthrough GPU sur Proxmox VE : identification des périphériques avec lspci, modules VFIO, groupes IOMMU (intel_iommu / amd_iommu), mises à jour GRUB et initramfs, qm set hostpci0 et configuration NVIDIA / AMD / Intel.",
"ogTitle": "Commandes de passthrough GPU dans Proxmox — lspci, VFIO, IOMMU, qm set hostpci",
"ogDescription": "Référence pour inspecter et configurer le passthrough GPU dans Proxmox VE : périphériques PCI, modules VFIO, groupes IOMMU, paramètres de démarrage du noyau et qm set hostpci.",
"twitterTitle": "Commandes de passthrough GPU dans Proxmox | ProxMenux",
"twitterDescription": "Inspectez les périphériques PCI, configurez VFIO et IOMMU et attachez des GPU aux VM sur Proxmox VE."
},
"header": {
"title": "Passthrough GPU",
"description": "Référence pour l'inspection et la configuration de GPU / TPU passthrough sur Proxmox: identification du périphérique (lspci), configuration du module VFIO, validation IOMMU, mises à jour initramfs / GRUB et config passthrough par VM (qm set hostpci, machine q35, bios ovmf).",
"section": "Aide et informations"
},
"intro": {
"title": "IOMMU doit être activé en BIOS / UEFI",
"body": "Activez d’abord IOMMU dans le firmware : cherchez <em>VT-d</em>, <em>AMD-Vi</em> ou <em>IOMMU</em> dans le BIOS/UEFI. Sous Linux, il est activé par défaut sur AMD et sur Intel avec les noyaux Proxmox 6.8 et ultérieurs. Les anciens noyaux Intel peuvent nécessiter <code>intel_iommu=on</code>. L’option <code>iommu=pt</code> contrôle le mode passthrough d’IOMMU ; elle ne justifie pas de désactiver systématiquement le framebuffer de l’hôte."
},
"commandGroups": [
{
"title": "Identification du périphérique",
"commands": [
{
"command": "lspci -nn | grep -i nvidia",
"description": "Liste des périphériques NVIDIA PCI"
},
{
"command": "lspci -nn | grep -i vga",
"description": "Lister tous les appareils compatibles VGA"
},
{
"command": "lspci -nn | grep -i amd",
"description": "Liste des périphériques AMD PCI"
},
{
"command": "lspci -nnk | grep -A3 VGA",
"description": "Lister les périphériques VGA avec les pilotes du noyau"
},
{
"command": "lspci -v -s <PCI_ID>",
"description": "Afficher les informations détaillées pour un appareil PCI spécifique"
}
]
},
{
"title": "Configuration VFIO",
"commands": [
{
"command": "dmesg | grep -i vfio",
"description": "Vérifiez les messages du module VFIO"
},
{
"command": "cat /etc/modprobe.d/vfio.conf",
"description": "Consultez la configuration de passage VFIO"
},
{
"command": "ls -la /etc/modprobe.d/",
"description": "Liste tous les fichiers de configuration modprobe"
},
{
"command": "cat /etc/modules",
"description": "Afficher les modules chargés au démarrage"
},
{
"command": "lsmod | grep vfio",
"description": "Vérifier si les modules VFIO sont chargés"
}
]
},
{
"title": "Configuration IOMMU",
"commands": [
{
"command": "cat /etc/default/grub",
"description": "Vérifier les options GRUB pour IOMMU"
},
{
"command": "update-grub",
"description": "Appliquer les modifications GRUB"
},
{
"command": "dmesg | grep -i iommu",
"description": "Vérifiez les messages IOMMU dans le journal du noyau"
},
{
"command": "dmesg | grep -e DMAR -e IOMMU",
"description": "Vérifier les messages DMAR et IOMMU"
},
{
"command": "find /sys/kernel/iommu_groups/ -type l | sort -V",
"description": "Liste des groupes IOMMU"
}
]
},
{
"title": "Mises à jour du système",
"commands": [
{
"command": "update-initramfs -u",
"description": "Appliquer les modifications d'initramfs (VFIO)"
},
{
"command": "update-initramfs -u -k all",
"description": "Mettre à jour initramfs pour tous les noyaux"
},
{
"command": "cat /proc/cmdline",
"description": "Afficher les paramètres actuels de démarrage du noyau"
}
]
},
{
"title": "Configuration VM",
"commands": [
{
"command": "qm config <vmid> | grep hostpci",
"description": "Afficher la configuration de passthrough PCI d’une VM"
},
{
"command": "qm set <vmid> -hostpci0 <PCI_ID>,pcie=1,x-vga=1",
"description": "Ajouter un passthrough GPU à une VM"
},
{
"command": "cat /etc/pve/qemu-server/<vmid>.conf",
"description": "Afficher le fichier de configuration VM"
},
{
"command": "qm set <vmid> -machine q35",
"description": "Définissez VM pour utiliser le jeu de puces Q35 (recommandé pour passer)"
},
{
"command": "qm set <vmid> -bios ovmf",
"description": "Configurer la VM en UEFI/OVMF, recommandé si la ROM du GPU prend en charge UEFI"
}
]
}
],
"afterChangesTip": {
"title": "Après modification des configurations GRUB ou modprobe",
"bodyRich": "Sur les hôtes utilisant GRUB, appliquez les paramètres de démarrage avec <code>update-grub</code>. Actualisez les modules avec <code>update-initramfs -u -k all</code>, puis redémarrez. Les autres chargeurs d’amorçage ont leur propre procédure. Vérifiez <code>cat /proc/cmdline</code> (paramètres du noyau), <code>dmesg | grep -i iommu</code> (IOMMU initialisé) et <code>find /sys/kernel/iommu_groups/ -type l | sort -V</code> (groupes présents)."
},
"related": {
"heading": "Rubriques connexes",
"items": [
{
"href": "/docs/hardware/gpu-vm-passthrough",
"label": "Ajouter GPU à VM (Passthrough)",
"tail": "— flux interactif ProxMenux."
},
{
"href": "/docs/hardware/igpu-acceleration-lxc",
"label": "Ajouter un GPU à LXC",
"tail": " — partager l’accès aux périphériques GPU de l’hôte avec un conteneur LXC."
},
{
"href": "/docs/help-info",
"label": "Vue d’ensemble de l’aide et des informations",
"tail": "."
}
]
}
}
+87
View File
@@ -0,0 +1,87 @@
{
"meta": {
"title": "Référence des commandes Proxmox — qm, pct, vzdump, zpool, pveversion | ProxMenux",
"description": "Sélection de commandes essentielles de Proxmox VE et Linux, classées par thème : inspection du système, gestion des VM et LXC (qm / pct), stockage et disques, réseau, mises à jour, passthrough GPU, ZFS, sauvegarde et restauration, et outils de terminal au quotidien.",
"ogTitle": "Référence des commandes Proxmox — qm, pct, vzdump, zpool",
"ogDescription": "Sélection de commandes utiles de Proxmox VE et Linux par thème : système, VM/CT, stockage, réseau, mises à jour, passthrough GPU, ZFS, sauvegarde et outils CLI.",
"twitterTitle": "Référence des commandes Proxmox | ProxMenux",
"twitterDescription": "Sélection de commandes utiles de Proxmox VE et Linux, regroupées par thème."
},
"header": {
"title": "Aide et informations",
"description": "Sélection de commandes utiles de Linux et Proxmox VE par thème. Les neuf catégories vont d’une simple vérification avec pveversion à une séquence multiligne de zfs send/receive. Cette référence complète les sections GPU, disques et partages de ProxMenux.",
"section": "Aide et informations"
},
"intro": {
"title": "Ce que c'est",
"body": "Un catalogue des commandes utilisées au quotidien sur un hôte Proxmox, regroupées par thème. Dans ProxMenux, choisissez un numéro pour exécuter directement une commande ou collez la vôtre à l’invite. Sur ce site, chaque catégorie est présentée dans un tableau prêt à copier."
},
"opening": {
"heading": "Ouverture du menu",
"body": "À partir du menu principal de ProxMenux, appuyez sur <kbd>h</kbd>. Vous verrez ceci :",
"imageAlt": "Menu Aide et informations avec neuf catégories de commandes"
},
"categories": {
"heading": "Les neuf catégories",
"options": [
{
"icon": "Terminal",
"href": "/docs/help-info/system-commands",
"title": "Commandes système utiles",
"description": "pveversion, uptime, free, journalctl, hostnamectl, informations sur l’utilisateur courant, audit lynis et fastfetch."
},
{
"icon": "Cpu",
"href": "/docs/help-info/vm-ct-commands",
"title": "Gestion VM et CT",
"description": "qm list / config / start / stop / migrate, pct list / config / enter, instantanés et clonage."
},
{
"icon": "HardDrive",
"href": "/docs/help-info/storage-commands",
"title": "Stockage et disques",
"description": "lsblk, blkid, smartctl, informations sur les montages, pvesm status et commandes LVM."
},
{
"icon": "Network",
"href": "/docs/help-info/network-commands",
"title": "Commandes réseau",
"description": "ip / ss / nmcli, inspection des ponts réseau, ping / traceroute, requêtes DNS et fail2ban-client."
},
{
"icon": "Package",
"href": "/docs/help-info/update-commands",
"title": "Mises à jour et paquets",
"description": "apt update / dist-upgrade, apt-cache policy, requêtes dpkg et vérification des fichiers de dépôts."
},
{
"icon": "Cpu",
"href": "/docs/help-info/gpu-commands",
"title": "Passthrough GPU",
"description": "Vérifications avec lspci / dmesg, contrôle de l’activation d’IOMMU, liaison à vfio-pci et utilisation du GPU depuis l’hôte."
},
{
"icon": "Database",
"href": "/docs/help-info/zfs-commands",
"title": "Gestion ZFS",
"description": "Commandes zpool / zfs pour l’état, les datasets, les instantanés, send/receive, le réglage d’ARC et TRIM."
},
{
"icon": "Archive",
"href": "/docs/help-info/backup-commands",
"title": "Sauvegarde et restauration",
"description": "vzdump, qmrestore / pct restore, outils pour Proxmox Backup Server et opérations sur les instantanés."
},
{
"icon": "Wrench",
"href": "/docs/help-info/tools-commands",
"title": "Outils CLI système",
"description": "tmux, screen, htop / btop, ncdu, jq, dig, lsof, watch — outils d’administration au quotidien."
}
]
},
"tip": {
"title": "Recherche à partir de la recherche globale",
"body": "Toutes les commandes de ces pages sont indexées par la recherche de la documentation. Si vous vous souvenez d’une option ou d’un fragment, mais pas de la page, utilisez la barre de recherche en haut pour retrouver directement la bonne entrée."
}
}
@@ -0,0 +1,174 @@
{
"meta": {
"title": "Commandes réseau Proxmox — ip, ping, ss, pve-firewall, iptables | ProxMenux",
"description": "Référence des commandes réseau de l’hôte Proxmox VE : ip / ip link / ip addr, ping, traceroute, mtr, ss, ethtool, dig, nslookup, ainsi que pve-firewall, iptables et nftables pour le filtrage. Inspection des ponts, des agrégations de liens et des VLAN.",
"ogTitle": "Commandes réseau Proxmox — ip, ping, ss, pve-firewall, iptables",
"ogDescription": "Commandes réseau pour Proxmox VE : inspection des interfaces, tests de connectivité, surveillance, pare-feu (pve-firewall, iptables, nftables) et requêtes DNS.",
"twitterTitle": "Commandes réseau Proxmox | ProxMenux",
"twitterDescription": "Commandes d'inspection, de test, de configuration et de pare-feu réseau pour Proxmox VE."
},
"header": {
"title": "Commandes réseau",
"description": "Sélection de commandes réseau pour l’hôte Proxmox : informations sur les interfaces, tests de connectivité, configuration, surveillance du trafic et gestion du pare-feu. Inclut ip / ss / nmcli / ethtool / tcpdump / pve-firewall.",
"section": "Aide et informations"
},
"intro": {
"title": "Inventaire rapide des interfaces",
"body": "<code>ip a</code> affiche chaque interface avec ses IP et MAC. <code>ip r</code> affiche la table de routage. Ensemble, ils répondent à la plupart des questions « cette interface est-elle configurée correctement ? » en quelques secondes."
},
"commandGroups": [
{
"title": "Information réseau",
"commands": [
{
"command": "ip a",
"description": "Afficher les interfaces réseau et les adresses IP"
},
{
"command": "ip r",
"description": "Afficher la table de routage"
},
{
"command": "ip -s link",
"description": "Afficher les statistiques de trafic par interface"
},
{
"command": "brctl show",
"description": "Afficher les ponts réseau configurés"
},
{
"command": "cat /etc/network/interfaces",
"description": "Afficher la configuration réseau brute"
}
]
},
{
"title": "Essais en réseau",
"commands": [
{
"command": "ping <host>",
"description": "Vérifiez la connectivité avec un autre hôte"
},
{
"command": "traceroute <host>",
"description": "Tracer la route vers un hôte"
},
{
"command": "mtr <host>",
"description": "Combiner ping et traceroute en temps réel"
},
{
"command": "dig <domain>",
"description": "Recherche DNS pour un domaine"
},
{
"command": "nslookup <domain>",
"description": "Autre recherche DNS"
}
]
},
{
"title": "Configuration réseau",
"commands": [
{
"command": "ifreload -a",
"description": "Recharger la configuration réseau (ifupdown2)"
},
{
"command": "ethtool <iface>",
"description": "Afficher les informations sur le périphérique Ethernet"
},
{
"command": "resolvectl status",
"description": "Afficher l'état de la résolution DNS"
},
{
"command": "nmcli device show",
"description": "Afficher les détails du périphérique réseau (si NetworkManager est utilisé)"
},
{
"command": "ip link set <iface> up",
"description": "Activer une interface réseau"
},
{
"command": "ip link set <iface> down",
"description": "Désactiver une interface réseau"
}
]
},
{
"title": "Surveillance des réseaux",
"commands": [
{
"command": "ss -tuln",
"description": "Afficher les ports d'écoute (TCP/UDP)"
},
{
"command": "netstat -tuln",
"description": "Autre commande pour afficher les ports en écoute"
},
{
"command": "lsof -i",
"description": "Liste des fichiers et connexions réseau ouverts"
},
{
"command": "tcpdump -i <iface>",
"description": "Capturer les paquets sur l'interface"
},
{
"command": "iftop -i <iface>",
"description": "Surveiller l'utilisation de la bande passante sur l'interface"
}
]
},
{
"title": "Gestion du pare-feu",
"commands": [
{
"command": "iptables -L -n -v",
"description": "Afficher les règles de pare-feu actives (iptables)"
},
{
"command": "nft list ruleset",
"description": "Afficher les règles nftables"
},
{
"command": "pve-firewall status",
"description": "Vérifier l'état du pare-feu Proxmox"
},
{
"command": "pve-firewall compile",
"description": "Compiler les règles de pare-feu pour tous les nœuds"
},
{
"command": "pve-firewall reload",
"description": "Recharger les règles du pare-feu Proxmox"
}
]
}
],
"iptablesTip": {
"title": "iptables vs nftables",
"bodyRich": "Le service classique <code>pve-firewall</code> génère des règles iptables. Le service alternatif proxmox-firewall utilise <strong>nftables</strong>. Inspectez le moteur iptables avec <code>iptables -L -n -v</code> et le moteur nftables avec <code>nft list ruleset</code>. Utilisez les outils du moteur activé : ces listes ne sont pas interchangeables."
},
"related": {
"heading": "Rubriques connexes",
"items": [
{
"href": "/docs/network",
"label": "Gestion du réseau",
"tail": "— outils de réseau interactifs ProxMenux (analyse des ponts, noms persistants, surveillance)."
},
{
"href": "/docs/help-info/tools-commands",
"label": "Outils CLI système",
"tail": "— davantage d'outils de surveillance des réseaux."
},
{
"href": "/docs/help-info",
"label": "Vue d’ensemble de l’aide et des informations",
"tail": "."
}
]
}
}
@@ -0,0 +1,232 @@
{
"meta": {
"title": "Commandes de stockage et de disques Proxmox — lsblk, LVM, pvesm, qm importdisk | ProxMenux",
"description": "Référence des commandes de stockage et de disque sous Proxmox VE : lsblk, blkid, parted, lvdisplay, vgdisplay, pvs, mount, df, du, ncdu et pvesm status, ainsi que qm importdisk et qemu-img convert pour les disques de VM.",
"ogTitle": "Commandes de stockage et de disques Proxmox — lsblk, LVM, pvesm, qm importdisk",
"ogDescription": "Référence des commandes de stockage et de disque sur Proxmox VE — inspection du disque, LVM, montages, gestion du stockage Proxmox, importation de disque VM et conversion d'image.",
"twitterTitle": "Commandes de stockage Proxmox | ProxMenux",
"twitterDescription": "Inspection de disque, informations de montage, gestion LVM, stockage Proxmox et commandes d'importation / conversion de disque VM."
},
"header": {
"title": "Stockage et disques",
"description": "Sélection de commandes pour inspecter le stockage des hôtes Proxmox : périphériques blocs, partitions, montages, volumes LVM, configuration du stockage et opérations sur les disques VM (importdisk, qemu-img convert).",
"section": "Aide et informations"
},
"intro": {
"title": "Inventaire rapide du disque",
"body": "<code>lsblk</code> affiche les périphériques blocs et leurs partitions en arborescence. Consultez leurs identifiants persistants avec <code>ls -lh /dev/disk/by-id/</code> : pour un même disque, ils restent généralement stables après un redémarrage ou un changement d’ordre des périphériques. Remplacer le disque ou modifier la façon dont le contrôleur expose son identité peut changer le chemin by-id."
},
"commandGroups": [
{
"title": "Informations sur le disque",
"commands": [
{
"command": "lsblk",
"description": "Lister les périphériques blocs et les partitions"
},
{
"command": "fdisk -l",
"description": "Répertorier les disques avec des informations détaillées"
},
{
"command": "blkid",
"description": "Afficher l'UUID et le type de système de fichiers des périphériques de bloc"
},
{
"command": "ls -lh /dev/disk/by-id/",
"description": "Répertorier les identifiants persistants du disque"
},
{
"command": "parted -l",
"description": "Disposition détaillée des partitions avec informations GPT"
}
]
},
{
"title": "Utilisation du stockage",
"commands": [
{
"command": "df -h",
"description": "Afficher l'utilisation du disque par point de montage"
},
{
"command": "du -sh /path",
"description": "Afficher la taille d'un répertoire"
},
{
"command": "mount | grep ^/dev",
"description": "Afficher les périphériques de stockage montés"
},
{
"command": "cat /proc/mounts",
"description": "Afficher tous les montages actifs du noyau"
}
]
},
{
"title": "Gestion de LVM",
"commands": [
{
"command": "pvdisplay",
"description": "Afficher les volumes physiques (LVM)"
},
{
"command": "vgdisplay",
"description": "Afficher les groupes de volumes (LVM)"
},
{
"command": "lvdisplay",
"description": "Afficher les volumes logiques (LVM)"
},
{
"command": "pvs",
"description": "Sortie concise des volumes physiques"
},
{
"command": "vgs",
"description": "Sortie concise des groupes de volumes"
},
{
"command": "lvs",
"description": "Sortie concise des volumes logiques"
}
]
},
{
"title": "Stockage Proxmox",
"commands": [
{
"command": "cat /etc/pve/storage.cfg",
"description": "Afficher la configuration du stockage Proxmox"
},
{
"command": "pvesm status",
"description": "Afficher l'état de tous les pools de stockage"
},
{
"command": "pvesm status --enabled 1",
"description": "Lister les stockages configurés et activés"
},
{
"command": "pvesm list <storage>",
"description": "Répertorier le contenu d'un stockage spécifique"
},
{
"command": "pvesm scan nfs <server>",
"description": "Découvrir les exports NFS d’un serveur"
}
]
},
{
"title": "Actions du disque",
"commands": [
{
"command": "qm importdisk <vmid> <image_path> <storage>",
"description": "Importer l’image comme disque inutilisé de la VM, puis l’attacher séparément"
},
{
"command": "qm set <vmid> -<bus><index> <disk_path>",
"description": "Attribuer le disque physique au VM (mode passant)"
},
{
"command": "qemu-img convert -O <format> <input> <output>",
"description": "Convertir le format d’une image disque hors ligne"
}
]
},
{
"title": "Santé des disques SMART",
"commands": [
{
"command": "smartctl --scan",
"description": "Liste des périphériques compatibles SMART sur l'hôte"
},
{
"command": "smartctl -i /dev/<disk>",
"description": "Informations de base sur l'appareil (modèle, firmware, série)"
},
{
"command": "smartctl -H /dev/<disk>",
"description": "Vérification rapide de l’état général : PASSED / FAILED"
},
{
"command": "smartctl -A /dev/<disk>",
"description": "Attributs SMART uniquement (valeurs brutes, seuils)"
},
{
"command": "smartctl -a /dev/<disk>",
"description": "Informations SMART complètes : appareil, attributs et journal des autotests"
},
{
"command": "smartctl -t short /dev/<disk>",
"description": "Lancer un autotest court, environ deux minutes en arrière-plan"
},
{
"command": "smartctl -t long /dev/<disk>",
"description": "Lancer un autotest long, plusieurs heures en arrière-plan"
},
{
"command": "smartctl -l selftest /dev/<disk>",
"description": "Voir le journal d'auto-essai (résultats des tests passés)"
},
{
"command": "smartctl -X /dev/<disk>",
"description": "Interrompre l’autotest en cours"
}
]
},
{
"title": "Santé des disques NVMe",
"commands": [
{
"command": "nvme list",
"description": "Liste des dispositifs NVMe visibles au noyau"
},
{
"command": "nvme smart-log /dev/<nvme>",
"description": "NVMe-spécifique SMART log (température, usure, erreurs)"
},
{
"command": "nvme id-ctrl /dev/<nvme>",
"description": "Informations de contrôleur (modèle, firmware, capacités)"
},
{
"command": "nvme error-log /dev/<nvme>",
"description": "Entrées récentes du journal des erreurs NVMe"
}
]
}
],
"lvmTip": {
"title": "LVM commandes courtes vs longues",
"bodyRich": "Les deux formes sont disponibles. <code>pvs</code> / <code>vgs</code> / <code>lvs</code> produisent des tableaux compacts avec une ligne par volume physique, groupe de volumes ou volume logique, respectivement. <code>pvdisplay</code> / <code>vgdisplay</code> / <code>lvdisplay</code> fournissent davantage de détails sur plusieurs lignes. Les formes courtes sont pratiques au quotidien."
},
"smartInfo": {
"title": "SMART pour SATA/SAS et NVMe",
"bodyRich": "<strong>Les disques SATA / SAS, y compris les SSD,</strong> peuvent être inspectés avec <code>smartctl</code> de <code>smartmontools</code>, installé par défaut sur Proxmox. Indiquez le périphérique, par exemple <code>/dev/sda</code> ou <code>/dev/sdb</code>. <strong>Les disques NVMe</strong> utilisent un autre protocole natif. <code>smartctl</code> les prend aussi en charge ; <code>nvme</code> de <code>nvme-cli</code> fournit des requêtes propres aux contrôleurs, espaces de noms et informations de santé NVMe. Installez-le avec <code>apt install nvme-cli</code> s’il manque."
},
"selfTestWarn": {
"title": "Les auto-tests se déroulent en arrière-plan",
"bodyRich": "Sur les disques compatibles, <code>smartctl -t short /dev/&lt;disk&gt;</code> et <code>smartctl -t long /dev/&lt;disk&gt;</code> lancent des tests en arrière-plan et rendent immédiatement la main. Vérifiez la progression avec <code>smartctl -a /dev/&lt;disk&gt;</code>, en cherchant \"Self-test routine in progress\", ou attendez et lisez <code>smartctl -l selftest /dev/&lt;disk&gt;</code>. Les tests courts durent souvent deux minutes, les longs peuvent prendre des heures. Le disque reste utilisable, avec une baisse possible des performances d’E/S."
},
"related": {
"heading": "Rubriques connexes",
"items": [
{
"href": "/docs/help-info/zfs-commands",
"label": "Gestion ZFS",
"tail": "— commandes zpool / zfs pour le stockage soutenu par ZFS."
},
{
"href": "/docs/disk-manager",
"label": "Gestionnaire de disque",
"tail": "— flux interactifs ProxMenux pour la transmission du disque, l'importation, le formatage, SMART."
},
{
"href": "/docs/help-info",
"label": "Vue d’ensemble de l’aide et des informations",
"tail": "."
}
]
}
}
@@ -0,0 +1,158 @@
{
"meta": {
"title": "Commandes système Proxmox VE — pveversion, uptime, journalctl, systemctl | ProxMenux",
"description": "Commandes système Proxmox VE et Linux pour les versions, la durée de fonctionnement, la mémoire, les services, les journaux et les utilisateurs, avec des outils d’audit et de synthèse. Une commande redémarre un service : tous les exemples ne sont pas en lecture seule.",
"ogTitle": "Commandes système Proxmox VE — pveversion, uptime, journalctl, systemctl",
"ogDescription": "Commandes système Proxmox VE et Linux pour la version, la durée de fonctionnement, les services, les journaux et les utilisateurs, avec gestion des services et outils d’audit.",
"twitterTitle": "Commandes système Proxmox VE | ProxMenux",
"twitterDescription": "Commandes essentielles d'inspection du système pour Proxmox VE — version, état, services, journaux, informations utilisateur."
},
"header": {
"title": "Commandes système utiles",
"description": "Commandes d’inspection de l’hôte Proxmox : version, noyau, durée de fonctionnement, mémoire, état de l’interface web, journaux récents et utilisateurs connectés, avec des outils d’audit et de synthèse. La plupart consultent l’état, mais systemctl restart pveproxy redémarre le proxy web et les audits peuvent écrire des rapports et des journaux.",
"section": "Aide et informations"
},
"intro": {
"title": "Ce que c'est",
"body": "La même liste numérotée que dans <em>Commandes système utiles</em> dans ProxMenux. Utilisez le bouton Copier pour récupérer une commande ou consultez la liste pour retrouver l’option exacte."
},
"commandGroups": [
{
"title": "Informations système",
"commands": [
{
"command": "pveversion",
"description": "Afficher la version de Proxmox"
},
{
"command": "pveversion -v",
"description": "Informations détaillées sur la version Proxmox"
},
{
"command": "hostnamectl",
"description": "Nom d'hôte du système et informations sur le noyau"
},
{
"command": "uname -a",
"description": "Informations sur le noyau et l'architecture"
},
{
"command": "cat /etc/os-release",
"description": "Détails de la version du système d'exploitation"
}
]
},
{
"title": "État du système",
"commands": [
{
"command": "uptime",
"description": "Durée de fonctionnement du système"
},
{
"command": "uptime -p",
"description": "Durée de fonctionnement dans un format lisible"
},
{
"command": "free -h",
"description": "Utilisation de la RAM et du swap"
},
{
"command": "who -b",
"description": "Heure du dernier démarrage du système"
},
{
"command": "last -x | grep shutdown",
"description": "Arrêts précédents"
}
]
},
{
"title": "Gestion des services",
"commands": [
{
"command": "systemctl status pveproxy",
"description": "Vérifier l'état de l'interface utilisateur Web de Proxmox"
},
{
"command": "systemctl restart pveproxy",
"description": "Redémarrer le proxy de l'interface utilisateur Web"
},
{
"command": "journalctl -xe",
"description": "Erreurs système et journaux"
},
{
"command": "dmesg -T | tail -n 50",
"description": "50 dernières lignes de journal du noyau"
}
]
},
{
"title": "Informations utilisateur",
"commands": [
{
"command": "whoami",
"description": "Utilisateur actuel"
},
{
"command": "id",
"description": "UID, GID et groupes de l'utilisateur actuel"
},
{
"command": "who",
"description": "Utilisateurs connectés"
},
{
"command": "w",
"description": "Activité des utilisateurs et durée de fonctionnement"
},
{
"command": "uptime && w",
"description": "Durée de fonctionnement et utilisateurs connectés"
},
{
"command": "cut -d: -f1,3,4 /etc/passwd",
"description": "Tous les utilisateurs avec UID et GID"
},
{
"command": "getent passwd | column -t -s :",
"description": "Table utilisateur lisible (UID, shell, etc.)"
}
]
},
{
"title": "Outils de vérification et de résumé",
"commands": [
{
"command": "lynis audit system",
"description": "Exécuter un audit complet de la sécurité du système"
},
{
"command": "fastfetch",
"description": "Afficher le résumé du système au format ASCII"
}
]
}
],
"related": {
"heading": "Rubriques connexes",
"items": [
{
"href": "/docs/help-info/update-commands",
"label": "Mises à jour et paquets",
"tail": " — commandes apt et de mise à niveau de PVE."
},
{
"href": "/docs/help-info/tools-commands",
"label": "Outils CLI système",
"tail": " — htop, btop, ncdu et outils similaires."
},
{
"href": "/docs/help-info",
"label": "Vue d’ensemble de l’aide et des informations",
"tail": "."
}
]
}
}
@@ -0,0 +1,276 @@
{
"meta": {
"title": "Outils CLI Linux pour Proxmox — htop, iftop, journalctl, rsync, tmux | ProxMenux",
"description": "Outils CLI Linux pour administrer Proxmox VE au quotidien : surveillance (htop, atop, glances, iotop), réseau (iftop, nmap, mtr, ss), fichiers et texte (find, grep, journalctl), performances (iostat, perf, strace), sécurité (fail2ban, lynis, lsof) et administration à distance (ssh, rsync, tmux).",
"ogTitle": "Outils CLI Linux pour Proxmox — htop, iftop, journalctl, rsync, tmux",
"ogDescription": "Outils quotidiens CLI pour l'administration Proxmox VE regroupés par fonction : surveillance, réseau, fichier/texte, performance, sécurité et administration à distance.",
"twitterTitle": "Outils CLI Linux pour Proxmox | ProxMenux",
"twitterDescription": "Outils CLI pour administrer Proxmox VE au quotidien, regroupés par fonction."
},
"header": {
"title": "Outils CLI système",
"description": "Outils CLI pour administrer l’hôte Proxmox au quotidien, classés par fonction : surveillance, réseau, fichiers et texte, analyse des performances, sécurité, administration à distance et configuration du système.",
"section": "Aide et informations"
},
"intro": {
"title": "La plupart sont installés par le script de post-installation",
"body": "Si vous avez exécuté le script de post-installation avec les choix par défaut, la plupart de ces outils sont déjà installés. Pour les outils manquants, l’<utilsLink>installateur d’utilitaires système</utilsLink> de ProxMenux propose des groupes prédéfinis : base, développement, réseau, analyse, etc."
},
"commandGroups": [
{
"title": "Surveillance du système",
"commands": [
{
"command": "htop",
"description": "Visualiseur interactif des processus avec utilisation du CPU et de la mémoire"
},
{
"command": "top",
"description": "Afficher les processus Linux en temps réel"
},
{
"command": "atop",
"description": "Moniteur avancé du système et des processus"
},
{
"command": "glances",
"description": "Outil de surveillance du système avec interface web"
},
{
"command": "nmon",
"description": "Outil de surveillance des performances"
},
{
"command": "iotop",
"description": "Surveiller les entrées-sorties disque des processus"
},
{
"command": "vmstat 1",
"description": "Signaler des statistiques de mémoire virtuelle chaque seconde"
}
]
},
{
"title": "Outils réseau",
"commands": [
{
"command": "iftop",
"description": "Affichage de l'utilisation de la bande passante sur une interface"
},
{
"command": "nmap <host>",
"description": "Exploration du réseau et balayage de sécurité"
},
{
"command": "tcpdump -i <interface>",
"description": "Capturer le trafic réseau"
},
{
"command": "netstat -tuln",
"description": "Afficher les connexions réseau"
},
{
"command": "ss -tuln",
"description": "Autre utilitaire pour étudier les sockets"
},
{
"command": "mtr <host>",
"description": "Outil de diagnostic réseau combinant ping et traceroute"
},
{
"command": "iperf3 -s",
"description": "Lancer le serveur iperf pour tester la bande passante"
}
]
},
{
"title": "Outils de fichiers et de texte",
"commands": [
{
"command": "find / -name <filename>",
"description": "Rechercher des fichiers par nom"
},
{
"command": "grep -r 'pattern' /path",
"description": "Rechercher le modèle dans les fichiers"
},
{
"command": "sed -i 's/old/new/g' file",
"description": "Remplacer le texte dans les fichiers"
},
{
"command": "awk '{print $1}' file",
"description": "Outil de traitement de texte"
},
{
"command": "tail -f /var/log/syslog",
"description": "Suivre le fichier journal en temps réel"
},
{
"command": "less /var/log/messages",
"description": "Afficher le fichier avec pagination"
},
{
"command": "journalctl -f",
"description": "Suivre les journaux de systemd"
}
]
},
{
"title": "Analyse des performances",
"commands": [
{
"command": "iostat -x 1",
"description": "Rapports statistiques CPU et E/S"
},
{
"command": "mpstat -P ALL 1",
"description": "Rapport sur l'utilisation des CPU"
},
{
"command": "perf top",
"description": "Outil de profilage du système"
},
{
"command": "strace <command>",
"description": "Tracez les appels et signaux du système"
},
{
"command": "lsof",
"description": "Liste des fichiers ouverts"
},
{
"command": "pstree",
"description": "Affichage de l'arborescence du processus"
},
{
"command": "slabtop",
"description": "Afficher les informations du cache slab du noyau"
}
]
},
{
"title": "Outils de sécurité",
"commands": [
{
"command": "fail2ban-client status",
"description": "Afficher le statut de fail2ban"
},
{
"command": "chage -l <username>",
"description": "Afficher les informations d'expiration du mot de passe"
},
{
"command": "lastlog",
"description": "Afficher la dernière connexion de tous les utilisateurs"
},
{
"command": "last",
"description": "Afficher la liste des derniers utilisateurs connectés"
},
{
"command": "w",
"description": "Afficher qui est connecté et ce qu'ils font"
},
{
"command": "lynis audit system",
"description": "Outil de vérification de sécurité"
},
{
"command": "openssl s_client -connect host:port",
"description": "Tester les connexions SSL/TLS"
}
]
},
{
"title": "Administration à distance",
"commands": [
{
"command": "ssh <user>@<host>",
"description": "Connexion shell sécurisée"
},
{
"command": "scp <file> <user>@<host>:<path>",
"description": "Copier des fichiers de manière sécurisée"
},
{
"command": "rsync -avz <src> <dest>",
"description": "Synchroniser les fichiers/dossiers"
},
{
"command": "screen",
"description": "Multiplexeur terminal"
},
{
"command": "tmux",
"description": "Autre multiplexeur de terminal"
},
{
"command": "ssh-keygen -t rsa -b 4096",
"description": "Générer une paire de clés SSH"
},
{
"command": "ssh-copy-id <user>@<host>",
"description": "Copier la clé SSH sur le serveur"
}
]
},
{
"title": "Configuration du système",
"commands": [
{
"command": "systemctl status <service>",
"description": "Vérifier l'état du service"
},
{
"command": "journalctl -u <service>",
"description": "Consulter les journaux de service"
},
{
"command": "timedatectl",
"description": "Gérer la date et l’heure du système"
},
{
"command": "hostnamectl",
"description": "Gérer le nom d’hôte du système"
},
{
"command": "localectl",
"description": "Gérer les paramètres régionaux et le clavier du système"
},
{
"command": "update-alternatives --config <name>",
"description": "Configuration des solutions de remplacement du système"
},
{
"command": "dpkg-reconfigure <package>",
"description": "Reconfigurer un paquet installé"
}
]
}
],
"tmuxTip": {
"title": "Utiliser tmux / screen pour les commandes longues",
"bodyRich": "Exécutez les tâches longues, comme une sauvegarde, une mise à niveau ou un gros transfert rsync, dans <code>tmux</code> ou <code>screen</code> afin qu’une déconnexion SSH ne termine pas la session du terminal. Pour une session tmux, reconnectez-vous au même hôte avec le même utilisateur, puis lancez <code>tmux attach</code>. Les sessions screen ont leur propre commande de rattachement."
},
"related": {
"heading": "Rubriques connexes",
"items": [
{
"href": "/docs/utils/system-utils",
"label": "Installateur des utilitaires système",
"tail": "— installer tous ces outils manquants."
},
{
"href": "/docs/help-info/system-commands",
"label": "Commandes système utiles",
"tail": "— commandes d'inspection spécifiques à Proxmox."
},
{
"href": "/docs/help-info",
"label": "Vue d’ensemble de l’aide et des informations",
"tail": "."
}
]
}
}
@@ -0,0 +1,170 @@
{
"meta": {
"title": "Commandes de mise à jour et de gestion des paquets Proxmox — apt, pveupgrade, dpkg | ProxMenux",
"description": "Commandes de mise à jour et de gestion des paquets Proxmox VE : apt update, apt upgrade, apt dist-upgrade, pveupgrade, dpkg -l, informations sur les paquets et configuration des dépôts dans /etc/apt/sources.list.d/.",
"ogTitle": "Commandes de mise à jour et de gestion des paquets Proxmox — apt, pveupgrade, dpkg",
"ogDescription": "commandes apt, pveupgrade et dpkg pour garder Proxmox VE à jour — mises à jour du système, gestion des paquets, configuration du dépôt.",
"twitterTitle": "Commandes de mise à jour Proxmox | ProxMenux",
"twitterDescription": "Commandes apt et pveupgrade pour gérer les mises à jour et les paquets sur les hôtes Proxmox VE."
},
"header": {
"title": "Mises à jour et paquets",
"description": "Sélection de commandes apt et de mise à niveau Proxmox : mises à jour du système, installation, suppression et purge des paquets, requêtes avec apt-cache policy et dpkg -l, et inspection des dépôts.",
"section": "Aide et informations"
},
"intro": {
"title": "Toujours mettre à jour l'index en premier",
"body": "<code>apt update</code> actualise l’index local des paquets depuis les dépôts configurés. Sans cette étape, <code>apt install</code> peut utiliser des versions obsolètes ou échouer avec « Unable to locate package »."
},
"commandGroups": [
{
"title": "Mises à jour du système",
"commands": [
{
"command": "apt update && apt upgrade -y",
"description": "Actualiser les listes et mettre à jour les paquets installés (apt upgrade)"
},
{
"command": "apt dist-upgrade -y",
"description": "Mise à niveau complète du système, y compris les dépendances"
},
{
"command": "apt update",
"description": "Mettre à jour uniquement les listes de paquets"
},
{
"command": "apt upgrade",
"description": "Mettre à jour uniquement les paquets (interactifs)"
},
{
"command": "apt full-upgrade",
"description": "Mettre à niveau les paquets avec la gestion de la dépendance (interactive)"
}
]
},
{
"title": "Mises à jour de Proxmox",
"commands": [
{
"command": "pveupdate",
"description": "Mettre à jour les listes de packages Proxmox"
},
{
"command": "pveupgrade",
"description": "Lancer la mise à niveau interactive des paquets Proxmox"
},
{
"command": "pve8to9 --full",
"description": "Vérifier la préparation au passage de PVE 8 à 9, sans effectuer la mise à niveau"
},
{
"command": "ceph versions",
"description": "Afficher les versions des démons Ceph avant de planifier une mise à niveau"
}
]
},
{
"title": "Gestion des paquets",
"commands": [
{
"command": "apt autoremove --purge",
"description": "Supprimer les packages inutilisés et leur configuration"
},
{
"command": "apt clean",
"description": "Effacer le dépôt local des fichiers de paquets récupérés"
},
{
"command": "apt autoclean",
"description": "Effacer uniquement les fichiers de paquets périmés"
},
{
"command": "apt install <package>",
"description": "Installer un paquet spécifique"
},
{
"command": "apt remove <package>",
"description": "Supprimer un package"
},
{
"command": "apt purge <package>",
"description": "Supprimer un paquet et ses fichiers de configuration"
}
]
},
{
"title": "Informations sur les paquets",
"commands": [
{
"command": "apt list --installed",
"description": "Liste de tous les paquets installés"
},
{
"command": "apt search <keyword>",
"description": "Rechercher les paquets par mot-clé"
},
{
"command": "apt show <package>",
"description": "Afficher les informations détaillées sur un paquet"
},
{
"command": "dpkg -l",
"description": "Liste de tous les paquets installés (alternative)"
},
{
"command": "dpkg -l | grep <keyword>",
"description": "Rechercher les paquets installés par mot-clé"
},
{
"command": "apt-cache policy <package>",
"description": "Afficher les versions et les priorités des paquets"
}
]
},
{
"title": "Gestion des dépôts",
"commands": [
{
"command": "cat /etc/apt/sources.list",
"description": "Afficher les principales sources de dépôt APT"
},
{
"command": "ls -la /etc/apt/sources.list.d/",
"description": "Liste des fichiers sources supplémentaires du dépôt"
},
{
"command": "cat /etc/apt/sources.list.d/pve-enterprise.list",
"description": "Afficher la configuration du dépôt Proxmox Enterprise dans le fichier .list de PVE 8"
},
{
"command": "apt-key list",
"description": "Lister les anciennes clés de signature des dépôts si apt-key est disponible"
}
]
}
],
"backupWarn": {
"title": "Créer une sauvegarde avant les mises à niveau majeures",
"bodyRich": "Pour les mises à jour courantes, Proxmox recommande <code>apt update &amp;&amp; apt full-upgrade</code> ; examinez les changements de paquets avant de confirmer. Pour les <strong>mises à niveau majeures</strong> (PVE 8 → 9), utilisez la procédure ProxMenux <upgradeLink>Mettre à niveau PVE 8 vers PVE 9</upgradeLink>. Elle ajoute des vérifications préalables, la migration des dépôts et une validation finale. Créez d’abord une sauvegarde."
},
"related": {
"heading": "Rubriques connexes",
"items": [
{
"href": "/docs/utils/system-update",
"label": "Mise à jour du système Proxmox (interactive)",
"tail": "— wrapper qui fait tout cela avec une boîte de dialogue de confirmation, une reconstruction automatique de DKMS des pilotes gérés par ProxMenux lorsqu'un nouveau noyau est installé, et une invite de redémarrage. Également disponible à partir du bouton Mettre à jour maintenant du tableau de bord ProxMenux Monitor."
},
{
"href": "/docs/utils/upgrade-pve8-pve9",
"label": "Mettre à niveau le PVE 8 vers le PVE 9",
"tail": "— pour les mises à niveau en version majeure."
},
{
"href": "/docs/help-info",
"label": "Vue d’ensemble de l’aide et des informations",
"tail": "."
}
]
}
}
@@ -0,0 +1,182 @@
{
"meta": {
"title": "Commandes qm et pct de Proxmox — gestion des VM et des conteneurs LXC | ProxMenux",
"description": "Commandes qm et pct de Proxmox VE pour les VM et conteneurs LXC : list, config, start, stop, shutdown, reboot, destroy, clone, migrate, snapshot, resize, ainsi que pct exec / enter / push / pull pour les conteneurs.",
"ogTitle": "Commandes qm et pct de Proxmox — gestion des VM et des conteneurs LXC",
"ogDescription": "Commandes qm et pct de Proxmox VE pour gérer les machines virtuelles et conteneurs LXC en ligne de commande : démarrage, arrêt, configuration, instantanés, migration, clonage et suppression.",
"twitterTitle": "Commandes qm / pct de Proxmox | ProxMenux",
"twitterDescription": "Sélection de commandes qm / pct pour gérer les machines virtuelles et conteneurs LXC dans Proxmox VE."
},
"header": {
"title": "Gestion VM et CT",
"description": "Sélection de commandes qm pour les VM et pct pour les conteneurs LXC : listes, cycle de vie (start / stop / shutdown / destroy), inspection de configuration et opérations de conteneur avec exec, enter, push et pull.",
"section": "Aide et informations"
},
"intro": {
"title": "Trouver d'abord un VMID ou un CTID",
"body": "Presque chaque commande demande un identifiant numérique. Utilisez <code>qm list</code> pour les VM et <code>pct list</code> pour les conteneurs. Remplacez <code>&lt;vmid&gt;</code> / <code>&lt;ctid&gt;</code> dans les exemples par l’identifiant réel avant de les exécuter."
},
"commandGroups": [
{
"title": "Liste et renseignements",
"commands": [
{
"command": "qm list",
"description": "Lister toutes les machines virtuelles"
},
{
"command": "pct list",
"description": "Lister tous les conteneurs LXC"
},
{
"command": "qm config <vmid>",
"description": "Afficher la configuration de la VM interprétée par qm"
},
{
"command": "pct config <ctid>",
"description": "Afficher la configuration du conteneur interprétée par pct"
}
]
},
{
"title": "Fichiers de configuration (brut)",
"commands": [
{
"command": "cat /etc/pve/qemu-server/<vmid>.conf",
"description": "Afficher le fichier de configuration brut de la VM"
},
{
"command": "cat /etc/pve/lxc/<ctid>.conf",
"description": "Afficher le fichier de configuration CT brut"
},
{
"command": "nano /etc/pve/qemu-server/<vmid>.conf",
"description": "Modifier le fichier de configuration brut VM (nano)"
},
{
"command": "nano /etc/pve/lxc/<ctid>.conf",
"description": "Modifier le fichier de configuration brut CT (nano)"
},
{
"command": "vi /etc/pve/qemu-server/<vmid>.conf",
"description": "Modifier le fichier de configuration brut VM (vi)"
},
{
"command": "vi /etc/pve/lxc/<ctid>.conf",
"description": "Modifier le fichier de configuration brut CT (vi)"
}
]
},
{
"title": "Gestion VM",
"commands": [
{
"command": "qm start <vmid>",
"description": "Démarrez une machine virtuelle. Utilisez le bon <vmid>"
},
{
"command": "qm stop <vmid>",
"description": "Forcer l'arrêt d'une machine virtuelle. Utilisez le bon <vmid>"
},
{
"command": "qm shutdown <vmid>",
"description": "Arrêter proprement une machine virtuelle"
},
{
"command": "qm reset <vmid>",
"description": "Réinitialiser une machine virtuelle (redémarrage dur)"
},
{
"command": "qm suspend <vmid>",
"description": "Suspendre une machine virtuelle"
},
{
"command": "qm resume <vmid>",
"description": "Reprendre une machine virtuelle suspendue"
},
{
"command": "qm destroy <vmid>",
"description": "Supprimer une VM (irréversible). Utilisez le bon <vmid>"
}
]
},
{
"title": "Gestion des conteneurs",
"commands": [
{
"command": "pct start <ctid>",
"description": "Démarrez un conteneur. Utilisez le bon <ctid>"
},
{
"command": "pct stop <ctid>",
"description": "Forcer l'arrêt d'un conteneur. Utilisez le bon <ctid>"
},
{
"command": "pct shutdown <ctid>",
"description": "Arrêter proprement un conteneur"
},
{
"command": "pct reboot <ctid>",
"description": "Redémarrer un conteneur"
},
{
"command": "pct destroy <ctid>",
"description": "Supprimer un CT (irréversible). Utilisez le bon <ctid>"
}
]
},
{
"title": "Exploitation des conteneurs",
"commands": [
{
"command": "pct exec <ctid> -- getent passwd | column -t -s :",
"description": "Afficher les utilisateurs CT sous forme de tableau"
},
{
"command": "pct exec <ctid> -- ps aux --sort=-%mem | head",
"description": "Processus consommant le plus de mémoire dans le CT"
},
{
"command": "pct enter <ctid>",
"description": "Ouvrir le shell du conteneur"
},
{
"command": "pct push <ctid> <source> <dest>",
"description": "Copier le fichier de l'hôte vers le conteneur"
},
{
"command": "pct pull <ctid> <source> <dest>",
"description": "Copier le fichier du conteneur vers l'hôte"
}
]
}
],
"destroyWarn": {
"title": "La destruction est irréversible",
"bodyRich": "<code>qm destroy</code> et <code>pct destroy</code> suppriment la configuration de l’invité et ses volumes de disque gérés. Ne supposez pas que les données externes ou montées par bind mount sont effacées. La CLI ne demande pas confirmation par défaut. Sauvegardez d’abord les données utiles ; voir <backupLink>Sauvegarde et restauration</backupLink>."
},
"qmConfigTip": {
"title": "qm config ou modification directe du fichier .conf",
"bodyRich": "<code>qm config &lt;vmid&gt;</code> et <code>pct config &lt;ctid&gt;</code> affichent la configuration via les analyseurs Proxmox. Pour les modifications courantes, préférez <code>qm set</code> ou l’équivalent pct. Modifier directement <code>/etc/pve/qemu-server/&lt;vmid&gt;.conf</code> ou <code>/etc/pve/lxc/&lt;ctid&gt;.conf</code> contourne les validations et verrous des commandes de gestion ; le fichier doit rester interprétable. Arrêtez l’invité et gardez une copie avant une réparation manuelle. <code>pmxcfs</code> synchronise les configurations entre les nœuds du cluster, pas les données des disques invités."
},
"related": {
"heading": "Rubriques connexes",
"items": [
{
"href": "/docs/help-info/backup-commands",
"label": "Sauvegarde et restauration",
"tail": " — vzdump et qmrestore / pct restore."
},
{
"href": "/docs/help-info/storage-commands",
"label": "Stockage et disques",
"tail": "— qm importdisk et gestion du disque."
},
{
"href": "/docs/help-info",
"label": "Vue d’ensemble de l’aide et des informations",
"tail": "."
}
]
}
}
@@ -0,0 +1,227 @@
{
"meta": {
"title": "Commandes ZFS sur Proxmox — zpool, zfs snapshot, send/receive, scrub | ProxMenux",
"description": "Commandes de gestion ZFS sur Proxmox VE : zpool create / status / history, zfs list / get / set, instantanés, clone, zfs send et receive, scrub, clear, replace, zpool iostat et résumé d’ARC.",
"ogTitle": "Commandes ZFS sur Proxmox — zpool, zfs snapshot, send/receive, scrub",
"ogDescription": "Référence des commandes zpool et zfs sur Proxmox VE — pools, ensembles de données, instantanés, réplication, maintenance.",
"twitterTitle": "Commandes ZFS sur Proxmox | ProxMenux",
"twitterDescription": "commandes zpool et zfs pour Proxmox VE : pools, datasets, snapshots, réplication, maintenance."
},
"header": {
"title": "Gestion ZFS",
"description": "Sélection de commandes zpool et zfs : inspection des pools, création, lecture, modification et suppression de datasets, instantanés, clone et send/receive incrémental ou récursif, maintenance avec scrub / clear / replace, statistiques d’E/S et résumé d’ARC.",
"section": "Aide et informations"
},
"intro": {
"title": "Deux familles de commandes",
"body": "<code>zpool *</code> gère les pools de stockage, la couche physique : disques, vdevs et redondance. <code>zfs *</code> gère les datasets et les instantanés de ces pools, la couche logique : systèmes de fichiers, volumes, instantanés et propriétés."
},
"commandGroups": [
{
"title": "Informations sur le pool",
"commands": [
{
"command": "zpool list",
"description": "Lister tous les pools ZFS"
},
{
"command": "zpool status",
"description": "Afficher l'état et la santé du pool détaillé"
},
{
"command": "zpool status -v",
"description": "Afficher l'état du pool avec les erreurs"
},
{
"command": "zpool history",
"description": "Afficher l'historique des commandes pour tous les pools"
},
{
"command": "zpool history <pool>",
"description": "Afficher l'historique des commandes pour un pool spécifique"
},
{
"command": "zpool get all <pool>",
"description": "Afficher toutes les propriétés d'un pool"
}
]
},
{
"title": "Gestion des datasets",
"commands": [
{
"command": "zfs list",
"description": "Lister tous les ensembles de données ZFS"
},
{
"command": "zfs list -r <pool>",
"description": "Lister tous les ensembles de données dans un pool récursivement"
},
{
"command": "zfs create <pool>/<dataset>",
"description": "Créer un nouvel ensemble de données"
},
{
"command": "zfs destroy <pool>/<dataset>",
"description": "Détruire un ensemble de données"
},
{
"command": "zfs rename <pool>/<dataset> <pool>/<new-name>",
"description": "Renommer un ensemble de données"
},
{
"command": "zfs get all <pool>/<dataset>",
"description": "Afficher toutes les propriétés d'un ensemble de données"
},
{
"command": "zfs set compression=on <pool>/<dataset>",
"description": "Activer la compression sur un jeu de données"
}
]
},
{
"title": "Gestion des instantanés",
"commands": [
{
"command": "zfs list -t snapshot",
"description": "Liste de tous les instantanés"
},
{
"command": "zfs list -t snapshot -r <pool>",
"description": "Liste tous les instantanés dans un pool"
},
{
"command": "zfs snapshot <pool>/<dataset>@<snapshot-name>",
"description": "Créer un instantané"
},
{
"command": "zfs destroy <pool>/<dataset>@<snapshot-name>",
"description": "Supprimer un instantané"
},
{
"command": "zfs rollback <pool>/<dataset>@<snapshot-name>",
"description": "Retour à un instantané"
},
{
"command": "zfs hold <tag> <pool>/<dataset>@<snapshot-name>",
"description": "Protéger un instantané contre la suppression avec un hold"
},
{
"command": "zfs release <tag> <pool>/<dataset>@<snapshot-name>",
"description": "Lever la protection hold d’un instantané"
}
]
},
{
"title": "Clone et envoi/réception",
"commands": [
{
"command": "zfs clone <pool>/<dataset>@<snapshot> <pool>/<clone-name>",
"description": "Créer un clone à partir d'un instantané"
},
{
"command": "zfs send <pool>/<dataset>@<snapshot> > backup.zfs",
"description": "Envoyer un instantané dans un fichier"
},
{
"command": "zfs receive <pool>/<dataset> < backup.zfs",
"description": "Recevez un instantané à partir d'un fichier"
},
{
"command": "zfs send -i <pool>/<dataset>@<snap1> <pool>/<dataset>@<snap2> > incr.zfs",
"description": "Envoyer un instantané incrémental"
},
{
"command": "zfs send -R <pool>/<dataset>@<snapshot> > full-recursive.zfs",
"description": "Envoyer un instantané récursif"
}
]
},
{
"title": "Entretien et réparation",
"commands": [
{
"command": "zpool scrub <pool>",
"description": "Lancer une vérification scrub d’un pool"
},
{
"command": "zpool scrub -s <pool>",
"description": "Arrêter le scrub en cours"
},
{
"command": "zpool clear <pool>",
"description": "Réinitialiser les compteurs d’erreurs d’un pool"
},
{
"command": "zpool clear <pool> <device>",
"description": "Effacer les erreurs sur un périphérique spécifique"
},
{
"command": "zpool replace <pool> <old-device> <new-device>",
"description": "Remplacer un dispositif défectueux"
},
{
"command": "zpool offline <pool> <device>",
"description": "Prenez un appareil hors ligne"
},
{
"command": "zpool online <pool> <device>",
"description": "Apportez un appareil en ligne"
}
]
},
{
"title": "Performances et surveillance",
"commands": [
{
"command": "zpool iostat",
"description": "Afficher les statistiques E/S pour les pools"
},
{
"command": "zpool iostat -v",
"description": "Afficher les statistiques détaillées des E/S"
},
{
"command": "zpool iostat 5",
"description": "Afficher les statistiques d'E/S toutes les 5 secondes"
},
{
"command": "arc_summary",
"description": "Afficher les statistiques ARC (si installé)"
},
{
"command": "zfs get compressratio <pool>/<dataset>",
"description": "Afficher le rapport de compression"
},
{
"command": "zfs get used,available,referenced <pool>/<dataset>",
"description": "Afficher l'utilisation de l'espace"
}
]
}
],
"bestPractices": {
"title": "Meilleures pratiques opérationnelles",
"bodyRich": "Planifiez régulièrement <code>zpool scrub</code> pour vérifier les sommes de contrôle et examinez le résultat. Gardez de l’espace libre : l’effet d’un pool presque plein dépend de la charge et de sa structure. Utilisez <code>zpool replace</code> pour remplacer un périphérique défaillant, en suivant la procédure de son type de vdev. Detach + add n’est pas équivalent et peut modifier la topologie ou supprimer la redondance."
},
"related": {
"heading": "Rubriques connexes",
"items": [
{
"href": "/docs/help-info/storage-commands",
"label": "Stockage et disques",
"tail": "— commandes génériques de block-device et LVM."
},
{
"href": "/docs/help-info/backup-commands",
"label": "Sauvegarde et restauration",
"tail": " — vzdump, qmrestore."
},
{
"href": "/docs/help-info",
"label": "Vue d’ensemble de l’aide et des informations",
"tail": "."
}
]
}
}
+93
View File
@@ -0,0 +1,93 @@
{
"meta": {
"title": "Installer ProxMenux | Documentation ProxMenux",
"description": "Installez ProxMenux en une commande sur les hôtes Proxmox VE 8 et ultérieurs. Les catalogues JSON préconstruits couvrent huit langues : anglais, espagnol, français, allemand, italien, portugais, slovaque et suédois. Choisissez la langue à l’installation ou modifiez-la ensuite dans les paramètres. Le canal bêta permet d’essayer les nouveautés en avance.",
"ogTitle": "Installer ProxMenux | Documentation ProxMenux",
"ogDescription": "Installez ProxMenux sur Proxmox VE 8 ou ultérieur en une commande. Canaux stable et bêta disponibles."
},
"header": {
"title": "Installation de ProxMenux",
"description": "Un installateur à lancer en une ligne sur un hôte Proxmox VE 8 ou ultérieur. Il installe automatiquement les dépendances, télécharge les scripts, configure le lanceur du menu et demande la langue au premier lancement. Deux canaux : stable par défaut et bêta.",
"section": "Installation"
},
"stable": {
"heading": "Installer",
"intro": "Exécutez ceci dans le terminal de votre hôte Proxmox :",
"code": "bash -c \"$(wget -qLO - https://raw.githubusercontent.com/MacRimi/ProxMenux/main/install_proxmenux.sh)\""
},
"during": {
"heading": "Pendant l'installation",
"intro": "ProxMenux installe et configure automatiquement les dépendances dont il a besoin :",
"tablePackage": "Paquet",
"tablePurpose": "Utilité",
"rows": [
{
"package": "dialog",
"purpose": "Menus interactifs dans le terminal"
},
{
"package": "curl",
"purpose": "Téléchargements et contrôles de connectivité"
},
{
"package": "jq",
"purpose": "Traitement JSON"
},
{
"package": "git",
"purpose": "Clonage et mise à jour des dépôts"
}
],
"outro": "L’installateur télécharge aussi les scripts dans <code>/usr/local/share/proxmenux/</code> et crée le lanceur <code>/usr/local/bin/menu</code>. Le tableau de bord web <strong>ProxMenux Monitor</strong> est enregistré comme service <code>proxmenux-monitor.service</code>.",
"imageAlt": "Installation ProxMenux en cours"
},
"first": {
"heading": "Premier lancement",
"intro": "Une fois installé, exécutez :",
"code": "menu",
"outro": "ProxMenux s’ouvre sur le menu principal. Vous pouvez y lancer toutes les procédures documentées sur ce site. Sur un hôte Proxmox fraîchement installé, commencez par <postlink>Après l’installation</postlink>."
},
"beta": {
"heading": "Canal bêta",
"calloutTitle": "Qu'est-ce que le programme Beta?",
"calloutBody": "Vous souhaitez essayer les nouveautés avant leur sortie officielle et contribuer à la version finale ? Le programme bêta de ProxMenux donne accès aux nouvelles fonctionnalités, dont les dernières compilations de Monitor, depuis la branche <code>develop</code>. Les versions bêta peuvent contenir des bogues ou des fonctions incomplètes. Vos retours aident à les corriger avant la version stable.",
"intro": "Installez la version bêta au lieu de la version stable avec :",
"code": "bash -c \"$(wget -qLO - https://raw.githubusercontent.com/MacRimi/ProxMenux/develop/install_proxmenux_beta.sh)\"",
"outro": "La bêta est facultative : vous devez lancer explicitement son installateur. Lorsqu’une version stable est publiée, ProxMenux vous avertit au prochain lancement de <code>menu</code> et propose de basculer automatiquement. Pour quitter la bêta plus tôt, choisissez <betalink>Désactiver le programme bêta</betalink> dans les paramètres."
},
"updating": {
"heading": "Mise à jour",
"body": "ProxMenux gère ses mises à jour. Si une nouvelle version est disponible, le prochain lancement de <code>menu</code> propose de l’installer. En acceptant, vous remplacez les fichiers et la configuration de l’outil dans l’installation existante, sans téléchargement manuel. Le canal stable reçoit les versions stables, et la bêta les versions bêta, avec la proposition de bascule décrite ci-dessus. L’affichage dépend de l’endroit où vous lancez <code>menu</code> : via SSH ou dans la console Proxmox, une boîte oui/non permet d’appliquer immédiatement la mise à jour. Dans le terminal WebSocket de ProxMenux Monitor, un message informatif la remplace, car ce terminal serait interrompu pendant l’opération. Il affiche l’installateur en une ligne (<code>bash -c \"$(wget -qLO - https://raw.githubusercontent.com/MacRimi/ProxMenux/main/install_proxmenux.sh)\"</code> pour stable, ou l’URL correspondante de <code>install_proxmenux_beta.sh</code> pour bêta), à exécuter via SSH ou dans la console."
},
"uninstall": {
"heading": "Désinstallation",
"body": "Dans ProxMenux : <strong>Paramètres → Désinstaller ProxMenux</strong>. La désinstallation supprime l’arborescence des scripts, le lanceur et le service Monitor, ainsi que les dépendances sélectionnées si vous le souhaitez. Elle restaure <code>/root/.bashrc</code> et <code>/etc/motd</code> depuis les sauvegardes créées par Post-Install, si elles existent (sinon, elle supprime la ligne ProxMenux du MOTD). Procédure complète : <uninstalllink>Désinstaller ProxMenux</uninstalllink>."
},
"troubleshoot": {
"heading": "Dépannage",
"virustotalTitle": "VirusTotal signale l’URL d’installation comme suspecte",
"virustotalBody": "Le résultat de 1/95 attribué à <em>Chong Lua Dao</em> et signalé dans l’issue #162 a été identifié par le mainteneur comme un faux positif. L’installateur est lancé par une commande qui télécharge puis exécute le script (<code>bash -c \"$(wget -qLO - …)\"</code>) et peut télécharger <code>jq</code> depuis sa version officielle sur GitHub. Ce <em>comportement</em> peut déclencher des analyses heuristiques ; ce rapport historique ne préjuge pas de tous les téléchargements futurs. Le code de l’installateur est ouvert et vérifiable. Plus de contexte dans l’<issuelink>issue #162</issuelink>.",
"aptTitle": "L'installation échoue avec les erreurs apt",
"aptBody": "Il s’agit généralement d’un dépôt Proxmox absent ou mal configuré. L’installateur utilise apt pour obtenir ses dépendances ; une mauvaise configuration des dépôts fait échouer apt. Cela arrive notamment sur des installations minimales de Proxmox 8 non encore mises à jour. Exécutez d’abord <code>apt-get update</code> manuellement, corrigez les erreurs, puis relancez l’installateur.",
"menuTitle": "`menu: command not found` après installation",
"menuBody": "Le lanceur se trouve dans <code>/usr/local/bin/menu</code>. Vérifiez sa présence avec <code>ls -lh /usr/local/bin/menu</code>. S’il manque, l’installation s’est arrêtée trop tôt : relancez-la. S’il existe mais que la commande est introuvable, PATH ne contient pas <code>/usr/local/bin</code>. Corrigez PATH ou lancez directement <code>/usr/local/bin/menu</code>.",
"stuckTitle": "L’installation se bloque ou ne progresse pas",
"stuckBody": "Si une installation, une réinstallation ou une mise à jour est bloquée en raison d'un problème de connexion, annulez avec <strong>Ctrl + C</strong> et réexécutez l'installateur manuellement.",
"otherTitle": "Autres problèmes",
"otherBody": "Consultez <issueslink>GitHub Issues</issueslink> pour les problèmes connus, ou ouvrez une issue avec les journaux utiles. Si vous utilisez la bêta et que le problème concerne Monitor, ajoutez la sortie de <code>journalctl -u proxmenux-monitor -n 50</code>."
},
"next": {
"heading": "Suivant",
"postInstall": "<postlink>Script de post-installation</postlink> — réglages et renforcement de la sécurité d’un hôte Proxmox fraîchement installé.",
"introduction": "<introlink>Introduction</introlink> — présentation complète des fonctionnalités.",
"monitor": "<monitorlink>ProxMenux Monitor</monitorlink> — tableau de bord web pour l'hôte (auto-installé à côté du menu)."
},
"requirements": {
"heading": "Exigences et bonnes pratiques",
"reqTitle": "Exigences",
"reqBody": "Proxmox VE <strong>8.x ou ultérieur</strong>. PVE 7 et les versions antérieures ne sont pas pris en charge. L’hôte doit avoir accès à Internet pour télécharger les scripts, les dépendances et l’AppImage de ProxMenux Monitor. Exécutez l’installateur en tant que <strong>root</strong> sur l’hôte Proxmox.",
"inspectTitle": "Inspectez toujours les scripts que vous utilisez depuis Internet",
"inspectReview": "<sourcelink>Examinez le code source de l’installateur</sourcelink> avant de le lancer.",
"inspectCoc": "Tous les liens exécutables suivent le <coclink>code de conduite de ProxMenux</coclink>."
}
}
+206
View File
@@ -0,0 +1,206 @@
{
"meta": {
"title": "ProxMenux — Gérer Proxmox VE par menus | Open source",
"description": "Outil open source de gestion de Proxmox VE par menus. ProxMenux réunit deux composants : une CLI/TUI pour les réglages après installation, les VM et conteneurs LXC, le passthrough GPU et Coral TPU, les disques, le stockage et le réseau ; et un tableau de bord web auto-hébergé avec surveillance proactive, notifications Telegram, Discord ou e-mail, reformulation par IA et API REST.",
"ogTitle": "ProxMenux — Gérer Proxmox VE par menus",
"ogDescription": "CLI/TUI open source et tableau de bord web pour Proxmox VE : réglages après installation, VM, GPU, disques, réseau, stockage et sécurité. Un Monitor distinct ajoute la surveillance, les notifications, la reformulation par IA et une API REST.",
"twitterTitle": "ProxMenux — Gérer Proxmox VE par menus",
"twitterDescription": "CLI/TUI open source et tableau de bord web pour Proxmox VE. Surveillance, notifications, reformulation par IA et API REST."
},
"header": {
"title": "Présentation",
"description": "ProxMenux est un outil open source de gestion de Proxmox VE par menus. Le projet réunit deux composants : une CLI/TUI pour les tâches courantes liées à l’hôte, aux VM, aux conteneurs, au stockage, au réseau et à la sécurité ; et un tableau de bord web auto-hébergé avec surveillance proactive, notifications, reformulation facultative par IA et API REST.",
"section": "Présentation"
},
"hero": {
"tagline": "<strong>Un menu pour toutes les tâches.</strong> Ce qui demande habituellement un onglet wiki, deux discussions de forum et une suite de commandes à copier-coller devient une option numérotée à lancer en quelques secondes.",
"audience": "Conçu pour les utilisateurs <em>débutants</em> de Proxmox, avec des réglages par défaut sûrs et prédéfinis, et les administrateurs <em>expérimentés</em>, qui gagnent du temps sur les tâches répétitives. Gratuit et open source, avec une communauté active sur <github>GitHub</github>."
},
"twoProducts": {
"heading": "Deux produits, un projet",
"intro": "ProxMenux comprend deux composants dans le même arbre de sources. L’installateur déploie les deux sur l’hôte : Scripts fournit l’interface de terminal et Monitor le tableau de bord web :",
"scripts": {
"title": "ProxMenux Scripts",
"body": "La CLI/TUI d’origine, à lancer avec <code>menu</code>. Neuf domaines couvrent les optimisations après installation, les VM et conteneurs LXC, le passthrough GPU et Coral TPU, les disques, le stockage, le réseau, la sécurité et les utilitaires, avec une sélection de commandes de référence. Fonctionne dans un terminal local, SSH ou web."
},
"monitor": {
"title": "ProxMenux Monitor",
"body": "Tableau de bord web auto-hébergé, distribué en AppImage. Métriques de l’hôte en temps réel, surveillance proactive, notifications, reformulation facultative par IA avec six fournisseurs, terminal web intégré et API REST. À activer dans le menu Scripts, sous Paramètres → ProxMenux Monitor."
},
"calloutTitle": "Sur quoi ProxMenux intervient",
"calloutIntro": "Trois couches, toutes accessibles du même projet :",
"layers": [
"<strong>L’hôte Proxmox</strong> — dépôts, paquets, réseau, ZFS, Ceph, noyau et observabilité.",
"<strong>Les machines virtuelles (VM)</strong> — création, passthrough GPU, import et export OVA/OVF, accès direct aux disques.",
"<strong>Les conteneurs LXC</strong> — création, points de montage, passthrough GPU/TPU, clients et serveurs NFS/Samba."
]
},
"scriptsSection": {
"heading": "ProxMenux Scripts — ce que vous obtenez",
"intro": "Neuf zones fonctionnelles, chacune avec son propre menu à l'intérieur de <code>menu</code> et une page de détail dans la documentation. Cliquez sur n'importe quelle carte pour sauter directement à l'aperçu de cette section.",
"items": [
{
"title": "Après l'installation",
"description": "Optimisations d’une nouvelle installation Proxmox : dépôts, noyau, synchronisation horaire, sécurité de base et performances, avec des options réversibles.",
"icon": "Server",
"href": "/docs/post-install"
},
{
"title": "GPU et Coral TPU",
"description": "Passthrough des GPU NVIDIA, Intel iGPU, AMD et des Coral TPU vers les VM et conteneurs LXC, avec basculement entre les modes VM et LXC.",
"icon": "Cpu",
"href": "/docs/hardware/nvidia-host"
},
{
"title": "Créer VM",
"description": "Assistants pour les systèmes NAS, Windows et Linux, avec des valeurs par défaut adaptées au matériel, au stockage et au réseau.",
"icon": "Server",
"href": "/docs/create-vm"
},
{
"title": "Gestionnaire de disque",
"description": "Accès aux disques physiques depuis les VM et LXC, formatage et effacement, tests SMART et import d’images qcow2, vmdk ou vdi, depuis un menu.",
"icon": "HardDrive",
"href": "/docs/disk-manager"
},
{
"title": "Stockage et partage",
"description": "Déclarer des stockages NFS, Samba/CIFS, iSCSI et locaux dans Proxmox ; partager des dossiers entre l’hôte et les conteneurs LXC via des montages bind ou des protocoles réseau.",
"icon": "Boxes",
"href": "/docs/storage-share"
},
{
"title": "Réseau",
"description": "Diagnostics sans modification, analyse suivie de suggestions et réparations guidées de /etc/network/interfaces. Des sauvegardes sont créées avant les changements.",
"icon": "Network",
"href": "/docs/network"
},
{
"title": "Sécurité",
"description": "Fail2Ban pour protéger SSH et les interfaces web contre les tentatives d’intrusion, et Lynis pour auditer le durcissement du système : installation et gestion avec des valeurs par défaut adaptées.",
"icon": "Shield",
"href": "/docs/security"
},
{
"title": "Utilitaires",
"description": "Créer des ISO Windows avec UUP Dump, installer des outils CLI, effectuer une mise à jour système guidée ou passer de PVE 8 à 9, et exporter ou importer des VM OVA/OVF.",
"icon": "Wrench",
"href": "/docs/utils"
},
{
"title": "Référence des commandes",
"description": "Une sélection de commandes Linux et Proxmox classées par thème : système, VM/CT avec qm et pct, stockage, réseau, ZFS, passthrough GPU, sauvegarde et outils CLI du quotidien.",
"icon": "BookOpen",
"href": "/docs/help-info"
}
]
},
"monitorSection": {
"heading": "ProxMenux Monitor — ce que vous obtenez",
"intro": "Le tableau de bord web est hébergé sur l’hôte Proxmox, sur le port TCP 8008. Cliquez sur une carte pour ouvrir la page correspondante ou commencez par la <link>présentation de Monitor</link>.",
"items": [
{
"title": "Surveillance de l’état du système",
"description": "Dix catégories sont vérifiées toutes les cinq minutes : CPU, mémoire, stockage, disques/SMART, réseau, VM, services, journaux, mises à jour et sécurité. Avec niveaux de gravité et désactivation des alertes par catégorie.",
"icon": "Activity",
"href": "/docs/monitor/health-monitor"
},
{
"title": "Notifications",
"description": "Telegram, Discord, e-mail, Gotify, Pushover et Apprise multicanal : dédoublonnage, délai minimal entre envois, regroupement des alertes rapprochées, plages de silence et historique complet.",
"icon": "Bell",
"href": "/docs/monitor/notifications"
},
{
"title": "Assistant AI",
"description": "Reformulation facultative des notifications en langage clair. Six fournisseurs : OpenAI, Anthropic Claude, Google Gemini, Groq, OpenRouter et Ollama en local. Treize langues dans le sélecteur de langue de l’IA.",
"icon": "Sparkles",
"href": "/docs/monitor/ai-assistant"
},
{
"title": "Terminal Web",
"description": "Un shell interactif sur l’hôte Proxmox depuis le navigateur, ainsi qu’un terminal ProxMenux Scripts distinct pour exécuter le menu dans l’interface web.",
"icon": "Terminal",
"href": "/docs/monitor/dashboard/terminal"
},
{
"title": "REST API",
"description": "Points de terminaison HTTP pour le système, son état, le stockage/SMART, le réseau, les VM, les notifications et la sécurité, utilisables avec Homepage, Home Assistant, Prometheus ou des scripts personnalisés.",
"icon": "Code2",
"href": "/docs/monitor/api"
},
{
"title": "Intégrations",
"description": "Webhook natif Proxmox VE, collecte de métriques par Prometheus, sondes Uptime Kuma, widgets Homepage, Home Assistant et Glance, automatisations n8n/Zapier et Tailscale Secure Gateway.",
"icon": "Plug",
"href": "/docs/monitor/integrations"
}
]
},
"installPaths": {
"heading": "Options d’installation",
"intro": "Les deux installateurs déploient Scripts et Monitor. Scripts utilise des catalogues JSON préétablis en huit langues, sans traduction en ligne. Choisissez le canal stable ou bêta ; Monitor est distribué en AppImage et s’exécute depuis son environnement extrait :",
"headerPath": "Install path",
"headerBundles": "Ce qui est inclus",
"headerWhen": "Quand le choisir",
"rows": [
{
"pathRich": "<strong>Scripts : stable</strong>",
"bundles": "CLI/TUI avec traductions JSON préétablies en huit langues, sans environnement virtuel ni service de traduction en ligne.",
"when": "Utilisation courante avec le canal stable."
},
{
"pathRich": "<strong>Scripts : bêta</strong>",
"bundles": "La même interface multilingue, installée depuis la branche develop pour tester les prochaines évolutions.",
"when": "Test anticipé de nouvelles fonctions, avec un risque accru de bugs."
},
{
"pathRich": "<strong>Monitor</strong>",
"bundles": "AppImage autonome avec tableau de bord web sur le port TCP 8008. L’installateur extrait son environnement d’exécution et gère le service ; Monitor se contrôle depuis les paramètres.",
"when": "Pour consulter l’hôte depuis un tableau de bord web sur téléphone, tablette ou navigateur."
}
],
"outro": "Les commandes et prérequis détaillés figurent sur la <link>page d’installation</link>."
},
"warnSource": {
"title": "Vérifiez toujours les scripts provenant d’Internet avant de les exécuter",
"body": "ProxMenux est open source et chaque script peut être examiné sur GitHub. Consultez le code source avant d’exécuter la commande d’installation. Faites de même avec les autres outils d’automatisation.",
"sourceLabel": "Afficher la source ProxMenux",
"cocLabel": "Code de conduite"
},
"next": {
"heading": "Pour continuer",
"items": [
{
"lead": "<strong>Vous découvrez ProxMenux ?</strong> ",
"linkHref": "/docs/installation",
"linkLabel": "Installez-le avec une seule commande",
"tailRich": " puis lancez <code>menu</code>."
},
{
"lead": "<strong>Vous venez d’installer Proxmox ?</strong> Commencez par le ",
"linkHref": "/docs/post-install",
"linkLabel": "script de post-installation",
"tail": "."
},
{
"lead": "<strong>Vous souhaitez un tableau de bord web ?</strong> ",
"linkHref": "/docs/monitor",
"linkLabel": "ProxMenux Monitor",
"tail": " dispose d’une documentation qui présente son contenu, son architecture et sa sécurisation."
},
{
"lead": "<strong>Vous cherchez une commande précise ?</strong> La ",
"linkHref": "/docs/help-info",
"linkLabel": "référence des commandes",
"tail": " propose une sélection classée par thème, avec des boutons de copie."
},
{
"lead": "<strong>Vous souhaitez des guides plus détaillés ?</strong> La ",
"linkHref": "/guides",
"linkLabel": "section des guides",
"tail": " couvre Coral TPU, le passthrough NVIDIA, Kodi dans LXC et d’autres sujets."
}
]
}
}
@@ -0,0 +1,110 @@
{
"meta": {
"title": "Sauvegarde et redémarrage des interfaces | Documentation ProxMenux",
"description": "Capture manuelle, navigation et restauration des sauvegardes /etc/network/interfaces stockées sous /var/backups/proxmenux/. Comprend un redémarrage du service réseau avec confirmation et une vue rapide de la configuration en direct.",
"ogTitle": "Sauvegarde et redémarrage des interfaces | Documentation ProxMenux",
"ogDescription": "Créez un instantané de la configuration réseau Proxmox et restaurez-la ; redémarrez le service réseau avec confirmation."
},
"header": {
"title": "Sauvegarde et redémarrage des interfaces",
"description": "Quatre utilitaires qui tournent autour de /etc/network/interfaces: prennent un instantané manuel, visualisent la configuration en direct, restaurent une sauvegarde précédente avec prévisualisation optionnelle et redémarrent le service de réseautage avec un consentement explicite. Même répertoire de sauvegarde utilisé par les flux de réparation guidés.",
"section": "Réseau"
},
"intro": {
"title": "Ce que ça fait",
"body": "Gère le même répertoire de sauvegarde utilisé par les flux de réparation guidés (<code>/var/backups/proxmenux/</code>). Permet de prendre un instantané supplémentaire avant tout changement manuel, de parcourir toutes les sauvegardes existantes, et de revenir à l'une d'entre elles — toujours avec une nouvelle sauvegarde pré-restauration prise automatiquement comme deuxième filet de sécurité."
},
"shared": {
"heading": "Le répertoire de sauvegarde partagé",
"intro": "Chaque sauvegarde prise n'importe où dans le menu Réseau atterrit au même endroit :",
"outro": "Les noms de fichiers sont horodatés, triés par date et jamais écrasés. Le répertoire est créé lors de la première utilisation."
},
"show": {
"heading": "Afficher le fichier de configuration réseau",
"body": "Affiche le contenu exact de <code>/etc/network/interfaces</code> dans le terminal. En lecture seule. Utile pour vérifier la configuration avant une sauvegarde ou après une restauration. Il n’existe pas d’outil distinct pour comparer avec la sauvegarde précédente ; examiner le fichier actuel est donc le moyen le plus simple de confirmer son contenu."
},
"create": {
"heading": "Créer une sauvegarde réseau",
"body": "Copie le <code>/etc/network/interfaces</code> actuel dans le répertoire de sauvegarde avec un nouvel horodatage. C'est tout — pas d'analyse, pas d'invite, juste un instantané.",
"whenTitle": "Quand prendre une sauvegarde manuelle",
"whenBody": "Avant de modifier <code>/etc/network/interfaces</code> à la main, d’installer un paquet pouvant toucher la pile réseau (par exemple NetworkManager ou Open vSwitch), ou de changer le matériel. Les réparations guidées créent déjà automatiquement un instantané — cette option sert aux opérations <em>manuelles</em>."
},
"restore": {
"heading": "Restaurer la sauvegarde réseau",
"intro": "Liste les sauvegardes de <code>/var/backups/proxmenux/</code>, de la plus récente à la plus ancienne, et guide une restauration avec des garde-fous :",
"steps": [
{
"title": "1. Choisir une sauvegarde",
"body": "Un menu liste chaque sauvegarde par son horodatage. S'il n'y a pas de sauvegardes, le flux sort avec un message clair.",
"tone": "blue"
},
{
"title": "2. Aperçu facultatif",
"body": "Offre d'ouvrir la sauvegarde sélectionnée dans une vue défilante avant de s'engager. Oui par défaut — ne le sautez pas sur un hôte distant.",
"tone": "blue"
},
{
"title": "3. Sauvegarde avant restauration",
"body": "Avant d'écraser <code>/etc/network/interfaces</code>, prend <strong> une autre sauvegarde </strong> de l'état actuel. La restauration d'une sauvegarde est elle-même une action destructrice, de sorte que le nouvel instantané pré-restauration vous permet de revenir si la sauvegarde choisie s'avère être la mauvaise.",
"tone": "amber"
},
{
"title": "4. Appliquer la restauration",
"body": "Copie la sauvegarde choisie sur <code>/etc/network/interfaces</code>. Le changement de fichier est sur disque; l'état du noyau en direct reflète toujours la configuration précédente.",
"tone": "amber"
},
{
"title": "5. Redémarrage facultatif",
"body": "Demande s’il faut exécuter <code>systemctl restart networking</code> maintenant. Refusez pour reporter l’application au prochain redémarrage.",
"tone": "emerald"
}
],
"autoBackupTitle": "Une restauration prend sa propre sauvegarde automatiquement",
"autoBackupBody": "Sélectionner <em>Restaurer la sauvegarde réseau</em> crée toujours un nouvel instantané de la configuration <em>actuelle</em> avant de l’écraser. Si vous restaurez la mauvaise sauvegarde, le fichier le plus récent dans <code>/var/backups/proxmenux/</code> contient l’état précédent."
},
"restart": {
"heading": "Redémarrer le service réseau",
"body": "Exécute <code>systemctl restart networking</code> après confirmation oui/non. Affiche le résultat avec <code>msg_ok</code> / <code>msg_error</code>. La plupart des procédures de ce menu proposent déjà un redémarrage à la fin ; cette option sert après une modification manuelle ou si vous avez refusé le redémarrage proposé auparavant.",
"warnTitle": "Brève déconnexion garantie; possibilité de déconnexion permanente",
"warnBody": "Redémarrer <code>networking</code> désactive puis reconfigure chaque interface déclarée dans <code>/etc/network/interfaces</code>. Les sessions SSH passant par ces interfaces sont interrompues. Si la nouvelle configuration est invalide, le réseau ne revient pas. N’exécutez cette opération que si :",
"warnItems": [
"Vous avez la console / IPMI / accès iKVM prêt, <em>ou</em>",
"Vous êtes physiquement à côté de la machine, <em> ou</em>",
"Vous venez de restaurer avec succès une configuration dont le bon fonctionnement est connu et souhaitez l’appliquer."
]
},
"manualRollback": {
"heading": "Retour manuel depuis une console",
"intro": "Si vous ne pouvez pas accéder au menu (pas de SSH, plantage de dialog, …) mais disposez d’une console, deux commandes suffisent pour revenir en arrière :",
"outro": "C’est la <em>même</em> opération que celle du menu, simplement saisie à la main. Si <code>networking</code> ne démarre toujours pas, consultez <code>journalctl -u networking -b</code> pour identifier l’erreur de syntaxe ou de pilote."
},
"troubleshoot": {
"heading": "Dépannage",
"noneTitle": "« Aucune sauvegarde trouvée » lors de la restauration",
"noneBody": "Le répertoire <code>/var/backups/proxmenux/</code> n’existe pas ou ne contient aucun fichier <code>interfaces_backup_*</code>. Exécutez <em>Créer une sauvegarde réseau</em> au moins une fois ou lancez une réparation guidée, qui crée automatiquement une sauvegarde. Vérifiez avec <code>ls /var/backups/proxmenux/</code>.",
"unreachTitle": "Le redémarrage du réseau réussit, mais l’hôte reste inaccessible",
"unreachBody": "La nouvelle configuration est incorrecte ou n’attribue pas votre adresse IP de gestion. Revenez en arrière depuis la console (voir ci-dessus). Utilisez ensuite <bridgeLink>l’analyse des ponts</bridgeLink> et <configLink>l’analyse de configuration</configLink> pour comprendre le problème avant de réappliquer la configuration.",
"emptyTitle": "L’aperçu de restauration affiche un fichier vide",
"emptyBody": "Le fichier de sauvegarde est vide (0 octet). Cela arrive si une copie a échoué silencieusement lors d’une exécution précédente. Choisissez une sauvegarde plus ancienne ou relancez <em>Créer une sauvegarde réseau</em> maintenant si la configuration actuelle fonctionne."
},
"related": {
"heading": "Voir aussi",
"items": [
{
"label": "Analyse des ponts et réparation guidée",
"href": "/docs/network/bridge-analysis",
"tail": "— la raison la plus courante pour laquelle une sauvegarde se termine ici."
},
{
"label": "Analyse de configuration et nettoyage guidé",
"href": "/docs/network/config-analysis",
"tailRich": "— écrit également à <code>/var/backups/proxmenux/</code> automatiquement."
},
{
"label": "Diagnostic",
"href": "/docs/network/diagnostics",
"tail": " — pour vérifier l’état actuel après une restauration."
}
]
}
}
@@ -0,0 +1,132 @@
{
"meta": {
"title": "Analyse des ponts et réparation guidée | Documentation ProxMenux",
"description": "Détecte les ponts vmbrX dont les ports physiques sont absents ou invalides, généralement après une réénumération PCI. Les signale avec des commandes shell proposées et offre une réparation guidée en 5 étapes avec sauvegarde obligatoire.",
"ogTitle": "Analyse des ponts et réparation guidée | Documentation ProxMenux",
"ogDescription": "Vérifiez et réparez les ports des ponts Proxmox après des changements matériels, avec une procédure guidée permettant un retour en arrière sûr."
},
"header": {
"title": "Analyse des ponts et réparation guidée",
"description": "Examine chaque pont vmbrX déclaré dans /etc/network/interfaces, vérifie l’existence de ses ports physiques et propose une réparation étape par étape s’ils sont absents. L’analyse est en lecture seule ; la réparation nécessite un accord, présente un aperçu et crée une sauvegarde.",
"section": "Réseau"
},
"intro": {
"title": "Ce que ça fait",
"body": "Lit chaque pont dans <code>/etc/network/interfaces</code>, examine sa ligne <code>bridge-ports</code> et vérifie l’existence de chaque port déclaré, par exemple <code>enp3s0</code>, sur l’hôte. Si un port manque, propose un remplacement et applique la modification avec un consentement explicite selon la procédure <strong>sauvegarder, prévisualiser, appliquer, vérifier</strong>."
},
"when": {
"heading": "Quand vous en avez besoin",
"intro": "Linux attribue des noms d'interface prévisibles à partir de la topologie PCI et de l'ordre des fentes. Plusieurs événements les mélangent et laissent <code>/etc/network/interfaces</code> se référant à des noms qui n'existent plus :",
"items": [
"Ajouter ou retirer une carte PCIe (une carte NIC, un GPU, un HBA, un support NVMe).",
"Déplacement d'une carte existante vers une autre fente PCIe.",
"Mises à jour du BIOS / UEFI qui réénumèrent les périphériques PCI.",
"Migrer le disque de démarrage vers différents matériels."
],
"outro": "Après le prochain démarrage, le pont tente de se fixer à un port qui n'existe plus, ne parvient pas à monter, et l'hôte perd son réseau. <link>Les noms d'interface persistants</link> empêchent cela de se reproduire — mais si vous êtes déjà verrouillé, cette page est le chemin de récupération."
},
"bigPicture": {
"heading": "La situation générale",
"diagram1": {
"arrowLabel": "étape 1",
"nodes": {
"sourceLabel": "/etc/network/interfaces",
"sourceDetail": "auto vmbr0\niface vmbr0 inet static\n bridge-ports enp3s0",
"bridgeLabel": "Analyser (lecture seule)",
"bridgeDetail": "ip link show enp3s0\n→ n’existe pas",
"targetLabel": "Rapport + suggestion",
"targetDetail": "❌ enp3s0 : INTROUVABLE\nRemplacer par : eno1\n(pas encore de modification)"
}
},
"diagram2": {
"arrowLabel": "appliquer avec sauvegarde",
"nodes": {
"sourceLabel": "Réparation guidée",
"sourceDetail": "1. Sauvegarder\n2. Afficher l’état actuel\n3. Prévisualiser les modifications\n4. Appliquer\n5. Vérifier",
"targetLabel": "/etc/network/interfaces (nouveau)",
"targetDetail": "auto vmbr0\niface vmbr0 inet static\n bridge-ports eno1"
}
}
},
"step1": {
"heading": "Étape 1: analyse (lecture seule)",
"intro": "Sélectionner <strong>Analyser la configuration des ponts</strong> arrête immédiatement l’outil si l’hôte n’utilise pas la pile classique Debian/Proxmox. Sinon, il examine chaque pont et indique :",
"items": [
"Nom du pont, état actuel (UP / DOWN), IP assigné.",
"Chaque port déclaré et s'il existe actuellement (<code>ip link show &lt;port&gt;</code>).",
"Pour chaque port invalide : un remplacement proposé (la première interface physique disponible) plus la commande exacte <code>sed</code> pour l'appliquer manuellement.",
"Ponts sans <code>bridge-ports</code> du tout et entrées orphelines <code>auto</code> (pas de bloc correspondant <code>iface</code>)."
],
"readonlyTitle": "Garantie en lecture seule",
"readonlyBody": "Jusqu'à ce point, le script n'a pas exécuté une seule commande de modification. Vous pouvez laisser l'analyse ouverte, copier les commandes <code>sed</code> suggérées et les appliquer manuellement si vous préférez — ou accepter l'invite suivante pour entrer dans la réparation guidée."
},
"step2": {
"heading": "Étape 2 : réparation guidée (5 étapes)",
"intro": "Accessible uniquement si vous acceptez la proposition à la fin de l’analyse. Chaque étape présente l’action prévue et demande une confirmation avant de continuer.",
"steps": [
{
"title": "1. Sauvegarde de sécurité",
"body": "Copie <code>/etc/network/interfaces</code> vers <code>/var/backups/proxmenux/interfaces_backup_&lt;TIMESTAMP&gt;</code>. Le chemin exact de sauvegarde est affiché avant la copie et à nouveau après, avec la commande rollback.",
"tone": "blue"
},
{
"title": "2. Examiner la configuration actuelle",
"body": "Ouvre le fichier actuel <code>/etc/network/interfaces</code> dans une boîte de dialogue avec défilement pour voir exactement ce qui va être modifié.",
"tone": "blue"
},
{
"title": "3. Aperçu des modifications proposées",
"body": "Liste précisément les ponts concernés et les remplacements de ports prévus. Si aucune réparation n’est plus nécessaire parce que le port est réapparu entre les vérifications, la procédure se termine avec <em>« Aucune modification nécessaire. »</em>",
"tone": "blue"
},
{
"title": "4. Appliquer les modifications",
"body": "Pour chaque pont touché, exécute <code>sed -i \"/iface $bridge/,/bridge-ports/ s/bridge-ports.*/bridge-ports $new_ports/\"</code> contre <code>/etc/network/interfaces</code>. Si un pont n'avait pas de remplacement valide disponible, la substitution est ignorée et signalée à l'étape 5.",
"tone": "amber"
},
{
"title": "5. Vérification",
"body": "Relit le fichier et confirme l’existence du nouveau port de chaque pont. Affiche la commande de retour en arrière (<code>cp &lt;backup&gt; /etc/network/interfaces</code>). Propose enfin <strong>Redémarrer le réseau</strong> : n’acceptez que si vous disposez d’un accès de secours à la console.",
"tone": "emerald"
}
],
"restartTitle": "Redémarrer le réseau ≠ annuler sans risque",
"restartBody": "La réparation est écrite sur le disque, même si vous ne redémarrez pas le service. <code>systemctl restart networking</code> applique la modification <em>maintenant</em>, ce qui peut interrompre votre session SSH si le nouveau port est incorrect. En cas de refus, la modification prendra quand même effet au prochain redémarrage : vérifiez d’abord la configuration ou revenez en arrière avec la commande affichée."
},
"edits": {
"heading": "Ce qui est édité (exactement)",
"body": "Uniquement la ligne <code>bridge-ports</code> de chaque pont concerné. Les autres directives (<code>address</code>, <code>netmask</code>, <code>gateway</code>, <code>bridge-stp</code>, …) restent intactes. Le script ne crée ni ne supprime de blocs <code>iface</code> dans cette procédure : c’est le rôle de <link>l’analyse de configuration &amp; du nettoyage</link>."
},
"troubleshoot": {
"heading": "Dépannage",
"unsupportedTitle": "L’analyse s’arrête avec « Pile réseau non prise en charge »",
"unsupportedBody": "L'hôte exécute netplan, systemd-networkd ou NetworkManager. L'outil ne prend en charge que <code>/etc/network/interfaces</code>. Passez d'abord l'hôte à la pile classique ou modifiez la configuration avec l'outil natif du gestionnaire (p. ex. <code>netplan apply</code>).",
"noSuggestTitle": "Aucune suggestion n'est imprimée pour un port invalide",
"noSuggestBody": "L'hôte a zéro interfaces physiques libres (tout est déjà dans un autre pont ou n'existe pas). L'analyse revient à suggérer <code>bridge-ports none</code> afin que le pont puisse au moins monter sans port. Ajouter un NIC ou migrer les ports entre les ponts manuellement avant de recommencer.",
"stillDownTitle": "La réparation s'achève mais le pont est toujours DOWN",
"stillDownBody": "<code>sed</code> a mis à jour le fichier, mais <code>systemctl restart networking</code> a été refusé. Exécutez-le manuellement une fois que la nouvelle configuration est vérifiée, ou redémarrez. Si le redémarrage a été accepté et que le pont est toujours DOWN, exécutez <code>ip link show</code> pour confirmer l'existence du nouveau port, puis vérifiez <code>journalctl -u networking</code> pour l'erreur réelle (câble débranché, lien non négocié, port déjà membre d'un autre pont).",
"lostSshTitle": "J'ai perdu l'accès SSH juste après le redémarrage du réseau",
"lostSshIntro": "Utilisez console / IPMI / iKVM pour atteindre l'hôte. Restaurer la sauvegarde :",
"lostSshOutro": "Relancez ensuite l’analyse depuis la console pour comprendre pourquoi la suggestion n’a pas fonctionné, généralement parce que le port de remplacement n’est pas branché."
},
"related": {
"heading": "Voir aussi",
"items": [
{
"label": "Noms d'interface persistants",
"href": "/docs/network/persistent-names",
"tail": "— épingler les noms aux adresses MAC afin que ce scénario cesse de se produire."
},
{
"label": "Analyse de configuration et nettoyage guidé",
"href": "/docs/network/config-analysis",
"tailRich": "— pour les blocs orphelins de <code>iface</code> (l'autre moitié du même problème)."
},
{
"label": "Sauvegarde et redémarrage des interfaces",
"href": "/docs/network/backup-restore",
"tail": "— les instantanés manuels et le navigateur de restauration."
}
]
}
}
@@ -0,0 +1,122 @@
{
"meta": {
"title": "Analyse de configuration et nettoyage guidé | Documentation ProxMenux",
"description": "Détecte les blocs iface de /etc/network/interfaces qui font référence à des cartes réseau physiques absentes de l’hôte. Les signale et propose une suppression guidée en 5 étapes avec sauvegarde obligatoire et aperçu de chaque bloc.",
"ogTitle": "Analyse de configuration et nettoyage guidé | Documentation ProxMenux",
"ogDescription": "Trouver et supprimer les blocs d'interface orphelins laissés derrière par les changements matériels, avec prévisualisation complète et retour."
},
"header": {
"title": "Analyse de configuration et nettoyage guidé",
"description": "Examine chaque bloc iface de /etc/network/interfaces et vérifie que la carte réseau physique correspondante existe toujours. Signale les blocs orphelins laissés par des changements matériels et propose une suppression guidée avec sauvegarde, aperçu et confirmation de chaque bloc.",
"section": "Réseau"
},
"intro": {
"title": "Ce que ça fait",
"body": "Identifie les déclarations <code>iface</code> dont le support NIC n'est plus présent sur l'hôte (typique après le remplacement ou la suppression d'une carte réseau). Ensuite, offre un nettoyage guidé qui supprime <em>seulement</em> les blocs orphelins, avec une sauvegarde, un aperçu par section et une confirmation finale explicite."
},
"differs": {
"heading": "Comment il diffère de l'analyse de pont",
"headerAspect": "Aspect",
"headerBridge": "Analyse des ponts",
"headerConfig": "Analyse de la configuration",
"rows": [
{
"aspect": "Regarde",
"bridge": "Ponts (<code>vmbrX</code>) et leur ligne <code>bridge-ports</code>",
"config": "Chaque bloc <code>iface</code>, sauf loopback, ponts et agrégations"
},
{
"aspect": "Détecte",
"bridge": "Ponts faisant référence à un port inexistant",
"config": "Blocs d'interface autonomes pour les NIC qui n'existent pas"
},
{
"aspect": "Action de réparation",
"bridge": "Remplace le nom du port dans <code>bridge-ports</code>",
"config": "Supprime tout le bloc <code>iface</code>"
},
{
"aspect": "Non compris",
"bridge": "Rien — chaque pont est analysé",
"config": "Les ponts (<code>vmbrX</code>) et agrégations (<code>bondX</code>) sont toujours conservés : ils sont virtuels et leur absence peut être normale au démarrage"
}
],
"outro": "En pratique, on utilise souvent les deux dans cet ordre : <strong>analyse de configuration</strong> pour supprimer les blocs orphelins, puis <link>analyse des ponts</link> pour réaffecter tout pont qui dépendait de l’interface supprimée."
},
"step1": {
"heading": "Étape 1: analyse (lecture seule)",
"intro": "Avorte immédiatement si l'hôte n'est pas sur la pile classique. Sinon, liste toutes les interfaces non loopback configurées et indique son état :",
"virtTitle": "Les interfaces virtuelles sont protégées",
"virtBody": "Les ponts (<code>vmbrX</code>) et agrégations (<code>bondX</code>) sont virtuels. Leur absence peut être normale au moment de l’inspection, par exemple pour un pont sans port. L’analyse ne propose donc jamais de les supprimer, seulement les cartes réseau physiques."
},
"step2": {
"heading": "Étape 2 : nettoyage guidé (5 étapes)",
"intro": "Accessible uniquement si vous acceptez la proposition à la fin de l’analyse. Chaque étape exige une confirmation ; annuler à tout moment quitte sans écrire.",
"steps": [
{
"title": "1. Sauvegarde de sécurité",
"body": "Copie <code>/etc/network/interfaces</code> vers <code>/var/backups/proxmenux/interfaces_backup_&lt;TIMESTAMP&gt;</code>. Chemin montré avant et après.",
"tone": "blue"
},
{
"title": "2. Confirmer la liste de suppression",
"body": "Liste précisément les blocs d’interface physique à supprimer. Si les cartes réseau réapparaissent entre l’analyse et le nettoyage, par exemple après avoir réinséré une carte, la procédure se termine avec <em>« Aucun nettoyage nécessaire. »</em>",
"tone": "blue"
},
{
"title": "3. Aperçu du ou des blocs exacts",
"body": "Ouvre une vue défilante de chaque bloc <code>iface</code> qui serait supprimé, mot à mot du fichier. C'est le moment de repérer par exemple un crochet <code>up</code> intéressant que vous voulez préserver.",
"tone": "blue"
},
{
"title": "4. Appliquer la suppression",
"body": "Pour chaque interface orpheline, exécute <code>sed -i \"/^iface $iface/,/^$/d\" /etc/network/interfaces</code>. Cela supprime de la ligne correspondante <code>iface</code> jusqu'à la ligne blanche suivante.",
"tone": "amber"
},
{
"title": "5. Vérification",
"body": "Relit le fichier, répertorie ce qui a été supprimé et revérifie les interfaces restantes. Imprime la commande de restauration. <strong>ne redémarre pas</strong> automatiquement le réseau : la suppression d'un bloc inutilisé peut être appliquée en toute sécurité au prochain redémarrage et évite de toucher à l'état actif.",
"tone": "emerald"
}
],
"noRestartTitle": "Ne redémarre pas automatiquement le réseau",
"noRestartBody": "Contrairement à la réparation de pont, le flux de nettoyage n'offre pas de redémarrer le service. L'élimination d'un bloc d'interface inutilisé n'a aucun effet immédiat sur la configuration en cours d'exécution, de sorte qu'un redémarrage est inutile et serait un risque inutile de connectivité. Le changement prend effet sur le prochain manuel <code>systemctl restart networking</code> ou au prochain redémarrage."
},
"caveats": {
"heading": "Mises en garde importantes",
"boundaryTitle": "La limite du bloc est la première ligne vide",
"boundaryBody": "Le motif <code>sed</code> supprime de <code>iface &lt;name&gt;</code> jusqu’à la ligne vide suivante. Si <code>/etc/network/interfaces</code> ne contient pas de ligne vide entre les blocs, ce qui est rare mais possible après une modification manuelle, le bloc suivant peut aussi être supprimé. C’est pourquoi <strong>l’étape 3 est obligatoire</strong> : examinez l’aperçu avant de confirmer.",
"tandemTitle": "Un bloc iface orphelin utilisé par un pont est détecté ici, pas dans l’analyse des ponts",
"tandemBody": "Si <code>vmbr0</code> déclare <code>bridge-ports enp3s0</code> et qu’<code>enp3s0</code> a aussi son propre bloc <code>iface enp3s0 inet manual</code>, supprimer <code>enp3s0</code> ici laisse une référence invalide dans <code>vmbr0</code>. Après le nettoyage, lancez <link>l’analyse des ponts</link> pour réaffecter ou retirer le port du pont. Les deux procédures sont conçues pour être utilisées ensemble."
},
"troubleshoot": {
"heading": "Dépannage",
"notFoundTitle": "L’analyse indique « INTROUVABLE » pour ma nouvelle carte réseau",
"notFoundBody": "Le noyau voit le périphérique sous un autre nom que celui du fichier. Lancez <code>ip link show</code> pour connaître son nom réel. C’est précisément un cas où les <link>noms d’interface persistants</link> éviteraient le problème à l’avenir.",
"tooMuchTitle": "Le nettoyage a trop supprimé, dont un bloc que je voulais garder",
"tooMuchBody": "Restaurer à partir de la sauvegarde imprimée dans l'étape 5:",
"tooMuchOutro": "Modifier le fichier à la main pour ajouter une ligne blanche claire entre les blocs avant de ré-exécuter le nettoyage, ou supprimer le bloc problématique manuellement.",
"bridgeBreakTitle": "Un pont s'arrête après le nettoyage",
"bridgeBreakBody": "Le pont utilisait un port dont le bloc <code>iface</code> vient d’être supprimé. Lancez <link>l’analyse des ponts</link> ; la suggestion associera le pont à une interface physique existante."
},
"related": {
"heading": "Voir aussi",
"items": [
{
"label": "Analyse des ponts et réparation guidée",
"href": "/docs/network/bridge-analysis",
"tail": "— le suivi naturel après un nettoyage."
},
{
"label": "Noms d'interface persistants",
"href": "/docs/network/persistent-names",
"tail": "— empêche les blocs orphelins de s'accumuler après chaque changement matériel."
},
{
"label": "Sauvegarde et redémarrage des interfaces",
"href": "/docs/network/backup-restore",
"tail": "— les instantanés manuels et le navigateur de restauration."
}
]
}
}
@@ -0,0 +1,94 @@
{
"meta": {
"title": "Diagnostic | Documentation ProxMenux",
"description": "Trois diagnostics ponctuels en lecture seule : Afficher la table de routage, Tester la connectivité et Diagnostic avancé. Inspection uniquement — n’écrit jamais dans /etc/network/interfaces et n’exécute aucune commande de modification, à une exception explicite près : la purge de NetworkManager, s’il est détecté, nécessite votre accord.",
"ogTitle": "Diagnostic | Documentation ProxMenux",
"ogDescription": "Diagnostic réseau en lecture seule pour l'hôte Proxmox : routage, accessibilité, statistiques avancées."
},
"header": {
"title": "Diagnostic",
"description": "Trois contrôles ponctuels en lecture seule de l’état actuel du réseau : table de routage, test de connectivité et statistiques avancées. Aucun n’écrit dans /etc/network/interfaces — utilisables en toute sécurité à tout moment, y compris via SSH. Pour la surveillance interactive en direct, consultez Outils de surveillance en direct.",
"section": "Réseau"
},
"intro": {
"title": "Ce que ça fait",
"body": "Présente le routage, l’accessibilité et les statistiques agrégées <strong>sans rien modifier</strong>. Permet de vérifier le bon fonctionnement du réseau ou de repérer des adresses IP en double. Pour observer le trafic en continu, voir <monitoringLink>Outils de surveillance en direct</monitoringLink> ; pour consulter le fichier de configuration brut, voir <backupLink>Sauvegarde et redémarrage des interfaces</backupLink>."
},
"routing": {
"heading": "Afficher la table de routage",
"body": "Liste chaque route que le noyau utilise actuellement (<code>ip route show</code>) et souligne la passerelle par défaut. Utile pour confirmer que le trafic vers Internet passe par l'interface prévue et qu'aucune route restante n'a priorité."
},
"connectivity": {
"heading": "Tester la connectivité",
"intro": "Envoie deux sondes ICMP à trois cibles dans l'ordre et signale chacune. Ensuite, exécute un <code>nslookup google.com</code> pour vérifier la résolution DNS indépendamment de ICMP.",
"headerTest": "Essai",
"headerTarget": "Cible",
"headerConfirms": "Ce qu'il confirme",
"rows": [
{
"test": "Google DNS",
"target": "8.8.8.8",
"confirms": "Accessibilité externe via une adresse IP anycast connue"
},
{
"test": "Cloudflare DNS",
"target": "1.1.1.1",
"confirms": "Deuxième avis indépendant si Google bloque ICMP"
},
{
"test": "Passerelle",
"target": "(route par défaut)",
"confirms": "Connectivité L2 / L3 au routeur local"
},
{
"test": "Résolution DNS",
"target": "google.com",
"confirms": "Le serveur DNS est accessible et répond"
}
],
"readingTitle": "Lecture du résultat",
"readingBody": "Si le test de la passerelle réussit mais que les cibles DNS publiques ne répondent pas, vous avez une connectivité locale mais pas d’accès Internet : vérifiez la connexion en amont de la passerelle. Si la résolution DNS échoue mais que les pings vers <code>8.8.8.8</code> réussissent, le problème vient du résolveur, pas du réseau : vérifiez <code>/etc/resolv.conf</code>."
},
"advanced": {
"heading": "Diagnostic avancé",
"intro": "Agrège les statistiques du réseau et effectue une série de vérifications des problèmes courants. Affiche le nombre de connexions actives, les ports en écoute et le nombre total d’interfaces, et signale explicitement deux configurations problématiques :",
"items": [
"<strong>NetworkManager fonctionne sur un hôte Proxmox.</strong> NetworkManager et <code>ifupdown</code> de Proxmox entrent en conflit : tous deux tentent de gérer les interfaces, ce qui rend les ponts instables ou les empêche de s’activer. Si NetworkManager est détecté, l’outil propose une confirmation interactive pour l’arrêter, le désactiver et le purger (c’est le <em>seul</em> diagnostic pouvant modifier le système, et uniquement après consentement explicite).",
"<strong>Adresses IP en double sur différentes interfaces.</strong> Deux interfaces utilisant la même adresse IPv4 provoquent des problèmes de connexion intermittents très difficiles à diagnostiquer depuis la VM. Détection via <code>ip -4 addr show | sort | uniq -d</code>."
],
"nmTitle": "L'invite NetworkManager est la seule action de modification ici",
"nmBody": "Toutes les autres vérifications du diagnostic avancé sont en lecture seule. La suppression de NetworkManager nécessite une confirmation oui/non et exécute <code>systemctl stop / disable</code> + <code>apt-get purge -y network-manager</code>. Si vous refusez, rien ne change."
},
"troubleshoot": {
"heading": "Dépannage",
"gwTitle": "Tester la connectivité signale un échec de la passerelle, mais l’hôte a accès à Internet",
"gwBody": "Certains routeurs ne répondent pas aux requêtes ICMP sur leur interface interne même s’ils acheminent correctement le trafic. Testez avec <code>traceroute 8.8.8.8</code> depuis une console : si le deuxième saut correspond à votre FAI et que le test DNS public a réussi, la passerelle fonctionne malgré l’échec du ping.",
"dupTitle": "Le diagnostic avancé signale toujours des adresses IP en double après que j’en ai supprimé une",
"dupBody": "La vérification examine l'état du noyau en direct, et non le fichier de configuration. Exécutez <code>ip -4 addr show</code> pour confirmer ; si le duplicata est toujours présent, une interface le tient toujours. Utilisez <code>ip addr del &lt;IP&gt;/&lt;mask&gt; dev &lt;iface&gt;</code> pour le supprimer de l'état en direct, puis modifiez <code>/etc/network/interfaces</code> si elle est aussi persistante."
},
"related": {
"heading": "Voir aussi",
"items": [
{
"label": "Outils de surveillance en direct",
"href": "/docs/network/monitoring",
"tail": "— les lanceurs interactifs iftop / iptraf-ng / iperf3."
},
{
"label": "Analyse des ponts et réparation guidée",
"href": "/docs/network/bridge-analysis",
"tail": " — lorsqu’un vmbrX n’a plus de port physique."
},
{
"label": "Analyse de configuration et nettoyage guidé",
"href": "/docs/network/config-analysis",
"tail": " — lorsqu’une ancienne carte réseau est toujours déclarée mais n’est plus présente."
},
{
"label": "Sauvegarde et redémarrage des interfaces",
"href": "/docs/network/backup-restore",
"tail": " — pour créer un instantané de la configuration avant toute modification."
}
]
}
}
+107
View File
@@ -0,0 +1,107 @@
{
"meta": {
"title": "Gestion réseau Proxmox — Ponts, agrégations, diagnostic, réparation | ProxMenux",
"description": "Diagnostics en lecture seule, analyses suivies de suggestions et réparations guidées pour la pile réseau Debian / Proxmox (/etc/network/interfaces). Inspectez les ponts et les agrégations, lancez des outils de surveillance en direct, rendez les noms d’interface persistants, sauvegardez et redémarrez le réseau en toute sécurité — avec sauvegardes obligatoires et aperçus étape par étape.",
"ogTitle": "Gestion réseau Proxmox — Ponts, agrégations, diagnostic, réparation",
"ogDescription": "Diagnostics, analyses et réparations guidées pour la pile réseau Proxmox avec sauvegardes obligatoires et prévisualisations étape par étape.",
"twitterTitle": "Gestion réseau Proxmox | ProxMenux",
"twitterDescription": "Ponts, agrégations, diagnostics et réparations guidées pour la pile réseau Proxmox avec sauvegardes obligatoires."
},
"header": {
"title": "Gestion du réseau",
"description": "Diagnostics en lecture seule, rapports d’analyse suivis de suggestions et réparations guidées pour la pile réseau classique Debian/Proxmox. Toute opération destructive crée d’abord une sauvegarde et affiche les modifications exactes avant de les appliquer.",
"section": "Réseau"
},
"intro": {
"title": "À quoi sert ce menu",
"body": "Inspectez, diagnostiquez et, au besoin, réparez la configuration réseau de l’hôte Proxmox sans perdre l’accès à distance. Les outils suivent un principe : <strong>lire d’abord, proposer, puis appliquer uniquement avec un consentement explicite et une sauvegarde de sécurité</strong>. Il n’existe pas de bouton « Tout réparer automatiquement »."
},
"openingMenu": {
"heading": "Ouverture du menu",
"intro": "Dans le menu principal de ProxMenux, sélectionnez <strong>Réseau</strong>. Vous verrez ceci :",
"imageAlt": "Menu de gestion de réseau avec diagnostic, suivi, analyse, réparation, noms persistants et options de sauvegarde"
},
"safety": {
"heading": "Le modèle de sécurité",
"body": "Modifier la configuration réseau d’un hôte Proxmox distant est l’un des moyens les plus faciles de perdre son accès. ProxMenux en tient compte pour chaque action. Les outils se répartissent en trois niveaux de comportement : choisissez la carte correspondant à votre objectif :"
},
"tiers": {
"readOnly": {
"title": "Lecture seule",
"body": "Contrôle pur. Impossible de modifier le système en aucune circonstance.",
"items": [
"Tableau d'acheminement, tests de connectivité, statistiques avancées",
"Surveillance du trafic en temps réel (iftop, iptraf-ng)",
"Test de bande passante (iperf3)"
]
},
"analyze": {
"title": "Analysez, puis suggérez",
"body": "Détecte les problèmes, affiche un rapport avec les commandes shell proposées, puis s’arrête. Vous décidez ensuite de lancer ou non la réparation guidée.",
"items": [
"Analyse de la configuration des ponts",
"Analyse de la configuration du réseau"
]
},
"apply": {
"title": "Appliquer avec sauvegarde",
"body": "Modifie le système. Crée toujours d’abord une sauvegarde horodatée du fichier concerné et affiche un aperçu avant l’écriture.",
"items": [
"Noms d’interface persistants (fichiers .link)",
"Sauvegarde manuelle, restauration et redémarrage du service"
]
}
},
"classicTitle": "Pile classique seulement",
"classicBody": "Chaque fonction d'analyse et de réparation vérifie le gestionnaire de réseau actif avant de toucher quoi que ce soit. Si l'hôte exécute <strong>netplan</strong>, <strong>systemd-networkd</strong> ou <strong>NetworkManager</strong>, l'outil avorte immédiatement avec un message clair — le menu ne prend en charge que la pile classique Debian/Proxmox à <code>/etc/network/interfaces</code>. Ceci est intentionnel : l'édition d'un fichier netplan avec des règles écrites pour <code>ifupdown</code> corromprait silencieusement la configuration.",
"backups": {
"heading": "Où vont les sauvegardes",
"intro": "Chaque réparation guidée, restauration ou sauvegarde manuelle écrit une copie horodatée de <code>/etc/network/interfaces</code> à <code>/var/backups/proxmenux/</code> :",
"rollbackIntro": "Pour revenir manuellement à la configuration précédente depuis une console :"
},
"readOnlySection": {
"heading": "Contrôle en lecture seule",
"body": "Le point de départ lorsque quelque chose semble anormal. Inspection uniquement — n’écrit jamais dans <code>/etc/network/interfaces</code> et n’exécute aucune commande de modification, à une exception explicite près : la purge de NetworkManager, s’il est détecté, nécessite votre accord. Utilisable en toute sécurité via SSH à tout moment.",
"options": [
{
"title": "Diagnostic",
"description": "Trois vérifications en lecture seule : Afficher la table d'acheminement, tester la connectivité et les diagnostics avancés. L'inspection pure n'écrit jamais au système."
},
{
"title": "Outils de surveillance en direct",
"description": "Trois lanceurs interactifs : iftop (bande passante en temps réel par paire d'hôtes), iptraf-ng (moniteur de trafic multimode) et iperf3 (test de bande passante, serveur / mode client)."
}
]
},
"analyzeSection": {
"heading": "Analysez, puis suggérez",
"body": "À utiliser lorsqu’une inspection ou une panne réelle révèle un problème de configuration. Chaque outil examine la partie concernée de <code>/etc/network/interfaces</code>, affiche un rapport détaillé avec la commande shell exacte qui corrigerait chaque problème, puis <strong>s’arrête</strong>. Si vous acceptez ensuite la réparation guidée facultative, chaque modification est sauvegardée et prévisualisée avant d’être écrite.",
"options": [
{
"title": "Analyse des ponts et réparation guidée",
"description": "Détecte les ponts vmbrX dont les ports sont absents ou invalides, par exemple après une réénumération PCI. Affiche d’abord un rapport et ne répare que si vous acceptez la procédure guidée en 5 étapes."
},
{
"title": "Analyse de configuration et nettoyage guidé",
"description": "Repère les interfaces physiques déclarées dans /etc/network/interfaces qui n’existent plus, c’est-à-dire les configurations orphelines laissées par des changements matériels. Les signale et propose une suppression guidée."
}
]
},
"applySection": {
"heading": "Appliquer avec sauvegarde",
"body": "Ces outils écrivent sur le disque par leur fonctionnement même. Chacun crée une sauvegarde horodatée du fichier concerné avant l’écriture, et les options destructives, comme la restauration et le redémarrage, exigent une confirmation explicite oui/non. Les <em>noms d’interface persistants</em> prennent effet au prochain redémarrage, pas immédiatement ; leur mise en place peut donc être planifiée en toute sécurité même sur un hôte distant.",
"options": [
{
"title": "Noms d'interface persistants",
"description": "Associe les noms d’interface (eno1, enp3s0, …) aux adresses MAC au moyen de fichiers .link de systemd. Les noms restent stables après un changement d’emplacement PCI, une mise à niveau du noyau ou l’ajout ou le retrait d’autres cartes réseau."
},
{
"title": "Sauvegarde et redémarrage des interfaces",
"description": "Un instantané manuel de /etc/network/interfaces, parcourir et restaurer les sauvegardes précédentes, afficher la configuration en direct et redémarrer le service de réseautage au besoin."
}
]
},
"consoleTitle": "Préparez l'accès à la console",
"consoleSubTitle": "Avant toute réparation sur un hôte distant",
"consoleBody": "Si vous êtes connecté via SSH et ne disposez que d’un seul accès à l’hôte, prévoyez une solution de secours avant toute modification réseau : console physique / IPMI / iKVM ou autre machine sur le même réseau local. Les réparations guidées sont sûres et proposent toujours une commande de retour en arrière, mais un pont mal configuré ou une liaison interrompue peut tout de même vous priver d’accès jusqu’à ce que vous puissiez atteindre la console."
}
@@ -0,0 +1,136 @@
{
"meta": {
"title": "Outils de surveillance en direct | Documentation ProxMenux",
"description": "Trois lanceurs interactifs de surveillance du réseau : iftop (bande passante en temps réel par paire d'hôtes), iptraf-ng (moniteur de trafic multimode) et iperf3 (test de bande passante, serveur / mode client). Chacun est installé lors de la première utilisation.",
"ogTitle": "Outils de surveillance en direct | Documentation ProxMenux",
"ogDescription": "Surveillance réseau interactive et test de bande passante pour l'hôte Proxmox : iftop, iptraf-ng, iperf3."
},
"header": {
"title": "Outils de surveillance en direct",
"description": "Trois lanceurs interactifs pour observer le réseau en temps réel et mesurer la bande passante : iftop, iptraf-ng et iperf3. Chaque outil est installé automatiquement via apt au premier usage, fonctionne au premier plan et se quitte avec la touche indiquée. Ils ne modifient pas la configuration réseau de l’hôte ; iperf3 génère du trafic de test.",
"section": "Réseau"
},
"intro": {
"title": "Ce que ça fait",
"body": "Trois outils de suivi interactifs, chacun derrière sa propre entrée de menu. La première fois que vous en lancez un, le paquet est installé silencieusement via <code>apt-get</code>. Les lancements suivants commencent instantanément. Aucun de ces outils ne modifie la configuration du réseau hôte."
},
"when": {
"heading": "Quel outil utiliser selon le besoin",
"headerQuestion": "Question",
"headerUse": "Utiliser",
"rows": [
{
"question": "Qui sature le lien <em> maintenant</em> ?",
"use": "iftop"
},
{
"question": "Quelle est la répartition par protocole, quelles tailles de paquets et quels flux TCP circulent ?",
"use": "iptraf-ng"
},
{
"question": "Combien de bande passante est disponible entre deux hôtes ?",
"use": "iperf3"
}
]
},
"iftop": {
"heading": "Utilisation du réseau en temps réel (iftop)",
"body": "Bande passante en direct par paire d’hôtes (source ↔ destination) — comme <code>top</code> pour le trafic. Affiche les flux les plus importants en haut, avec des moyennes glissantes sur 2/10/40 secondes. L’outil idéal pour savoir <em>« pourquoi ma liaison montante est saturée »</em>.",
"exit": "<strong>Quitter :</strong> appuyez sur <kbd>q</kbd>. ProxMenux affiche un rappel avant le lancement.",
"keysTitle": "Touches utiles dans iftop",
"keysBody": "<kbd>n</kbd> active ou désactive les recherches DNS, <kbd>p</kbd> affiche les numéros de port, <kbd>P</kbd> fige l’affichage, <kbd>t</kbd> change le sens des lignes (envoi / réception / les deux), <kbd>1</kbd>/<kbd>2</kbd>/<kbd>3</kbd> trie par moyenne sur 2 s / 10 s / 40 s. Liste complète dans <code>man iftop</code>."
},
"iptraf": {
"heading": "Outil de surveillance du réseau (iptraf-ng)",
"intro": "Un outil de surveillance du trafic à plusieurs modes, piloté par menu. iftop répond à <em>« qui »</em>, tandis qu’iptraf-ng répond à <em>« quoi »</em> : compteurs d’octets et de paquets par protocole, suivi de l’état des connexions TCP, histogrammes de taille des paquets et activité LAN par station.",
"menuIntro": "Au lancement, vous obtenez un menu à cinq options :",
"headerMode": "Mode",
"headerUseFor": "Utilisez-le pour",
"rows": [
{
"mode": "IP traffic monitor",
"useFor": "Liste de flux en direct TCP / UDP / ICMP / autre-IP avec compteurs d'octets et état de connexion"
},
{
"mode": "General interface stats",
"useFor": "Nombre total de paquets IPv4 / IPv6 / TCP / UDP / ICMP / non IP par carte réseau"
},
{
"mode": "Detailed interface stats",
"useFor": "Comme ci-dessus, mais pour une interface, avec la taille du paquet et le détail du taux"
},
{
"mode": "Statistical breakdowns",
"useFor": "Histogramme de distribution de la taille du paquet, par port TCP / UDP"
},
{
"mode": "LAN station monitor",
"useFor": "Statistiques du trafic par adresse MAC pour le domaine de diffusion local"
}
],
"exit": "<strong>Quitter :</strong> appuyez sur <kbd>x</kbd> depuis n’importe quelle vue ou sur <kbd>Q</kbd> depuis le menu principal. ProxMenux affiche un rappel avant le lancement.",
"logTitle": "Enregistrer les captures dans un fichier",
"logBody": "Chaque mode propose d’enregistrer les statistiques capturées dans <code>/var/log/iptraf-ng/</code>. Pour conserver une trace d’un pic de trafic, laissez l’outil tourner, enregistrez dans un fichier et examinez-le ensuite plutôt que d’essayer de suivre l’écran en direct."
},
"iperf3": {
"heading": "Test de bande passante (iperf3)",
"intro1": "Mesure le débit TCP réel entre deux hôtes. Contrairement à iftop / iptraf-ng, qui observent le trafic existant, iperf3 génère du trafic synthétique pour tester la liaison en charge. Indispensable pour répondre à <em>« Ma liaison 10 GbE atteint-elle vraiment 10 GbE ? »</em> ou <em>« Le goulot d’étranglement vient-il de la carte réseau, du commutateur ou du stockage ? »</em>.",
"intro2": "iperf3 est un <strong>outil à deux hôtes</strong> : l’un est le serveur, en écoute sur le port TCP 5201 ; l’autre est le client, qui se connecte, envoie les données et affiche le débit. Le lanceur ProxMenux demande le mode souhaité :",
"headerMode": "Mode",
"headerBehaviour": "Comportement",
"headerCli": "Commande CLI équivalente",
"rows": [
{
"mode": "Serveur",
"behaviour": "Écoute sur TCP 5201 et imprime les résultats pour chaque test entrant. Arrête sur Ctrl+C.",
"cli": "iperf3 -s"
},
{
"mode": "Client",
"behaviour": "Demande l’adresse IP ou le nom d’hôte du serveur, se connecte, lance le test par défaut de 10 secondes et affiche le rapport.",
"cli": "iperf3 -c <target>"
}
],
"workflowIntro": "Typiquement pour tester un lien 10 GbE entre deux hôtes Proxmox :",
"workflow": [
"Sur l’hôte A, ouvrez le menu Réseau → <em>Test de bande passante (iperf3)</em> → choisissez <strong>Serveur</strong>.",
"Sur l'hôte B, ouvrez la même entrée de menu → choisissez <strong>Client</strong> → saisissez l'IP de l'hôte A.",
"Attendez 10 secondes. Comparez le taux déclaré au maximum théorique du lien."
],
"sample": "Exemple de sortie client :",
"flagsTitle": "Options utiles à utiliser manuellement depuis un shell",
"flagsBody": "<code>-t 60</code> test plus long (60 s au lieu de 10 s), <code>-P 4</code> 4 flux parallèles (saturation plus rapide), <code>-R</code> sens inverse (serveur → client), <code>-u -b 100M</code> test UDP à 100 Mbit/s (mesure de la gigue et des pertes de paquets), <code>-p 5202</code> autre port (plusieurs tests en parallèle). Liste complète dans <code>man iperf3</code>.",
"firewallTitle": "Ouvrez le port pare-feu sur le serveur",
"firewallBody": "Le serveur écoute sur TCP <strong>5201</strong> par défaut. Si vous exécutez le serveur à l'intérieur d'un hôte Proxmox avec un pare-feu strict (datacenter ou niveau hôte), autorisez TCP 5201 entrant à partir de l'IP du client pour la durée du test, puis fermez-le à nouveau. Il en va de même pour <code>nftables</code> / <code>iptables</code> sur les hôtes nus."
},
"install": {
"heading": "Le premier lancement installe le paquet",
"body": "Les trois lanceurs vérifient le binaire et exécutent <code>apt-get update -qq &amp;&amp; apt-get install -y &lt;pkg&gt;</code> s'il manque. L'installation est silencieuse : le menu peut apparaître gelé pour 10–30 secondes la première fois. Les lancements suivants commencent instantanément."
},
"troubleshoot": {
"heading": "Dépannage",
"hangTitle": "L’installation reste bloquée au premier lancement",
"hangBody": "L'hôte n'a pas d'internet ou les repos apt sont inaccessibles. Annuler avec <kbd>Ctrl</kbd>+<kbd>C</kbd>, exécuter <code>apt-get update</code> manuellement pour voir l'erreur réelle (DNS, repo signature, proxy ...), puis revenir au menu.",
"refusedTitle": "Client iperf3 : « unable to connect to server: Connection refused »",
"refusedBody": "Soit le serveur ne fonctionne pas, soit son pare-feu bloque TCP 5201. Confirmer sur le serveur: <code>ss -tlnp | grep 5201</code> — doit afficher l'écoute iperf3. Si l'écoute, mais que le client échoue, vérifiez le chemin du pare-feu entre les deux hôtes.",
"slowTitle": "iperf3 indique un débit bien inférieur à la vitesse attendue de la liaison",
"slowBody": "Causes courantes par ordre de probabilité : (1) le processeur d’un hôte limite le débit — essayez <code>iperf3 -c &lt;target&gt; -P 4</code> pour utiliser plusieurs cœurs ; (2) le trajet passe par une liaison plus lente, par exemple un commutateur gigabit entre deux cartes 10 GbE ; (3) MTU différents — vérifiez <code>ip link show</code> aux deux extrémités ; (4) offloading de la carte réseau désactivé — voir le script communautaire <em>Disable NIC Offloading</em> pour une carte Intel e1000e.",
"noTrafficTitle": "iftop / iptraf-ng ne montre aucun trafic pour un hôte occupé",
"noTrafficBody": "La capture par défaut est sur la première interface détectée. Spécifiez le bon explicitement depuis le shell : <code>iftop -i vmbr0</code> ou <code>iptraf-ng -i vmbr0</code>. Le lanceur de menu utilise la valeur par défaut; pour les interfaces non par défaut, exécuter à partir d'une console."
},
"related": {
"heading": "Voir aussi",
"items": [
{
"label": "Diagnostic",
"href": "/docs/network/diagnostics",
"tail": "— les contrôles en lecture seule (routage, connectivité, statistiques avancées)."
},
{
"label": "Analyse des ponts et réparation guidée",
"href": "/docs/network/bridge-analysis",
"tail": "— lorsque la surveillance révèle qu'une interface ou un pont ne fait pas ce qu'il faut."
}
]
}
}
@@ -0,0 +1,130 @@
{
"meta": {
"title": "Noms d’interface persistants | Documentation ProxMenux",
"description": "Associez les noms d’interface Proxmox (eno1, enp3s0, …) aux adresses MAC via des fichiers .link de systemd pour les conserver après une réénumération PCI, une mise à niveau du noyau ou l’ajout ou le retrait d’autres cartes réseau.",
"ogTitle": "Noms d’interface persistants | Documentation ProxMenux",
"ogDescription": "Empêchez les noms d’interface Proxmox de changer lors des modifications matérielles. Utilise des fichiers .link de systemd associés aux adresses MAC."
},
"header": {
"title": "Noms d'interface persistants",
"description": "Génère un fichier .link de systemd par carte réseau physique pour associer le nom attribué par le noyau à son adresse MAC. Après application au prochain redémarrage, les noms d’interface restent stables lorsque vous ajoutez, retirez ou déplacez des cartes PCIe.",
"section": "Réseau"
},
"intro": {
"title": "Ce que ça fait",
"body": "Pour chaque NIC physique sur l'hôte, écrit un petit fichier sous <code>/etc/systemd/network/10-&lt;iface&gt;.link</code> qui dit : <em>\"le périphérique avec ce MAC doit toujours être appelé ce nom\"</em>. systemd-udevd applique la règle à chaque démarrage, avant que <code>ifupdown</code> ne lise <code>/etc/network/interfaces</code>."
},
"problem": {
"heading": "Le problème que cela résout",
"intro": "Linux déduit les noms d’interface par défaut de la topologie PCI — <code>eno1</code> = intégrée à la carte mère, <code>enp3s0</code> = carte sur le bus PCI 3, emplacement 0, etc. Le nommage est déterministe <em>pour une même disposition matérielle</em>. Si cette disposition change, les noms changent :",
"items": [
"Ajoutez un GPU devant un NIC existant → le numéro de bus NIC peut changer → changement de nom.",
"Déplacer une carte vers une autre fente PCIe → nom change.",
"BIOS / UEFI mise à jour qui réénumère les appareils → noms peuvent changer.",
"Remplacer une carte défectueuse par le même modèle dans une autre fente → nom change."
],
"outro": "Après un tel changement, <code>/etc/network/interfaces</code> fait toujours référence à l’<em>ancien</em> nom ; le pont ne s’active pas et l’hôte perd le réseau. Les noms persistants évitent que cette situation se reproduise."
},
"howWorks": {
"heading": "Comment ça marche",
"arrowLabel": "par NIC",
"nodes": {
"detectLabel": "Détecter les cartes réseau physiques",
"detectDetail": "ls /sys/class/net/\nexclure vmbr / bond /\ndocker / veth / wireguard …",
"readLabel": "Lire chaque MAC",
"readDetail": "cat /sys/class/net/\n '<'iface'>'/address",
"writeLabel": "Écrivez le fichier .link",
"writeDetail": "/etc/systemd/network/\n 10-'<'iface'>'.link"
},
"minimalIntro": "Chaque fichier généré est volontairement minimal :",
"minimalOutro": "Au démarrage, systemd-udevd identifie le périphérique par son adresse MAC et lui attribue le nom demandé <em>avant</em> l’intervention d’autres composants (ifupdown, nommage par défaut du noyau). Le préfixe <code>10-</code> garantit le chargement précoce de ces règles, avant le fichier par défaut <code>99-default.link</code>."
},
"scope": {
"heading": "Ce qui est écrit, ce qui est ignoré",
"headerType": "Type",
"headerBehaviour": "Comportement",
"headerWhy": "Pourquoi",
"rows": [
{
"type": "Carte réseau intégrée / PCIe",
"behaviour": "fichier <code>.link</code> écrit",
"why": "Repose sur un véritable périphérique PCI — le cas auquel l’outil est destiné"
},
{
"type": "Wi-Fi (phy80211)",
"behaviour": "fichier <code>.link</code> écrit",
"why": "A une vraie MAC et bénéficie de la stabilité des noms"
},
{
"type": "Ponts (vmbrX)",
"behaviour": "Ignoré",
"why": "Virtuel; le nom vient de <code>/etc/network/interfaces</code>"
},
{
"type": "Agrégations (bondX)",
"behaviour": "Ignoré",
"why": "Virtuel ; le nom de l’agrégation est défini par ifupdown"
},
{
"type": "veth / docker0 / br-XXXX",
"behaviour": "Ignoré",
"why": "Créé sur demande par Docker / LXC — matériel non persistant"
},
{
"type": "tap / fwpr / fwln",
"behaviour": "Ignoré",
"why": "Créé sur demande par Proxmox par VM/CT"
},
{
"type": "WireGuard / Cilium / Tailscale",
"behaviour": "Ignoré",
"why": "Interfaces logicielles gérées par leurs propres démons"
}
]
},
"safety": {
"heading": "Filet de sécurité : les fichiers .link précédents sont sauvegardés",
"intro": "Si <code>/etc/systemd/network/</code> contient déjà des fichiers <code>.link</code> (à partir d'une exécution précédente ou d'un autre outil), ils sont copiés dans un répertoire de sauvegarde horodaté avant que les nouveaux fichiers ne soient générés :",
"outro": "Pour revenir en arrière : copiez les fichiers à partir du répertoire de sauvegarde et redémarrez.",
"rebootTitle": "Prend effet sur le prochain redémarrage, pas immédiatement",
"rebootBody": "Les modifications des fichiers <code>.link</code> ne s’appliquent qu’au démarrage, lorsque udev réénumère les périphériques. L’outil indique donc <em>« Les modifications s’appliqueront après le redémarrage »</em>. Renommer une interface en cours de fonctionnement est risqué et n’est pas tenté : un <code>vmbr0</code> actif avec des interfaces membres devrait être reconfiguré de manière atomique. L’opération est donc reportée au prochain démarrage propre."
},
"afterReboot": {
"heading": "Après le redémarrage",
"intro": "Une fois les noms épinglés, le flux de travail des futurs changements matériels est simple :",
"items": [
"Éteignez, modifiez le matériel (ajout de carte, changement d’emplacement, …), puis démarrez.",
"Chaque NIC conserve son nom précédent car son MAC correspond à un fichier <code>.link</code>.",
"Si un NIC est remplacé (différent MAC), il obtient un nom de noyau par défaut (<code>enp&lt;bus&gt;s&lt;slot&gt;</code>); ré-exécutez ce menu pour ajouter une entrée <code>.link</code> pour le MAC de la nouvelle carte."
]
},
"troubleshoot": {
"heading": "Dépannage",
"emptyTitle": "\"Aucune interface physique trouvée\" après avoir lancé l'outil",
"emptyBody": "Aucune interface reposant sur PCI ou phy80211 n’est visible par le noyau sur l’hôte. Vérifiez avec <code>ls -l /sys/class/net/</code> : chaque entrée doit avoir soit un lien symbolique <code>device</code> (PCI), soit une entrée <code>phy80211</code> (Wi-Fi). Si les deux sont absents pour une véritable carte réseau, le pilote n’est pas chargé.",
"noChangeTitle": "Après le redémarrage, les noms n'ont pas changé comme prévu",
"noChangeBody": "Vérifiez que le fichier est présent et correctement formé : <code>cat /etc/systemd/network/10-&lt;iface&gt;.link</code>. Consultez ensuite les journaux udev : <code>journalctl -u systemd-udevd -b | grep -i link</code>. Un ancien paramètre du noyau <code>net.ifnames=0</code> désactive entièrement le nommage prévisible : supprimez-le de <code>/etc/default/grub</code>, exécutez <code>update-grub</code>, puis redémarrez.",
"undoTitle": "Je veux annuler les noms persistants",
"undoBody": "Supprimez les fichiers <code>.link</code> (<code>rm /etc/systemd/network/10-*.link</code>) ou restaurez-les depuis le répertoire de sauvegarde créé lors de l’exécution précédente. Redémarrez pour appliquer les modifications."
},
"related": {
"heading": "Voir aussi",
"items": [
{
"label": "Analyse des ponts et réparation guidée",
"href": "/docs/network/bridge-analysis",
"tailRich": " — la solution de récupération lorsque les noms ont <em>déjà</em> changé."
},
{
"label": "Analyse de configuration et nettoyage guidé",
"href": "/docs/network/config-analysis",
"tail": " — pour supprimer les blocs orphelins laissés par les changements de noms."
},
{
"label": "Diagnostic",
"href": "/docs/network/diagnostics",
"tailRich": "— confirmer les nouveaux noms avec <em>Afficher la table d'acheminement</em> après le redémarrage."
}
]
}
}
@@ -0,0 +1,171 @@
{
"meta": {
"title": "Comment une image OCI est adaptée | ProxMenux",
"description": "Du dépôt de l’image et de son fichier Compose à un modèle vérifiable, un plan de déploiement et un LXC natif de Proxmox VE, sans Docker à l’intérieur."
},
"header": {
"title": "Comment une image OCI est adaptée",
"description": "Du dépôt de l’image et de son fichier Compose à un modèle vérifiable, un plan de déploiement et un LXC natif, sans installer Docker à l’intérieur.",
"section": "OCI manager Apps"
},
"sections": [
{
"id": "pipeline",
"title": "Le processus d’adaptation",
"blocks": [
{
"mermaid": {
"chartCode": "flowchart LR\n A[\"{{repo}}\"] --> B[\"Compose + README\"]\n B --> C[\"{{converter}}\"]\n C --> D[\"{{template}}\"]\n D --> E{\"{{blockers}}\"}\n E -- \"{{no}}\" --> F[\"{{review}}\"]\n F --> D\n E -- \"{{yes}}\" --> G[\"{{plan}}\"]\n G --> H[\"pct create\"]\n H --> I[\"{{lxc}}\"]",
"labels": {
"repo": "Dépôt de l’image",
"converter": "Convertisseur",
"template": "Modèle JSON",
"blockers": "Aucun point bloquant ?",
"no": "Non",
"yes": "Oui",
"review": "Révision / overlay",
"plan": "Plan de déploiement",
"lxc": "LXC natif"
}
}
},
{
"p": "Le convertisseur lit l’image et le fichier Compose publiés par le projet, puis produit un modèle JSON. Si des exigences n’ont pas pu être adaptées et bloquent l’installation, le modèle est révisé avant sa publication dans le catalogue. Un fichier d’ajustements vérifiés, appelé overlay, permet de résoudre ces points. Seuls les modèles sans point bloquant sont proposés à l’installation."
}
]
},
{
"id": "template",
"title": "Ce que conserve le modèle",
"blocks": [
{
"cards": {
"items": [
{
"icon": "archive",
"title": "Identité de l’image",
"body": "Dépôt, tag mis à jour en continu, architecture, digest résolu et révision de la source."
},
{
"icon": "braces",
"title": "Contrat du conteneur",
"body": "Entrypoint, Cmd, environnement, utilisateur, répertoire de travail, signal d’arrêt, ports et volumes."
},
{
"icon": "layers",
"title": "Adaptation à Proxmox VE",
"body": "Ressources, sécurité, points de montage, périphériques, sysctls, contrôles de bon fonctionnement et adaptations nécessaires pour chacun, avec leur justification."
},
{
"icon": "shield",
"title": "Compatibilité",
"body": "Clés prises en charge, exigences non adaptées qui bloquent l’installation et état de chaque validation."
}
]
}
}
]
},
{
"id": "sources",
"title": "OCI fournit le processus ; Compose fournit l’environnement",
"blocks": [
{
"table": {
"headers": [
"Source",
"Exemple",
"Résultat natif"
],
"rows": [
[
"Métadonnées OCI",
"<code>Entrypoint</code>, <code>Cmd</code>, <code>User</code>",
"Proxmox VE les importe à la création du CT"
],
[
"Docker Compose",
"<code>environment</code>, <code>volumes</code>, <code>devices</code>",
"Entrées d’environnement LXC, <code>mpN</code> et <code>devN</code>"
],
[
"Profil ProxMenux",
"GPU, contrôle de bon fonctionnement, identifiants",
"Questions et adaptations vérifiées"
],
[
"Utilisateur",
"VMID, stockage, réseau",
"Le contrat de l’instance"
]
]
}
}
]
},
{
"id": "install",
"title": "Ce qui se passe pendant l’installation",
"blocks": [
{
"steps": {
"items": [
{
"title": "Résoudre la référence",
"body": "Le registre est interrogé, l’architecture de l’hôte est sélectionnée et le digest exact désigné par le tag mis à jour en continu est fixé."
},
{
"title": "Télécharger et vérifier",
"body": "Skopeo télécharge l’image sous forme d’archive OCI. Avant toute création, chaque couche est vérifiée à l’aide de son digest, puis décompressée. Si le téléchargement est endommagé, il est tenté une seconde fois avant l’arrêt de l’installation."
},
{
"title": "Créer le système de fichiers",
"body": "<code>pct create</code> crée le rootfs à partir de l’archive et conserve les métadonnées officielles du processus de l’image."
},
{
"title": "Raccorder les ressources",
"body": "Les volumes, le réseau, l’environnement, les périphériques et les profils de sécurité déclarés sont appliqués."
},
{
"title": "Console",
"body": "La sortie console du conteneur est conservée sur l’hôte. La console de Proxmox VE ouvre un shell si l’image en contient un."
},
{
"title": "Vérifier",
"body": "Au premier démarrage, l’installation attend l’attribution d’une adresse et la réponse du service. En cas d’échec, elle n’est pas signalée comme réussie."
},
{
"title": "Enregistrer la configuration",
"body": "La configuration effective est enregistrée dans le contrat de l’instance utilisé lors des mises à jour et des recréations."
}
]
}
}
]
},
{
"id": "example",
"title": "Exemple : une image avec /config et /downloads",
"intro": "Une définition Compose courante et la configuration Proxmox VE qui en résulte. Les chemins attendus par l’application ne changent pas.",
"blocks": [
{
"codeGrid": {
"items": [
{
"title": "Docker Compose",
"code": "image: lscr.io/linuxserver/example:latest\nenvironment:\n - PUID=1000\n - PGID=1000\nvolumes:\n - config:/config\n - /srv/downloads:/downloads\nports:\n - 8080:8080"
},
{
"title": "/etc/pve/lxc/VMID.conf (extrait)",
"code": "entrypoint: /init\nmp0: local-lvm:vm-VMID-disk-1,mp=/config,backup=1,size=8G\nmp1: /srv/downloads,mp=/downloads\nnet0: name=eth0,bridge=vmbr0,ip=dhcp,type=veth\nlxc.environment.runtime: PUID=1000\nlxc.environment.runtime: PGID=1000"
}
]
}
},
{
"p": "<code>mp0</code> est un second disque appartenant au conteneur, nommé <code>vm-VMID-disk-N</code> sur le stockage sélectionné. Il est monté dans <code>/config</code> et, avec <code>backup=1</code>, inclus dans la sauvegarde du conteneur. <code>mp1</code> ne crée aucun disque : il monte le répertoire de l’hôte <code>/srv/downloads</code> dans <code>/downloads</code> à l’intérieur du LXC. Le port 8080 n’est pas redirigé : le LXC possède sa propre adresse et le service y répond."
}
]
}
]
}
@@ -0,0 +1,278 @@
{
"meta": {
"title": "Installer une image absente du catalogue | ProxMenux",
"description": "Adaptez une image OCI à partir d’un fichier Compose, d’une URL, d’une commande docker run ou d’une référence d’image, puis vérifiez ce que ProxMenux peut reproduire avant l’installation."
},
"header": {
"title": "Installer une image absente du catalogue",
"description": "Votre image est adaptée à partir de son fichier Compose, d’une commande docker run ou de sa seule référence. Le résultat est présenté pour vérification avant la création du moindre LXC.",
"section": "OCI manager Apps"
},
"sections": [
{
"id": "intro",
"blocks": [
{
"calloutInfo": {
"title": "Le même convertisseur et le même installateur",
"body": "L’option <strong>Installer une image absente du catalogue</strong> utilise le même convertisseur et le même installateur que les modèles du catalogue. Le contrat est simplement généré à ce moment-là à partir de la définition fournie, puis validé avant toute création de LXC."
}
}
]
},
{
"id": "sources",
"title": "Comment décrire l’image",
"intro": "Le premier écran demande comment l’image est décrite. Quatre possibilités fournissent une définition à adapter, une cinquième utilise uniquement le nom de l’image et trois autres lisent un oci-compose déjà rédigé.",
"blocks": [
{
"table": {
"headers": [
"Option",
"Contenu lu"
],
"rows": [
[
"Coller son fichier Compose dans le terminal",
"Collez le contenu YAML dans le terminal et terminez avec Ctrl+D."
],
[
"Lire son fichier Compose depuis cet hôte",
"Un chemin sur le nœud, <code>/root/docker-compose.yml</code> par défaut. Le fichier doit exister et ne pas dépasser 256 KiB."
],
[
"Télécharger son fichier Compose depuis une adresse",
"Une adresse <code>http://</code> ou <code>https://</code> qui fournit le YAML brut. Le téléchargement est limité à 256 KiB."
],
[
"Coller sa commande docker run dans le terminal",
"La commande publiée par le projet. Les ports, l’environnement, les volumes, les périphériques, les capabilities, l’utilisateur, la mémoire partagée et les autres options prises en charge sont adaptés."
],
[
"Uniquement la référence de l’image, sans fichier Compose",
"Une référence comme <code>ghcr.io/user/application:latest</code>. Le registre est interrogé et les métadonnées OCI de l’image sont conservées."
],
[
"Coller un oci-compose dans le terminal",
"Collez le JSON dans le terminal et terminez avec Ctrl+D. Il n’est pas converti : il est vérifié puis installé tel qu’il est rédigé."
],
[
"Lire un oci-compose depuis cet hôte",
"Un fichier JSON sur le nœud, <code>/root/oci-compose.json</code> par défaut, de 2 MiB au maximum."
],
[
"Télécharger un oci-compose depuis une adresse",
"Une adresse <code>http://</code> ou <code>https://</code> qui fournit le fichier JSON. Le téléchargement est limité à 2 MiB."
]
]
}
},
{
"figure": {
"src": "/oci-manager/custom-source-menu.png",
"alt": "Menu de choix de la description d’une image absente du catalogue",
"caption": "Les façons de décrire une image absente du catalogue."
}
}
]
},
{
"id": "reference-only",
"title": "Ce que fournit la seule référence de l’image",
"intro": "L’image contient les métadonnées de son processus, mais pas tout l’environnement habituellement ajouté par un fichier Compose.",
"blocks": [
{
"table": {
"headers": [
"Lu depuis l’image",
"Absent de l’image",
"Conséquence"
],
"rows": [
[
"<code>Entrypoint</code>, <code>Cmd</code>, <code>User</code>, <code>WorkingDir</code> et l’environnement intégré",
"Variables présentes uniquement dans la documentation",
"Ajoutées pendant l’installation ou avec Modifier"
],
[
"Volumes déclarés par l’image",
"Répertoires de l’hôte indiqués uniquement dans le fichier Compose",
"Les chemins supplémentaires sont ajoutés avant l’installation"
],
[
"Ports <code>EXPOSE</code>",
"L’URL, le protocole ou le contrôle de bon fonctionnement",
"Le port et la méthode de vérification du service sont confirmés"
],
[
"Architectures et digest dans le registre",
"Périphériques, privilèges ou dépendances externes",
"Ils ne sont pas activés sans une définition qui les demande"
]
]
}
}
]
},
{
"id": "review",
"title": "Vérifier avant l’installation",
"intro": "Après adaptation de la définition, ProxMenux présente ce qu’il en a compris avant de demander le VMID, les ressources ou le stockage.",
"blocks": [
{
"steps": {
"items": [
{
"title": "Analyser",
"body": "Les services, l’image, les ports, les chemins, l’environnement, les périphériques, la sécurité et le contrôle de bon fonctionnement sont lus."
},
{
"title": "Interroger le registre",
"body": "L’image doit exister dans le registre et les architectures publiées sont affichées. Un registre privé est consulté avec le compte enregistré pour celui-ci."
},
{
"title": "Lister les options non appliquées",
"body": "Les labels, réseaux Docker, paramètres Swarm et autres clés sans effet sur un LXC sont répertoriés."
},
{
"title": "Bloquer les options sans équivalent sûr",
"body": "Les clés sans équivalent sûr apparaissent sous <strong>Options sans équivalent</strong> et empêchent la poursuite de l’installation. Aucune n’est ignorée silencieusement."
},
{
"title": "Demander les secrets",
"body": "Les variables dont le nom évoque un mot de passe, un jeton ou une clé sont demandées comme données sensibles pendant l’installation."
}
]
}
},
{
"figure": {
"src": "/oci-manager/custom-review.png",
"alt": "Récapitulatif de l’interprétation du fichier Compose par ProxMenux",
"caption": "Récapitulatif affiché avant la demande du VMID et des ressources."
}
},
{
"p": "Après validation du récapitulatif, le parcours est celui du catalogue : nom, mode par défaut ou avancé, VMID, CPU, mémoire, réseau, démarrage avec le nœud, chemins persistants et supplémentaires, périphériques compatibles et récapitulatif final."
}
]
},
{
"id": "examples",
"title": "Exemples de saisie",
"blocks": [
{
"codeGrid": {
"items": [
{
"title": "Compose",
"code": "services:\n app:\n image: ghcr.io/example/app:latest\n ports:\n - \"8080:8080\"\n volumes:\n - ./config:/config\n - /srv/media:/media\n environment:\n TZ: Europe/Madrid"
},
{
"title": "docker run",
"code": "docker run -d \\\n --name app \\\n -p 8080:8080 \\\n -e TZ=Europe/Madrid \\\n -v app-config:/config \\\n -v /srv/media:/media \\\n ghcr.io/example/app:latest"
}
]
}
}
]
},
{
"id": "oci-compose",
"title": "Un oci-compose rédigé à la main",
"intro": "Un oci-compose est le fichier JSON à partir duquel une application est installée. Le catalogue en conserve un par application. Le même format peut être rédigé à la main et installé avec cette option.",
"blocks": [
{
"p": "Dans un fichier rédigé à la main, l’auteur définit l’image, les ports, les variables, les volumes et les questions de l’installation. ProxMenux complète le reste à la lecture. Le format permet d’exprimer ce que Compose ne prévoit pas : texte d’une question, mot de passe généré à l’installation, profil GPU, propriétaire de chaque volume, contrôle du premier démarrage ou identifiants affichés à la fin."
},
{
"steps": {
"items": [
{
"title": "Vérifier",
"body": "Un fichier contenant des erreurs n’est pas installé. Chaque erreur indique le champ concerné ; un JSON invalide signale la ligne et la colonne."
},
{
"title": "Examiner",
"body": "Un fichier valide affiche ce qu’il installe : image, adresse web, ports, chemins persistants, variables demandées et fichiers écrits pendant l’installation."
},
{
"title": "Installer",
"body": "L’installation suit le même parcours que pour toute application du catalogue, avec les paramètres par défaut ou avancés."
}
]
}
},
{
"calloutWarning": {
"title": "Un fichier qui détermine les privilèges",
"body": "Un oci-compose détermine ce qui est monté dans le conteneur et avec quels privilèges. La vérification le précise avant l’installation : n’installez que des fichiers de sources fiables."
}
},
{
"p": "Le <readmeLink>README du moteur OCI</readmeLink> décrit le format bloc par bloc avec deux exemples complets. Un enregistrement d’installation peut aussi être lu de cette façon : seul le modèle d’origine est utilisé, sans aucune des réponses de cette installation."
}
]
},
{
"id": "private-registries",
"title": "Images de registres privés",
"intro": "Une image d’un registre privé, comme un paquet privé GitHub ou un dépôt privé Docker Hub, est lue avec un compte enregistré dans ProxMenux.",
"blocks": [
{
"steps": {
"items": [
{
"title": "Le registre refuse l’accès à l’image",
"body": "Si le registre indique que l’image nécessite un compte, la vérification propose de s’y connecter, puis lit à nouveau l’image."
},
{
"title": "Se connecter",
"body": "Un nom d’utilisateur et un mot de passe ou jeton autorisé à télécharger l’image. Le registre les vérifie ; ils ne sont enregistrés que s’il les accepte."
},
{
"title": "Installer et maintenir à jour",
"body": "Ce compte sert au téléchargement pendant l’installation, ainsi qu’aux mises à jour, à Modifier, à Recréer, au watchdog et à la recherche de mises à jour du Monitor, sur chaque nœud du cluster."
}
]
}
},
{
"p": "<strong>Comptes de registres</strong>, dans le menu principal d’OCI manager Apps, affiche les comptes enregistrés par registre et utilisateur, jamais leurs secrets. Chaque compte permet de vérifier, télécharger ou installer une image, ainsi que de mettre à jour ou supprimer les identifiants."
},
{
"list": {
"items": [
"GitHub (<code>ghcr.io</code>) : l’utilisateur est le compte GitHub et le mot de passe un jeton d’accès personnel avec l’autorisation <code>read:packages</code>.",
"Docker Hub (<code>docker.io</code>) : l’utilisateur est le compte Docker Hub et le mot de passe un jeton d’accès avec autorisation de lecture.",
"Autres registres, y compris avec un port propre comme <code>registry.example.com:5000</code> : l’utilisateur et le mot de passe ou jeton fournis par ce registre."
]
}
},
{
"calloutInfo": {
"title": "Où les comptes sont conservés",
"body": "Dans <code>/etc/pve/priv/proxmenux/registry-auth.json</code>, lisible uniquement par root, dans le même dossier que les mots de passe de stockage de Proxmox. <code>/etc/pve</code> est partagé entre tous les nœuds du cluster : un compte ajouté sur un nœud est donc utilisé partout. La sauvegarde de l’hôte inclut ce fichier et la désinstallation de ProxMenux le supprime de tous les nœuds."
}
}
]
},
{
"id": "limits",
"title": "Définitions qui ne sont pas installées",
"blocks": [
{
"list": {
"items": [
"Un Dockerfile sans image publiée : l’image doit d’abord être construite et publiée dans un registre OCI.",
"Un fichier Compose à plusieurs services : cette option installe un seul service par conteneur, même si plusieurs services utilisent la même image.",
"<code>configs</code>, secrets externes ou formats de périphériques impossibles à adapter sans ambiguïté.",
"Substitutions shell comme <code>$(command)</code> : il faut saisir directement la valeur résultante.",
"Options <code>docker run</code> non reconnues et <code>--env-file</code> : utilisez plutôt un fichier Compose aux valeurs explicites."
]
}
}
]
}
]
}
@@ -0,0 +1,392 @@
{
"meta": {
"title": "Dispositifs et accélération ProxMenux",
"description": "Comment OCI manager Apps rend les GPU, NVIDIA, Coral, USB, FUSE et autres périphériques accessibles à un conteneur OCI sous forme de ressources natives Proxmox VE validées."
},
"header": {
"title": "Dispositifs et accélération",
"description": "GPU, NVIDIA, Coral, USB, FUSE et les dispositifs de blocs deviennent des ressources natives validées Proxmox VE du conteneur.",
"section": "OCI manager Apps"
},
"sections": [
{
"id": "principle",
"title": "L'appareil dont l'application a besoin, pas l'hôte entier",
"blocks": [
{
"p": "Un appareil demandé par le fichier Compose ou par le profil d'application devient une entrée concrète <code>devN</code> ou un montage LXC. Demander un GPU, un périphérique USB ou un Coral ne rend pas le conteneur privilégié."
},
{
"flow": {
"nodes": [
{
"label": "Inventaire des hôtes",
"detail": "/dev/dri/renderD128\nGID 993 · Intel"
},
{
"label": "ProxMenux",
"detail": "fournisseur et\npermissions vérifiées"
},
{
"label": "LXC",
"detail": "même périphérique\nGID effectif"
}
]
}
}
]
},
{
"id": "origin",
"title": "D'où vient la demande de l'appareil",
"blocks": [
{
"table": {
"headers": [
"Source",
"Ce qui est lu",
"Ce que fait l'installateur"
],
"rows": [
[
"Docker Compose",
"Demandes <code>devices</code>, <code>group_add</code>, <code>deploy.resources</code> et NVIDIA",
"Chaque exigence devient une demande d'appareil présentée pour examen"
],
[
"Profil du catalogue",
"La prise en charge réelle des GPU, de Coral, d’OpenCL, d’USB ou de FUSE par l’application",
"Seules les options validées pour cette image sont proposées"
],
[
"métadonnées d'images et documentation",
"VA-API, Selkies, LinuxServer mods ou le NVIDIA runtime",
"Les variables documentées et la préparation sont ajoutées"
],
[
"Sélection de l'utilisateur",
"CPU uniquement, Intel/AMD, OpenCL, NVIDIA ou un appareil optionnel",
"La sélection est stockée dans le contrat d'instance"
]
]
}
},
{
"calloutWarning": {
"title": "Les périphériques détectés ne sont pas ajoutés automatiquement",
"body": "L'hôte est inventorié, mais seuls les appareils déclarés par le fichier Compose ou par un profil compatible sont proposés et attachés. Un GPU, un dongle USB ou un Coral présent sur l'hôte n'est pas exposé à tous les LXC."
}
}
]
},
{
"id": "identify",
"title": "Comment le périphérique hôte est identifié",
"intro": "Avant que le LXC ne soit modifié, l'appareil est lu sur l'hôte et correspond au profil choisi.",
"blocks": [
{
"table": {
"headers": [
"Type",
"Identité",
"Validation"
],
"rows": [
[
"Intel/AMD DRM",
"<code>/dev/dri/renderD*</code> et <code>/sys/class/drm/NODE/device/vendor</code>",
"Dispositif de caractères avec fournisseur <code>0x8086</code> (Intel) ou <code>0x1002</code> (AMD)"
],
[
"AMD OpenCL",
"Le nœud de rendu, plus <code>/dev/kfd</code> lorsque le profil en a besoin",
"Existence, type, fournisseur, autorisations et compatibilité déclarée"
],
[
"AMD ROCm",
"Le nœud de rendu, <code>/dev/kfd</code> et la génération indiquée par le pilote de calcul dans <code>/sys/class/kfd/kfd/topology/nodes/*/properties</code>",
"Une génération pour laquelle l’image ROCm de l’application contient des noyaux de calcul — les GPU RDNA2 cités et les plus récents — est proposée telle quelle. Les autres GPU de ces familles, comme les Radeon 680M et 780M, sont proposés à titre expérimental et jamais présélectionnés : ROCm ne les prend pas officiellement en charge, l’application les présente comme la génération de leur famille (<code>HSA_OVERRIDE_GFX_VERSION</code>) et l’installateur demande confirmation avant de télécharger l’image plus volumineuse. Une GPU plus ancienne, telle que la partie graphique intégrée d’un Ryzen 5000U, n’est pas proposée et Immich conserve la reconnaissance sur le CPU."
],
[
"NVIDIA",
"<code>nvidia-smi</code> et <code>nvidia-container-cli</code>",
"GPU, UUID, PCI bus, version pilote, Toolkit, <code>/dev/nvidia*</code> nœuds, binaires et bibliothèques"
],
[
"Coral PCIe/M.2",
"<code>/dev/apex_N</code> et son lien dans <code>/sys/dev/char/MAJOR:MINOR</code>",
"Nœud de caractère, majeur/mineur, propriétaire, GID et permissions"
],
[
"USB et série",
"<code>/dev/ttyUSB*</code>, <code>/dev/ttyACM*</code> ou <code>/dev/bus/usb/BBB/DDD</code>",
"Nœud de caractère; pour USB aussi fournisseur, produit et série lorsque sysfs les publie"
],
[
"KVM, TUN, FUSE, vidéo et SCSI générique",
"<code>/dev/kvm</code>, <code>/dev/net/tun</code>, <code>/dev/fuse</code>, <code>/dev/videoN</code> ou <code>/dev/sgN</code>",
"Chemin pris en charge, type de nœud et permissions effectives"
],
[
"Lecteur optique",
"<code>/dev/srN</code>",
"Un périphérique bloc"
]
]
}
}
]
},
{
"id": "install",
"title": "Ce qui se passe pendant l'installation",
"blocks": [
{
"steps": {
"items": [
{
"title": "Le modèle offre ses profils",
"body": "Par exemple CPU seulement, Intel/AMD VA-API, AMD OpenCL, Intel OpenCL ou NVIDIA. Les options appartiennent à l'image, pas à un menu commun."
},
{
"title": "Un profil est choisi",
"body": "Il définit les nœuds de périphérique, l'environnement, les mods ou l'exécution dont l'application a besoin."
},
{
"title": "Un chemin est proposé",
"body": "Pour DRM, <code>/dev/dri/renderD128</code>, qui peut être modifié sur un hôte avec plusieurs nœuds de rendu. Pour USB ou série, le nœud précis est sélectionné."
},
{
"title": "Validation",
"body": "L'existence, le type, le fournisseur autorisé, les autorisations et le GID sont vérifiés. Une inadéquation arrête l'opération."
},
{
"title": "Le contrat est écrit",
"body": "Chemin, mode, GID, accès à l'écriture et profil sont enregistrés pour les mises à jour et les recréations de conteneurs."
},
{
"title": "Ajout et vérification",
"body": "<code>pct set</code> ajoute l'entrée <code>devN</code> et l'accès est ensuite vérifié à l'intérieur du LXC. Les images LinuxServer sont également vérifiées en tant qu'utilisateur <code>abc</code>."
}
]
}
}
]
},
{
"id": "config",
"title": "Comment il apparaît dans la configuration LXC",
"intro": "Valeurs indicatives : <code>dev0</code> et <code>dev1</code> sont les emplacements libres attribués par Proxmox VE ; <code>renderD128</code>, <code>apex_0</code> et le GID dépendent du matériel du nœud.",
"blocks": [
{
"codeGrid": {
"items": [
{
"title": "Intel/AMD VA-API",
"code": "dev0: path=/dev/dri/renderD128,mode=0660,gid=993,deny-write=0"
},
{
"title": "Coral PCIe/M.2",
"code": "dev0: path=/dev/apex_0,mode=0660,gid=GID,deny-write=0"
},
{
"title": "Un périphérique USB spécifique",
"code": "dev0: path=/dev/bus/usb/003/004,mode=0660,gid=GID,deny-write=0"
},
{
"title": "AMD OpenCL",
"code": "dev0: path=/dev/dri/renderD128,mode=0660,gid=GID,deny-write=0\ndev1: path=/dev/kfd,mode=0660,gid=GID,deny-write=0"
}
]
}
},
{
"p": "Le GID est lu avec <code>stat</code> sur l'hôte et écrit à l'entrée <code>devN</code>; les groupes <code>render</code> et <code>video</code> ne sont pas supposés avoir un nombre fixe. L'appareil conserve le même chemin <code>/dev</code> à l'intérieur du LXC, où les propres mécanismes de l'application le recherchent."
}
]
},
{
"id": "profiles",
"title": "Profils qu'une image peut offrir",
"blocks": [
{
"table": {
"headers": [
"Profil",
"Configuration résultante",
"Proposé quand"
],
"rows": [
[
"Intel/AMD VA-API",
"Le noeud de rendu <code>/dev/dri</code>",
"L'application prend en charge l'accélération vidéo"
],
[
"OpenCL",
"Noeud Render, <code>/dev/kfd</code> au besoin et le mod officiel",
"L'image ou le profil le documente"
],
[
"NVIDIA",
"Dispositifs pilotes et bibliothèques de l'hôte",
"L’hôte dispose d’un pilote fonctionnel et de NVIDIA Container Toolkit"
],
[
"Coral",
"<code>/dev/apex_0</code> ou le bus USB",
"Le profil déclare la prise en charge de Coral (Frigate)"
],
[
"USB, série, FUSE",
"Un seul appareil, un arbre validé ou une fonction LXC",
"Le contrat le demande"
]
]
}
}
]
},
{
"id": "nvidia",
"title": "NVIDIA",
"blocks": [
{
"calloutWarning": {
"title": "Prérequis sur le nœud : NVIDIA Container Toolkit",
"body": "Un pilote fonctionnel sur Proxmox VE ne suffit pas à donner une GPU NVIDIA à une image OCI. OCI Manager Apps utilise <code>nvidia-container-cli</code>, de NVIDIA Container Toolkit, pour identifier les appareils et obtenir les binaires et les bibliothèques qui correspondent au pilote chargé."
}
},
{
"p": "Le <nvidiaLink>installateur NVIDIA de ProxMenux</nvidiaLink> installe NVIDIA Container Toolkit du dépôt officiel NVIDIA avec le pilote. Il vérifie ses quatre paquets, valide <code>nvidia-container-cli</code> et enregistre le résultat dans le journal de changement de <auditLink>Audit & Report</auditLink>."
},
{
"p": "Ces deux commandes sur l'hôte montrent si le pilote et le Toolkit sont disponibles :"
},
{
"shell": {
"code": "nvidia-smi -L\nnvidia-container-cli --version"
}
},
{
"p": "Sur un hôte où le pilote a été installé par d'autres moyens, le Toolkit est installé à partir du dépôt stable officiel:"
},
{
"shell": {
"code": "apt-get update\napt-get install -y --no-install-recommends ca-certificates curl gnupg2\n\ncurl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey \\\n | gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg\n\ncurl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list \\\n | sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' \\\n > /etc/apt/sources.list.d/nvidia-container-toolkit.list\n\napt-get update\napt-get install -y nvidia-container-toolkit libnvidia-container-tools"
}
},
{
"p": "L’inventaire utilisé par OCI manager Apps provient de la sortie de :"
},
{
"shell": {
"code": "nvidia-container-cli list --device all --libraries --binaries --firmwares --ipcs"
}
},
{
"calloutInfo": {
"title": "La configuration d'exécution Docker n'est pas impliquée",
"body": "Les conteneurs sont des LXC natifs sans démon Docker : <code>nvidia-ctk runtime configure --runtime=docker</code> ne joue donc aucun rôle. ProxMenux interroge directement <code>nvidia-container-cli</code> et écrit les périphériques et montages LXC. Les commandes et plateformes prises en charge sont maintenues dans le <toolkitLink>guide d’installation de NVIDIA Container Toolkit</toolkitLink>."
}
},
{
"cards": {
"items": [
{
"icon": "cpu",
"title": "Inventaire issu du pilote",
"body": "<code>nvidia-container-cli</code> énumère les nœuds de périphérique, les binaires, les micrologiciels et les bibliothèques du pilote installé."
},
{
"icon": "refresh",
"title": "Pas de version fixe",
"body": "Le modèle ne nomme pas les fichiers de bibliothèque. Le profil est généré à partir de l'hôte actuel."
},
{
"icon": "shield",
"title": "Montages en lecture seule",
"body": "Les bibliothèques hôtes sont montées en lecture seule au lieu d'être copiées dans le conteneur."
},
{
"icon": "hardDrive",
"title": "Changements de pilote",
"body": "Après un changement de pilote, l'inventaire est généré à nouveau avant le démarrage des LXC touchés."
}
]
}
},
{
"code": {
"title": "Résultat NVIDIA (simplifié)",
"code": "devN: path=/dev/nvidia0,...\ndevN: path=/dev/nvidiactl,...\ndevN: path=/dev/nvidia-uvm,...\nlxc.mount.entry: HOST_LIBRARY CONTAINER_LIBRARY none ro,bind,create=file 0 0"
}
},
{
"p": "Passer uniquement <code>/dev/nvidia0</code> ne suffit pas. Les composants espace utilisateur du pilote chargé sont montés en lecture seule, et <code>nvidia-smi</code> fonctionne ensuite à l'intérieur du LXC pour comparer GPU, UUID, PCI bus et version avec l'inventaire hôte."
}
]
},
{
"id": "usb",
"title": "Coral USB, série et USB",
"blocks": [
{
"calloutWarning": {
"title": "La numérotation USB peut changer",
"body": "Un chemin tel que <code>/dev/bus/usb/003/004</code> peut changer lorsque le périphérique est reconnecté ou que l'hôte redémarre. Le profil enregistre le fournisseur, le produit et la série lorsqu'ils sont disponibles, mais une nouvelle adresse de bus n'est pas automatiquement réaffectée."
}
},
{
"p": "Un périphérique est donné par son nœud concret : <code>/dev/ttyUSB0</code>, <code>/dev/ttyACM0</code>, <code>/dev/apex_0</code> ou <code>/dev/bus/usb/BBB/DDD</code>. Passer l'intégralité de <code>/dev</code> n'est pas accepté. Coral est proposé uniquement aux applications dont le profil le déclare."
}
]
},
{
"id": "trees",
"title": "Arbres de périphériques et fonctionnalités LXC",
"blocks": [
{
"table": {
"headers": [
"Demande",
"Configuration résultante",
"Portée"
],
"rows": [
[
"<code>/dev/dvb</code>, <code>/dev/snd</code> ou <code>/dev/bus/usb</code>",
"Chaque noeud de caractère de l'arbre obtient sa propre entrée <code>devN</code> avec le mode hôte et GID",
"Seulement l'arbre demandé, pas le reste de <code>/dev</code>"
],
[
"<code>/dev/fuse</code>",
"Le nœud et, lorsque le profil en a besoin, la fonction <code>fuse=1</code>",
"FUSE seul ne publie pas de montages sur d'autres LXC"
],
[
"<code>/dev/net/tun</code>",
"Une entrée <code>devN</code> sur le même chemin à l'intérieur du LXC",
"La configuration VPN ou réseau reste dans l'application"
],
[
"<code>/dev/kvm</code>",
"Une entrée <code>devN</code> validée",
"Offert seulement lorsque le contrat le demande"
]
]
}
}
]
},
{
"id": "security",
"title": "Confirmations par niveau de risque",
"blocks": [
{
"p": "Les périphériques concrets, les privilèges facultatifs, les privilèges requis, la relaxation AppArmor ou seccomp et l'accès à l'espace de noms PID hôte sont traités comme des cas distincts, et non sous une seule étiquette privilégiée générique. Chaque option présentant un risque est expliquée et confirmée lors de l'installation."
}
]
}
]
}
+213
View File
@@ -0,0 +1,213 @@
{
"meta": {
"title": "OCI manager Apps | ProxMenux",
"description": "Exécutez des images OCI officielles dans des conteneurs LXC natifs de Proxmox VE, avec des données persistantes, l’accès aux périphériques, des applications à plusieurs conteneurs et des mises à jour transactionnelles."
},
"header": {
"title": "OCI manager Apps",
"description": "Les images OCI officielles s’exécutent dans des conteneurs LXC natifs de Proxmox VE. L’image reste celle publiée par son mainteneur ; ProxMenux reproduit l’environnement que Docker Compose aurait créé autour d’elle.",
"section": "OCI manager Apps"
},
"sections": [
{
"id": "model",
"blocks": [
{
"calloutInfo": {
"title": "Une image OCI, un LXC natif",
"body": "Aucun moteur Docker ne s’exécute dans les conteneurs. Proxmox VE importe le système de fichiers de l’image et ses métadonnées OCI. L’application devient le processus principal d’un LXC natif, administré avec les mêmes outils que les autres conteneurs du nœud."
}
},
{
"flow": {
"nodes": [
{
"label": "Source",
"detail": "Image OCI\nCompose et documentation"
},
{
"label": "ProxMenux",
"detail": "Contrat JSON\nvalidation et planification"
},
{
"label": "Proxmox VE",
"detail": "LXC natif\nvolumes et périphériques"
}
],
"caption": "L’application d’origine est conservée : son environnement est décrit de façon déclarative, puis reproduit."
}
}
]
},
{
"id": "where",
"title": "Où le trouver",
"intro": "Sur le nœud Proxmox, en tant que root, ouvrez <strong>OCI manager Apps (Technology Preview)</strong> dans le menu principal de ProxMenux. Le premier écran propose :",
"blocks": [
{
"list": {
"items": [
"<strong>Rechercher des applications</strong> : rechercher par nom dans tout le catalogue.",
"<strong>Toutes les applications</strong> : afficher le catalogue complet et le nombre d’applications.",
"<strong>Gérer les applications OCI installées</strong> : mettre à jour, modifier, supprimer ou récupérer les applications déjà installées.",
"<strong>Comptes de registres</strong> : gérer les comptes utilisés pour installer et mettre à jour des images provenant de registres privés.",
"<strong>Installer une image absente du catalogue</strong> : adapter un fichier Compose, une commande <code>docker run</code> ou une référence d’image.",
"Les catégories du catalogue, chacune avec son nombre d’applications."
]
}
},
{
"figure": {
"src": "/oci-manager/main-menu.png",
"alt": "Écran principal d’OCI manager Apps avec recherche, catalogue complet, gestion des applications, images hors catalogue et catégories.",
"caption": "Écran principal d’OCI manager Apps."
}
},
{
"p": "La sélection d’une application affiche sa description, l’image utilisée et deux modes d’installation. <strong>Installer avec les paramètres par défaut</strong> ne application que les choix essentiels : stockage, emplacement des données, adresse et démarrage. <strong>Installer avec les paramètres avancés</strong> présente toutes les décisions dans l’ordre : VMID et ressources, stockage de chaque chemin, pont réseau et périphériques."
},
{
"p": "Les applications effectivement testées affichent <strong>Vérifié</strong> dans cette vue et portent un ✓ dans les listes, que le test ait été effectué dans le laboratoire ProxMenux ou par la communauté."
}
]
},
{
"id": "beta",
"title": "Pourquoi le label Technology Preview est conservé",
"blocks": [
{
"p": "OCI manager Apps conserve le label <strong>Technology Preview</strong> que Proxmox VE attribue aux conteneurs d’applications créés à partir d’images OCI, dont la prise en charge a été introduite dans Proxmox VE 9.1. Ce label concerne la technologie sur laquelle repose OCI manager Apps, et non le moteur de ProxMenux : le comportement de ces conteneurs peut encore changer entre les versions de Proxmox VE. Le label restera en place jusqu’à ce que Proxmox VE considère cette prise en charge comme stable."
},
{
"p": "Le moteur d’OCI manager Apps est testé dans le laboratoire ProxMenux : installation, mise à jour, modification, recréation, sauvegarde, restauration, migration et watchdog. Chaque application est vérifiée séparément. Celles qui ont été effectivement testées affichent <strong>Vérifié</strong> et portent un ✓ dans les listes."
}
]
},
{
"id": "translation",
"title": "Comment Docker décrit les besoins et comment OCI manager Apps les applique",
"blocks": [
{
"table": {
"headers": [
"Besoin",
"Expression dans Docker",
"Mise en œuvre par OCI manager Apps"
],
"rows": [
[
"Exécuter l’application",
"<code>image</code>, <code>entrypoint</code>, <code>command</code>",
"Le rootfs OCI et le processus principal du LXC"
],
[
"Conserver la configuration",
"<code>volumes: /config</code>",
"Un volume persistant <code>mpN</code> inclus dans la sauvegarde, ou un répertoire de l’hôte."
],
[
"Rendre le service accessible",
"<code>ports</code>",
"Une adresse propre au LXC et l’URL d’accès au service."
],
[
"Utiliser du matériel",
"<code>devices</code>, <code>group_add</code>",
"Des entrées <code>devN</code> avec le GID effectif de l’hôte et un profil validé."
],
[
"Relier les dépendances",
"<code>networks</code>, <code>depends_on</code>",
"Un pont réseau privé, des adresses fixes, un ordre de démarrage et des contrôles de bon fonctionnement."
],
[
"Mettre à jour",
"Télécharger avec <code>pull</code> et recréer",
"Un nouveau rootfs avec le même contrat de persistance."
]
]
}
}
]
},
{
"id": "kept",
"title": "Ce qui est conservé et ce qui change",
"blocks": [
{
"cards": {
"items": [
{
"icon": "archive",
"title": "Conservé",
"body": "L’image officielle, ses chemins internes, son environnement, son processus de démarrage et sa documentation d’utilisation."
},
{
"icon": "boxes",
"title": "Adapté",
"body": "L’environnement d’exécution : le réseau, la persistance, les périphériques, les permissions et les dépendances utilisent les mécanismes LXC natifs de Proxmox VE."
},
{
"icon": "shield",
"title": "Sans équivalent",
"body": "Une option Compose sans équivalent sûr est signalée comme un point bloquant. Les modèles comportant des points bloquants ne sont pas proposés à l’installation, et les options sensibles doivent être confirmées pendant l’assistant."
},
{
"icon": "refresh",
"title": "Enregistré",
"body": "Le digest de l’image, les ressources, les chemins, le réseau, les périphériques et l’appartenance à une pile sont enregistrés dans le contrat de l’instance. Les mises à jour et les recréations reproduisent ce contrat."
}
]
}
}
]
},
{
"id": "pages",
"title": "Pages de cette section",
"blocks": [
{
"next": {
"items": [
{
"label": "Comment une image OCI est adaptée",
"href": "/docs/oci-manager/architecture",
"tail": "De l’image et de son fichier Compose à un LXC natif."
},
{
"label": "Installer une image absente du catalogue",
"href": "/docs/oci-manager/custom-image",
"tail": "Un fichier Compose, une commande docker run ou une référence d’image."
},
{
"label": "Données, chemins et réseau",
"href": "/docs/oci-manager/storage-network",
"tail": "Volumes du conteneur, répertoires de l’hôte, montages rclone et adresses."
},
{
"label": "Périphériques et accélération",
"href": "/docs/oci-manager/hardware",
"tail": "GPU, NVIDIA, Coral, USB et autres périphériques."
},
{
"label": "Applications à plusieurs conteneurs",
"href": "/docs/oci-manager/stacks",
"tail": "Application, base de données et cache dans des LXC coordonnés."
},
{
"label": "Installer, mettre à jour et modifier",
"href": "/docs/oci-manager/lifecycle",
"tail": "Le contrat de l’instance et ses opérations."
},
{
"label": "Dans ProxMenux Monitor",
"href": "/docs/oci-manager/monitor",
"tail": "Versions, mises à jour, sortie console et terminal."
}
]
}
}
]
}
]
}
@@ -0,0 +1,499 @@
{
"meta": {
"title": "Installer, mettre à jour et modifier | ProxMenux",
"description": "Le contrat d'instance d'un conteneur OCI et les opérations qui s'appuient dessus : mise à jour, modification, suppression, reprise d'une opération interrompue et remise en service après une restauration sur cet hôte ou un autre."
},
"header": {
"title": "Installer, mettre à jour et modifier",
"description": "Chaque instance conserve un contrat reproductible, ce qui permet de remplacer son rootfs sans perdre sa configuration ni ses données persistantes.",
"section": "OCI manager Apps"
},
"sections": [
{
"id": "contract",
"title": "Le contrat d'instance",
"blocks": [
{
"p": "Après l'installation, la configuration effective est enregistrée dans <code>/usr/local/share/proxmenux/oci/instances/VMID/oci-compose.json</code>. Il ne s'agit pas d'une copie du fichier Compose d'origine : c'est le contrat reproductible du LXC présent sur cet hôte."
},
{
"code": {
"code": "instances/\n└── 105/\n └── oci-compose.json\n ├── image and resolved digest\n ├── resources and network\n ├── environment (secrets protected)\n ├── container disks and host directories\n ├── hardware profile and devices\n ├── console log and terminal mode\n └── stack membership and lifecycle"
}
},
{
"p": "Une copie du contrat est conservée dans le conteneur, dans <code>/.proxmenux/oci-record.json</code>, et seul l'utilisateur root du conteneur peut la lire. Une sauvegarde du conteneur emporte donc toujours le contrat en vigueur au moment de la sauvegarde. Une seconde copie est conservée dans <code>/etc/pve/priv/proxmenux/oci</code>, un emplacement partagé par tous les nœuds du cluster et lisible uniquement par root sur l'hôte. Les deux copies sont écrites après chaque installation, mise à jour et modification."
}
]
},
{
"id": "manage",
"title": "Gérer les applications OCI installées",
"intro": "Cette option de l'écran principal liste les instances enregistrées avec leur application et image. Chacun d'eux est vérifié par rapport à son contrat avant toute action; un CT qui ne correspond plus à son enregistrement n'est ni modifié ni supprimé. La même mise à jour et le même éditeur sont proposés dans l'onglet Mises à jour de <monitorLink>ProxMenux Monitor</monitorLink>.",
"blocks": [
{
"table": {
"headers": [
"Option",
"Ce qui change",
"Ce qui est gardé"
],
"rows": [
[
"Mettre à jour l'image avec la configuration enregistrée",
"Le rootfs est remplacé par l'image actuellement publiée sur le canal enregistré",
"Contrat, disques de conteneur, répertoires hôtes, réseau et appareils"
],
[
"Modifier : éditer les ressources, le réseau, les chemins et le GPU",
"L'éditeur s'ouvre avec le contrat actuel; le CT est reconstruit avec les modifications",
"Les données des disques de conteneur et des répertoires hôtes"
],
[
"Watchdog : redémarrer l'application lorsqu'elle plante",
"Détermine si l'application est relancée lorsqu'elle s'arrête d'elle-même. Rien n'est reconstruit",
"L'ensemble de l'installation ; seul le choix est sauvegardé dans le contrat"
],
[
"Supprimer: supprimer l'application et ses conteneurs",
"Le LXC, ou chaque membre d'une pile, et leurs contrats sont supprimés",
"Répertoires hôtes, avec leur contenu"
]
]
}
},
{
"p": "Pour une application à plusieurs conteneurs, le menu propose <strong>Mettre à jour tous les conteneurs de l'application</strong>, <strong>Modifier les chemins et périphériques supplémentaires</strong>, <strong>Recréer tous les conteneurs avec leur configuration enregistrée</strong>, le watchdog et la suppression. Modifier ajoute ou supprime les chemins et périphériques supplémentaires du conteneur applicatif sans rien reconstruire et, pour Immich, change le composant qui exécute la reconnaissance. Recréer reconstruit chaque conteneur à partir de l'image utilisée lors de son installation, sans en chercher une plus récente."
},
{
"figure": {
"src": "/oci-manager/manage-menu.png",
"alt": "Liste des applications OCI installées, avec les options de mise à jour, de modification et de suppression",
"caption": "Gérer les applications OCI installées."
}
}
]
},
{
"id": "update",
"title": "Une mise à jour transactionnelle",
"blocks": [
{
"mermaid": {
"chartCode": "sequenceDiagram\n participant U as {{user}}\n participant P as ProxMenux\n participant R as {{registry}}\n participant X as Proxmox VE\n U->>P: {{update}}\n P->>R: {{resolve}}\n R-->>P: digest\n P->>P: {{verify}}\n P->>X: {{backup}}\n P->>X: {{import}}\n P->>X: {{reapply}}\n X-->>P: healthcheck\n alt {{healthy}}\n P-->>U: {{commit}}\n else {{failure}}\n P->>X: Rollback\n P-->>U: {{restored}}\n end",
"labels": {
"user": "Utilisateur",
"registry": "Registre OCI",
"update": "Mettre à jour l'instance",
"resolve": "Résoudre la balise",
"verify": "Vérifier l’archive et effectuer les contrôles préalables",
"backup": "Arrêter et sauvegarder le CT",
"import": "Importer le nouveau rootfs",
"reapply": "Appliquer à nouveau le contrat",
"healthy": "sain",
"failure": "défaillance",
"commit": "Contrat publié avec le nouveau digest",
"restored": "instance précédente restaurée"
}
}
},
{
"list": {
"items": [
"Lorsque le registre sert encore le digest installé, rien n'est téléchargé et l'instance n'est pas touchée.",
"La nouvelle image est vérifiée couche par couche avant l'arrêt du CT. Un téléchargement qui arrive endommagé est récupéré une deuxième fois ; une image déjà mise en cache qui échoue la vérification est à nouveau téléchargée.",
"Les paramètres modifiés dans Proxmox VE après l'installation (mémoire, swap, cœurs, limite et priorité du CPU, démarrage avec le nœud) sont conservés et intégrés au nouveau contrat.",
"L'interface LAN ajoutée par la suite Arr et les applications à plusieurs conteneurs (<code>net1</code>), ainsi que l'ordre de démarrage (<code>startup</code>), sont réappliqués tels quels au nouveau conteneur.",
"Toute autre différence entre le CT et son contrat arrête la mise à jour avant que le CT ne soit arrêté."
]
}
},
{
"flow": {
"nodes": [
{
"label": "Avant",
"detail": "rootfs A\n/config mp0\n/media répertoire de l’hôte"
},
{
"label": "Mise à jour",
"detail": "remplace uniquement\nle rootfs"
},
{
"label": "Après",
"detail": "rootfs B\n/config mp0\n/media répertoire de l’hôte"
}
]
}
},
{
"p": "Avant tout arrêt, l'opération vérifie l'espace nécessaire à la sauvegarde : les données utilisées sur les volumes inclus, plus une marge. La sauvegarde est écrite à côté de l'enregistrement de l'application, sur le disque système de l'hôte. Si l'espace y est insuffisant, le menu demande un autre stockage de l'hôte acceptant les sauvegardes. La sauvegarde y est créée puis supprimée à la fin de l'opération. Ce choix est mémorisé pour l'application, y compris pour les mises à jour planifiées. Si aucun stockage n'a assez de place, l'opération est refusée et l'application reste inchangée. L'espace nécessaire à la nouvelle image est également vérifié avant son téléchargement."
}
]
},
{
"id": "recovery",
"title": "Récupération d'une opération interrompue",
"intro": "Une mise à jour et un changement utilisent une transaction persistante. Si le processus, le terminal ou le nœud est interrompu après l'arrêt du CT, l'opération n'est pas prise comme terminée.",
"blocks": [
{
"steps": {
"items": [
{
"title": "Marqueur en attente",
"body": "À l'ouverture de Gérer les applications OCI installées, l'état enregistré indique que le remplacement n'a jamais été publié."
},
{
"title": "Afficher l’état",
"body": "Affiche la phase qui a été atteinte sans changer de conteneur ou de données."
},
{
"title": "Récupérer l'installation précédente",
"body": "Restaure la sauvegarde native vérifiée réalisée avant le remplacement, ainsi que le contrat précédent."
},
{
"title": "Piles traitées comme une unité",
"body": "Pour une application multi-conteneurs, chaque membre est récupéré du même point de transaction, pas seulement celui sélectionné."
}
]
}
},
{
"calloutWarning": {
"title": "Les répertoires de l’hôte sont exclus du retour arrière",
"body": "La sauvegarde couvre le rootfs et les disques du conteneur qui y sont inclus. Un répertoire de l’hôte n’est pas rétabli à son état précédent, car d’autres LXC peuvent utiliser ses données."
}
}
]
},
{
"id": "watchdog",
"title": "Watchdog: redémarrer une application qui s'arrête",
"intro": "Proxmox n'a pas de politique de redémarrage : quand le processus d'un conteneur applicatif se termine, le conteneur reste arrêté. Si le watchdog est activé, une application qui s'arrête d'elle-même est relancée. Il joue pour une application OCI le rôle de <code>restart: unless-stopped</code> dans un fichier Compose.",
"blocks": [
{
"table": {
"headers": [
"Ce qui se passe",
"Avec le watchdog activé"
],
"rows": [
[
"L’application plante ou son processus se termine",
"Le conteneur est relancé en quelques secondes"
],
[
"Il est arrêté ou éteint depuis Proxmox, depuis le Monitor ou avec <code>pct</code>",
"Il reste arrêté jusqu’à ce que quelqu’un le démarre"
],
[
"Une sauvegarde, une migration ou une opération ProxMenux travaille dessus",
"Rien n'est fait jusqu'à la fin"
],
[
"Il était déjà arrêté au démarrage de l’hôte",
"Il reste arrêté ; cela dépend de <strong>Démarrer avec Proxmox</strong>"
],
[
"Il s’arrête systématiquement juste après son démarrage",
"Pour une application qui s’arrête quelques secondes après son démarrage ou qui ne démarre pas, cinq tentatives sont effectuées, séparées par des délais de 30 secondes, 1, 2 et 5 minutes. Elle reste ensuite arrêtée et une notification est envoyée"
]
]
}
},
{
"p": "L'installateur pose la question dans les deux modes d'installation et propose la valeur déclarée par la recette de l'application. Ce réglage peut ensuite être modifié dans <strong>Gérer les applications OCI installées</strong> ou avec le commutateur <strong>Watchdog</strong> du conteneur dans <monitorLink>ProxMenux Monitor</monitorLink>. Il s'applique à tous les conteneurs d'une application à plusieurs conteneurs. Un seul service de l'hôte, <code>proxmenux-oci-watchdog.service</code>, surveille les applications pour lesquelles il est activé ; son installation figure dans l'onglet Modifications d'Audit & Report."
},
{
"calloutInfo": {
"title": "Ce que l'hôte ne peut pas dire",
"body": "Le code de sortie de l'application ne parvient pas à l'hôte. Un arrêt normal et un plantage sont donc indiscernables et entraînent tous deux un redémarrage, comme avec <code>always</code> et <code>unless-stopped</code> dans Docker. Un arrêt demandé en dehors de Proxmox, avec <code>lxc-stop</code> ou <code>systemctl</code>, ne laisse aucune tâche d'arrêt et est interprété comme un arrêt spontané."
}
}
]
},
{
"id": "restore",
"title": "Sauvegarde, restauration et un autre hôte",
"intro": "Une sauvegarde réalisée avec vzdump ou Proxmox Backup Server contient le conteneur, les disques du conteneur sélectionnés pour la sauvegarde et la copie de son contrat. Les éléments conservés par l'installation sur l'hôte n'en font pas partie. <strong>Gérer les applications OCI installées</strong> détecte les conteneurs restaurés sur un hôte dépourvu de leur contrat, après une nouvelle installation de Proxmox ou sur un autre hôte, et propose de les enregistrer à nouveau.",
"blocks": [
{
"steps": {
"items": [
{
"title": "Restaurer les conteneurs dans Proxmox",
"body": "Depuis le stockage de sauvegarde, avec l’ID d’origine ou tout autre ID libre. Une application à plusieurs conteneurs nécessite tous ses conteneurs."
},
{
"title": "Ouvrir la gestion des applications OCI installées",
"body": "Les conteneurs restaurés sont listés et la récupération est proposée. Le bouton <strong>Récupérer</strong> de l’onglet Mises à jour de <monitorLink>ProxMenux Monitor</monitorLink> ouvre la même récupération."
},
{
"title": "Vérifier avant de changer",
"body": "La récupération vérifie que l'hôte a tout ce dont chaque application a besoin. Une application qui ne peut pas être récupérée entière est laissée comme elle a été trouvée, avec la raison."
},
{
"title": "Enregistrer et démarrer",
"body": "Le contrat est enregistré sur cet hôte et les éléments que l'installation y conservait sont réécrits. Le démarrage des applications fait l'objet d'une question distincte, à laquelle il faut répondre Non si les conteneurs d'origine fonctionnent encore sur un autre hôte."
}
]
}
},
{
"figure": {
"src": "/oci-manager/restore-offer.png",
"alt": "Boîte de dialogue qui énumère les conteneurs restaurés et propose de les récupérer",
"caption": "La récupération offerte lors de l'ouverture de la gestion des applications OCI installées."
}
},
{
"table": {
"headers": [
"Ce que l'hôte a gardé",
"Après la récupération"
],
"rows": [
[
"Contrat d’instance",
"Enregistré à partir de la copie conservée dans le conteneur et vérifié par rapport à la configuration restaurée par Proxmox"
],
[
"Réseau privé d'une application multiconteneurs",
"Recréé avec le même pont et sous-réseau ; les adresses fixes des conteneurs ne changent pas"
],
[
"Ordre de démarrage d'une application multi-conteneurs",
"Le hookscript de dépendance et son contrat sont à nouveau installés ; les extraits sont activés sur le stockage <code>local</code> quand aucun stockage ne les accepte"
],
[
"Sysctls réseau et fichier host-monitor",
"Ecrit à nouveau en <code>/etc/pve/proxmenux</code>"
],
[
"Environnement d’exécution NVIDIA",
"Le hook d’un conteneur non privilégié est réinstallé. Un conteneur privilégié reçoit les fichiers de pilote de cet hôte à la place de ceux de son hôte d’origine"
],
[
"Rclone montage",
"Le hookscript et les programmes qui publient le montage sont à nouveau écrits, avec les mêmes vues sur l'hôte"
],
[
"Règle du pare-feu d'un moniteur hôte",
"Une nouvelle confirmation est demandée pour son port web et le sous-réseau du pont sur cet hôte"
],
[
"<code>lost+found</code> de chaque disque restauré",
"Supprimé s’il est vide ; une restauration le crée et certaines applications ne démarrent pas s’il figure dans leurs données"
],
[
"Disques restaurés sur un autre stockage",
"Le contrat est mis à jour pour refléter le stockage sur lequel ils se trouvent maintenant"
]
]
}
},
{
"p": "Un conteneur restauré avec un autre ID conserve son application. Le contrat, son journal de console, ses paramètres sysctl réseau, le hookscript d'un montage Rclone et l'ordre de démarrage d'une application à plusieurs conteneurs sont enregistrés avec les ID des conteneurs sur cet hôte."
},
{
"table": {
"headers": [
"Ce qui empêche une récupération",
"Que faire"
],
"rows": [
[
"Il manque un conteneur d'une application multiconteneurs",
"Restaurer aussi; l'application est récupérée entière"
],
[
"Le sous-réseau privé est déjà utilisé sur cet hôte",
"La récupération est annulée et rien n’est modifié : les adresses des conteneurs sont fixes et ne sont pas déplacées vers un autre sous-réseau"
],
[
"Un répertoire hôte n'existe pas",
"Monter ou créer avec ses données; une sauvegarde du conteneur n'inclut pas les répertoires hôtes"
],
[
"Un périphérique n'existe pas sur cet hôte",
"Connectez-le ou retirez-le du conteneur dans Proxmox"
],
[
"Une application avec NVIDIA sur un hôte sans pilote",
"Installez le pilote NVIDIA et le Container Toolkit"
],
[
"La sauvegarde a été effectuée avant l'existence de la copie du contrat",
"Le conteneur reste en tant que LXC ordinaire et n'est pas offert à nouveau"
]
]
}
},
{
"calloutInfo": {
"title": "Un conteneur qui revient",
"body": "Un conteneur restauré sur lui-même à partir d'une ancienne sauvegarde, retourné à un instantané ou retourné d'un autre noeud porte le contrat de l'état dans lequel il est. Lorsqu'il est sélectionné pour une opération et que son contrat diffère de celui de cet hôte, l'opération ne démarre pas et le conteneur est offert pour récupération."
}
},
{
"figure": {
"src": "/oci-manager/restore-result.png",
"alt": "Résultat de la récupération avec le réseau privé, l’ordre de démarrage et les conteneurs enregistrés",
"caption": "Résultat d'une reprise, étape par étape."
}
}
]
},
{
"id": "remove",
"title": "Supprimer une application OCI",
"blocks": [
{
"p": "Avant la confirmation, un résumé est établi à partir de la configuration réelle : les conteneurs supprimés, les données supprimées avec eux, le réseau privé libéré et les répertoires de l’hôte conservés. La réponse par défaut est <strong>Non</strong>, car les données des disques supprimés ne pourront pas être récupérées ensuite."
},
{
"table": {
"headers": [
"Ressource",
"À la suppression",
"Motifs"
],
"rows": [
[
"rootfs et disques du conteneur",
"Supprimés",
"Ils appartiennent seulement au conteneur"
],
[
"Répertoire de l'hôte",
"Conservé, avec son contenu",
"D'autres applications peuvent l'utiliser"
],
[
"Fichiers hôtes du conteneur",
"Supprimés",
"Son journal de console, ses paramètres sysctl réseau, le hookscript du montage Rclone et son inscription dans l’onglet App de ProxMenux Monitor ne servent à aucun autre conteneur"
],
[
"Fichiers partagés par plusieurs installations",
"Supprimé avec la dernière installation qui les utilise",
"Le fichier de surveillance de l’hôte et le hookscript des dépendances des applications à plusieurs conteneurs"
],
[
"Contrat d’instance",
"Supprimé après une suppression réussie",
"Aucun CT ne lui est plus associé"
],
[
"Pont privé d'une pile",
"Relâché avec la pile",
"Il n'y a plus de membres pour se connecter"
],
[
"Réseau partagé par la suite Arr",
"Libéré lors de la suppression de la dernière application de la suite",
"Chaque application de la suite est indépendante et se supprime séparément"
],
[
"Un seul membre d'une pile",
"Non enlevé seul",
"Toute l'application est retirée, donc aucune pile n'est laissée incomplète"
],
[
"Un conteneur sur un autre noeud du cluster",
"Non enlevé",
"Son enregistrement et ses fichiers sur l’hôte se trouvent sur le nœud où il a été installé : il faut le supprimer là-bas, après l’y avoir remigré"
]
]
}
},
{
"figure": {
"src": "/oci-manager/remove-summary.png",
"alt": "Résumé de suppression avec les conteneurs, les données et les répertoires hôtes touchés",
"caption": "Le résumé de suppression, construit à partir de la configuration réelle."
}
}
]
},
{
"id": "archives",
"title": "Images téléchargées et espace hôte",
"blocks": [
{
"p": "L’archive OCI sert à construire le rootfs ; le CT en cours d’exécution ne la lit pas. Après une installation ou une mise à jour, les archives téléchargées pendant cette opération sont listées avec leur taille et leur suppression est proposée. Les supprimer libère de l’espace sans affecter le conteneur ni ses données."
},
{
"calloutInfo": {
"title": "Les mises à jour ne nécessitent pas l'archive",
"body": "Sans l'archive, une mise à jour résout le canal enregistré et télécharge le nouveau digest. Avec elle, une archive n'est réutilisée que lorsque sa référence et son intégrité correspondent à ce qui est demandé."
}
}
]
},
{
"id": "registry",
"title": "Registre et nettoyage",
"blocks": [
{
"p": "À l'ouverture de <strong>Gérer les applications OCI installées</strong>, les restes des conteneurs absents de tous les nœuds du cluster sont d'abord supprimés : l'enregistrement conservé comme historique après une suppression depuis l'interface Proxmox, et les fichiers de l'hôte laissés par une suppression. Un enregistrement lié à une opération interrompue est conservé, car sa sauvegarde peut encore être nécessaire. Les volumes et répertoires de l'hôte ne sont jamais supprimés par déduction."
}
]
},
{
"id": "cluster",
"title": "Dans un cluster : migration et haute disponibilité",
"intro": "Un conteneur OCI est un LXC Proxmox ordinaire : il peut être migré ou géré par HA comme les autres, avec les mêmes limites. Les éléments nécessaires à son démarrage sont conservés à un emplacement accessible à tous les nœuds du cluster.",
"blocks": [
{
"table": {
"headers": [
"Partie",
"Sur un autre noeud du cluster"
],
"rows": [
[
"Journal de console",
"Le conteneur crée <code>/var/log/proxmenux/oci</code> avant de démarrer, quel que soit le nœud qui l’exécute. Chaque nœud conserve le journal des démarrages qu’il a effectués."
],
[
"Paramètres sysctl réseau et surveillance de l’hôte",
"Conservés dans <code>/etc/pve/proxmenux</code>, partagé par tous les nœuds du cluster, afin qu’un conteneur migré les retrouve."
],
[
"Disques du conteneur",
"Proxmox les déplace avec le conteneur. HA nécessite que leurs données soient disponibles sur le nœud cible, via un stockage partagé ou une configuration de réplication prise en charge."
],
[
"Répertoires et périphériques de l'hôte",
"Les mêmes règles que n'importe quel LXC : un répertoire hôte doit exister sur le nœud cible et être marqué comme partagé, et un GPU, Coral ou NPU doit y être présent."
],
[
"Enregistrement ProxMenux",
"Le contrat reste sur le nœud où l'application a été installée, et chaque nœud lit la copie conservée dans <code>/etc/pve/priv/proxmenux/oci</code>. Une application à un seul conteneur est enregistrée sur son nœud de destination après migration lors de l'ouverture de <strong>Gérer les applications OCI installées</strong> ou du lancement d'une opération la concernant. Une application à plusieurs conteneurs y est proposée à la récupération, car son réseau privé doit être créé sur ce nœud."
]
]
}
},
{
"calloutWarning": {
"title": "Pas pour une disponibilité élevée",
"body": "Une application à plusieurs conteneurs relie ses membres par un pont privé du nœud sur lequel elle a été installée ; ses membres restent donc sur ce nœud. Un outil de surveillance de l’hôte, comme Glances en mode hôte ou Netdata, surveille le nœud qui l’exécute ; le déplacer reviendrait à surveiller un autre nœud."
}
},
{
"p": "Une sauvegarde restaurée à l'extérieur du cluster obtient les fichiers de <code>/etc/pve/proxmenux</code> que le conteneur utilise lorsque l'application est récupérée."
}
]
},
{
"id": "channel",
"title": "Une étiquette évolutive n’est pas une mise à jour sans surveillance",
"blocks": [
{
"p": "Le catalogue installe l’étiquette évolutive publiée par son responsable, mais le digest effectif est résolu et enregistré, puis modifié uniquement lors d’une mise à jour explicite avec contrôles préalables et retour arrière. <monitorLink>ProxMenux Monitor</monitorLink> compare le digest installé à celui publié par le registre et affiche une indication et une notification lorsqu’une nouvelle image est disponible."
}
]
}
]
}
@@ -0,0 +1,213 @@
{
"meta": {
"title": "Conteneurs OCI dans ProxMenux Monitor | ProxMenux",
"description": "Ce que ProxMenux Monitor montre pour un conteneur installé par OCI Manager Apps : versions d'applications et d'images, nouvelles images, sortie console et terminal Proxmox VE."
},
"header": {
"title": "Dans ProxMenux Monitor",
"description": "Un conteneur installé par OCI Manager Apps apparaît dans VMs & LXCs comme n'importe quel autre LXC. Sa fenêtre modale lit l'enregistrement d'installation : versions d'application et d'image, nouvelles images, sortie console et terminal.",
"section": "OCI manager Apps"
},
"sections": [
{
"id": "intro",
"blocks": [
{
"calloutInfo": {
"title": "L'enregistrement est la source",
"body": "OCI manager Apps connaît l’application installée et sa provenance. Le Monitor lit cet enregistrement d’installation au lieu de rechercher l’application dans le conteneur. Ces informations restent donc disponibles que le conteneur fonctionne ou soit arrêté."
}
},
{
"table": {
"headers": [
"onglet",
"Ce qui change pour un conteneur OCI"
],
"rows": [
[
"État",
"Un commutateur <strong>Watchdog</strong> sous Démarrer au démarrage: l'application est redémarrée quand elle s'arrête seule"
],
[
"Application",
"L'application est identifiée à partir du dossier et les mises à jour sont suivies par l'image"
],
[
"Mises à jour",
"L'image est mise à jour ou l'application modifiée, avec le même flux que le menu OCI"
],
[
"Montages",
"Disques de conteneurs et répertoires hôtes, avec leur utilisation"
],
[
"Journaux",
"Uniquement pour les conteneurs OCI : la sortie console de l'application"
]
]
}
}
]
},
{
"id": "app",
"title": "Application",
"intro": "L'onglet <appLink>App</appLink> offre l'application installée comme détection, avec le nom, le logo, le port et le schéma de l'enregistrement. L'enregistrer ouvre l'éditeur avec la méthode <strong>OCI image (installée par ProxMenux)</strong>, qui ne nécessite aucune configuration.",
"blocks": [
{
"cards": {
"items": [
{
"icon": "boxes",
"title": "Application",
"body": "La version de l'application à l'intérieur de l'image, lue à partir de l'image elle-même : son environnement ou son étiquette <code>org.opencontainers.image.version</code>. Cette information est indicative."
},
{
"icon": "archive",
"title": "Image",
"body": "La date de construction et le digest de l'image installée. La mise à jour est décidée ici: le digest installé est comparé à celui que le registre publie aujourd'hui pour le même tag."
}
]
}
},
{
"list": {
"items": [
"Lorsque le registre publie un nouveau digest, la carte affiche <strong>Nouvelle image</strong> avec sa date et son digest, même si la version de l'application à l'intérieur n'a pas changé: une reconstruction sur une base mise à jour est une mise à jour.",
"Lorsque les digests correspondent, la carte lit <strong>Version</strong>.",
"La carte relie au dépôt de l'image : son projet GitHub, ou sa page Docker Hub pour une image officielle.",
"Le lien d'accès utilise l'adresse LAN du conteneur, également pour le membre principal d'une application multi-conteneurs, qui a une deuxième adresse sur son réseau privé.",
"Le bouton <strong>Actualiser les données</strong> relit l’enregistrement et le registre des images. Les options de recherche ou d’enregistrement d’une autre application ne sont pas proposées : le conteneur contient exactement l’application de son enregistrement."
]
}
},
{
"figure": {
"src": "/oci-manager/monitor-app-tab.png",
"alt": "Onglet App d'un conteneur OCI avec la version de l'application, l'image et le lien du dépôt",
"caption": "Onglet Application d’un conteneur installé par OCI manager Apps."
}
},
{
"p": "La vérification s'effectue une fois par jour avec les vérifications de mise à jour du moniteur, et <strong>Actualiser les données</strong> l'exécute immédiatement. Une nouvelle image est envoyée sous forme de notification via les canaux configurés dans <notificationsLink>Notifications</notificationsLink>. La mise à jour est appliquée depuis l'onglet Mises à jour."
}
]
},
{
"id": "updates",
"title": "Mises à jour",
"intro": "Pour un conteneur installé par OCI manager Apps, l’onglet Mises à jour présente l’application avec son image installée et, si le registre en publie une, la nouvelle image, au même format que les autres applications. Les outils de mise à jour des paquets et applications d’un LXC ordinaire ne sont pas proposés.",
"blocks": [
{
"table": {
"headers": [
"Bouton",
"Ce qu'il ouvre"
],
"rows": [
[
"Mise à jour",
"La mise à jour de <lifecycleLink>Gérer les applications OCI installées</lifecycleLink> pour ce conteneur, dans le terminal de Monitor. Elle peut être lancée avec ou sans nouvelle image ; sans nouvelle image, rien ne change. Pour une application multiconteneur, elle met à jour tous les membres."
],
[
"Modifier",
"L'éditeur de l'application (ressources, réseau, chemins et GPU). Dans une application multi-conteneurs, il ajoute ou supprime les chemins et périphériques supplémentaires du conteneur d'application et, dans Immich, modifie ce qui exécute la reconnaissance."
],
[
"Récupérer",
"Remplace Mise à jour quand une opération sur le conteneur a été interrompue, et ouvre sa récupération."
],
[
"Récupérer (conteneur restauré)",
"Affiché pour un conteneur restauré depuis une sauvegarde sans contrat sur cet hôte, sous <strong>Application OCI restaurée</strong>. Ouvre la <lifecycleLink>récupération</lifecycleLink> dans le terminal de Monitor ; Mettre à jour et Modifier apparaissent après son enregistrement."
]
]
}
},
{
"p": "Les modifications externes, les répertoires hôtes et les applications multiconteneurs sont traités comme dans le menu OCI. Dans une application multi-conteneurs, les boutons et les options apparaissent uniquement sur le conteneur principal; les autres membres montrent leur image, une note qu'ils sont mis à jour à partir du conteneur principal et un bouton qui l'ouvre. Lorsque le terminal se ferme, l'image, l'enregistrement et les montages sont à nouveau lus."
},
{
"table": {
"headers": [
"Option",
"Comportement"
],
"rows": [
[
"Conserver la sauvegarde prise avant la mise à jour",
"Chaque mise à jour sauvegarde le conteneur pour le restaurer si la mise à jour échoue. Avec cette option, la même sauvegarde est conservée dans le stockage choisi et apparaît parmi les sauvegardes du CT; sur Proxmox Backup Server une sauvegarde est écrite avant la mise à jour."
],
[
"Mises à jour programmées",
"L’image n’est mise à jour à l’heure choisie que si le registre en publie une nouvelle, avec la possibilité d’attendre qu’elle ait 1, 3, 7 ou 14 jours. Un conteneur modifié en dehors de ProxMenux est ignoré et signalé."
]
]
}
}
]
},
{
"id": "logs",
"title": "Journaux",
"intro": "L'onglet Logs n'apparaît que pour les conteneurs installés par l'OCI Manager Apps, entre Montages et Sauvegardes. Il montre la sortie standard et l'erreur du processus principal de l'image, la même sortie <code>docker logs</code> affiche pour un conteneur Docker.",
"blocks": [
{
"list": {
"items": [
"La sortie est conservée sur l'hôte dans <code>/var/log/proxmenux/oci/VMID.console.log</code> (mode 0600), dès le premier démarrage et sur les redémarrages, de sorte qu'il peut être lu avec le conteneur arrêté.",
"Le fichier est tourné à 10 MB, en conservant trois copies compressées (<code>/etc/logrotate.d/proxmenux-oci</code>).",
"Chaque démarrage du conteneur est marqué dans la sortie. L'onglet affiche la sortie depuis le dernier démarrage par défaut; <strong>L'historique complet</strong> montre également les précédents.",
"Lorsque l'application est supprimée, sa sortie est supprimée avec elle.",
"Les 100, 500 ou 1000 dernières lignes sont affichées. Quand le conteneur fonctionne, les nouvelles lignes sont suivies en direct ; faire défiler vers le haut met le suivi en pause et <strong>Suivre</strong> le reprend.",
"Un filtre n'indique que les lignes qui contiennent un texte, et <strong>Télécharger</strong> enregistre les lignes chargées.",
"Les codes de couleur sont supprimés et une ligne qu'une barre de progression redessine est affichée dans son état final.",
"L’onglet relit le fichier à chaque ouverture, sans mise en cache."
]
}
},
{
"calloutInfo": {
"title": "Identifiants du premier démarrage",
"body": "Les images qui impriment un mot de passe généré sur leur premier démarrage le laissent dans cette sortie, comme le fait <code>docker logs</code>. L'installateur le lit à partir de là pour le montrer dans son résumé."
}
},
{
"figure": {
"src": "/oci-manager/monitor-logs-tab.png",
"alt": "Onglet Logs avec la sortie console d'un conteneur OCI, le sélecteur de ligne, le filtre et le bouton suivant",
"caption": "Sortie de console d'un conteneur OCI."
}
}
]
},
{
"id": "terminal",
"title": "Console Proxmox VE",
"blocks": [
{
"p": "Une image OCI exécute son propre processus comme PID 1 et aucun service de connexion, de sorte que la console par défaut d'un LXC ouvrirait un terminal où rien ne répond. Les conteneurs installés par OCI Manager Apps sont créés avec <code>cmode: shell</code> : la console Proxmox VE ouvre un shell avec <code>lxc-attach</code>, l'équivalent de <code>docker exec</code>, avec l'application en cours d'exécution intacte."
},
{
"list": {
"items": [
"Le shell est celui attribué à root dans l’image par <code>/etc/passwd</code>. Si root n’a pas de shell ou si l’image n’en contient aucun, la console par défaut est conservée.",
"Le shell s’exécute en tant que root dans le conteneur, sans mot de passe. Qui peut l'ouvrir est décidé par la permission <code>VM.Console</code> de Proxmox VE.",
"Le terminal du moniteur entre dans le conteneur avec <code>pct enter</code>, qui fonctionne de la même manière."
]
}
}
]
},
{
"id": "mounts",
"title": "Montages",
"blocks": [
{
"p": "L'onglet <mountsLink>Mounts</mountsLink> énumère les disques de conteneur et les répertoires hôtes du conteneur. L'utilisation d'un disque de conteneur sur le stockage de blocs comme LVM-thin est lue à partir du système de fichiers du disque, qui est monté uniquement à l'intérieur du conteneur."
}
]
}
]
}
@@ -0,0 +1,404 @@
{
"meta": {
"title": "Applications multiconteneurs ProxMenux",
"description": "Comment OCI manager Apps transforme une application avec sa base de données et cache en LXC natifs coordonnés: plan, réseau privé, crochet de dépendance, validation et mises à jour transactionnelles."
},
"header": {
"title": "Applications à plusieurs conteneurs",
"description": "Une application avec sa base de données, cache et d'autres services devient plusieurs LXC natifs coordonnés, installés et mis à jour comme un seul.",
"section": "OCI manager Apps"
},
"sections": [
{
"id": "intro",
"blocks": [
{
"calloutInfo": {
"title": "Une application pour l'utilisateur, plusieurs LXC pour Proxmox VE",
"body": "Une définition multi-conteneurs est une entrée du catalogue. L'installateur crée un LXC natif par service et garde leurs dépendances explicites. Immich, Nextcloud, Paperless-ngx et Tandoor sont installés de cette façon."
}
},
{
"mermaid": {
"chartCode": "flowchart LR\n C[\"Docker Compose\"] --> O[\"{{plan}}\"]\n O --> A[\"{{app}}<br/>{{appNet}}\"]\n O --> D[\"{{db}}<br/>{{private}}\"]\n O --> R[\"{{cache}}<br/>{{private}}\"]\n V1[(\"config\")] --> A\n V2[(\"database\")] --> D\n V3[(\"cache\")] --> R\n D --> A\n R --> A",
"labels": {
"plan": "Plan de la pile",
"app": "Application LXC",
"appNet": "LAN + privé",
"db": "PostgreSQL LXC",
"cache": "Valkey LXC",
"private": "privé"
}
}
}
]
},
{
"id": "plan",
"title": "1. Le plan, avant l'existence d'un conteneur",
"blocks": [
{
"p": "Aucun LXC n'est créé pendant que la définition Compose est interprétée. Un plan complet vient en premier, avec chaque membre, image, VMID, réseau, chemin, secret, ordre et bilan de santé. Si le plan n'est pas cohérent, l'installation ne démarre pas."
},
{
"table": {
"headers": [
"Élément du plan",
"Contenu",
"Vérification avant de créer quelque chose"
],
"rows": [
[
"Membres",
"Application principale, base de données, cache, apprentissage automatique et autres dépendances",
"VMID uniques, rôles connus et exactement un membre principal"
],
[
"Images",
"Référence roulante, architecture et digest résolu de chaque service",
"Toutes existent, prennent en charge l’architecture et réussissent la vérification d’intégrité OCI"
],
[
"Réseau",
"Pont privé, sous-net, une adresse fixe par service et accès au réseau local pour le membre principal",
"Aucune collision avec des ponts ou sous-réseaux existants et aucune adresse répétée"
],
[
"Persistance",
"Disques de conteneur, répertoires hôtes, propriétaires et sauvegarde",
"Aucun chemin de chevauchement, stockage disponible et autorisations déclarées"
],
[
"Secrets",
"Mot de passe de la base de données, clés d'application et identifiants initiaux",
"Généré une fois et donné seulement aux membres qui les utilisent"
],
[
"Cycle de vie",
"Ordre de départ, ordre d'arrêt et bilan de santé par membre",
"L'application principale démarre en dernier et s'arrête en premier"
]
]
}
}
]
},
{
"id": "create",
"title": "2. Création, membre par membre",
"blocks": [
{
"steps": {
"items": [
{
"title": "Réserve tous les VMID",
"body": "L'inventaire Proxmox VE et le registre des instances sont vérifiés. Un CT existant n'est pas adopté et un contrat qui appartient encore à une autre instance n'est pas réutilisé."
},
{
"title": "Préparer chaque image",
"body": "Toutes les images sont résolues, téléchargées et vérifiées avant la création du premier conteneur."
},
{
"title": "Créer chaque rootfs",
"body": "Les métadonnées OCI officielles sont importées, puis l’identité de l’instance ProxMenux et le rôle du membre sont ajoutés."
},
{
"title": "Réseau privé",
"body": "Un bridge et un sous-net sont créés et chaque membre obtient son adresse fixe; seul le membre principal obtient également l'interface LAN."
},
{
"title": "Persistance",
"body": "Chaque base de données et configuration obtient son propre disque conteneur ; seules les données destinées à être partagées utilisent des répertoires hôtes."
},
{
"title": "Environnement",
"body": "Les points d’accès internes, les secrets partagés et les variables de service sont écrits. L’application accède à ses dépendances via leurs adresses privées réservées."
},
{
"title": "Enregistrement",
"body": "Chaque membre enregistre sa configuration native, les changements rootfs que les mises à jour doivent reproduire et sa relation avec la pile."
}
]
}
}
]
},
{
"id": "checks",
"title": "3. Démarrer et vérifier chaque conteneur",
"intro": "Un LXC créé ne signifie pas un service prêt. Les dépendances commencent dans l'ordre et chacune passe un contrôle spécifique à son service.",
"blocks": [
{
"table": {
"headers": [
"Services",
"Vérification",
"Ce qu'il montre"
],
"rows": [
[
"PostgreSQL",
"<code>pg_isready</code> dans le CT avec l'hôte, l'utilisateur et la base de données attendus",
"Le serveur accepte les connexions pour la base de données configurée"
],
[
"Redis / Valkey",
"<code>redis-cli</code> ou <code>valkey-cli</code> <code>PING</code> contre son adresse privée",
"Le broker écoute et répond"
],
[
"Immich apprentissage automatique",
"HTTP <code>GET /ping</code>, avec vérification de l’environnement d’exécution GPU sélectionné",
"Le service répond et l’accélération demandée n’a pas basculé vers le CPU"
],
[
"Nextcloud",
"<code>GET /status.php</code> avec <code>installed=true</code>, <code>maintenance=false</code> et <code>needsDbUpgrade=false</code>",
"Initialisation terminée sans aucune migration en attente"
],
[
"Paperless-ngx / Tandoor",
"HTTP sur l'adresse LAN et le port réel du service",
"La façade et ses dépendances servent l’application"
],
[
"Application principale",
"L'extrémité de son modèle, par exemple <code>/api/server/ping</code> dans Immich",
"La pile entière fonctionne à travers l'application qui utilise les dépendances"
]
]
}
},
{
"calloutWarning": {
"title": "En cours d’exécution ne signifie pas opérationnel",
"body": "L’état en cours d’exécution indique seulement que le processus LXC existe. Si le service propose une meilleure vérification, un contrôle exec ou HTTP avec délai maximal est utilisé. Si un membre s’arrête ou échoue à son contrôle, la pile n’est pas déclarée installée."
}
}
]
},
{
"id": "hook",
"title": "4. Le crochet de dépendance",
"blocks": [
{
"p": "Le crochet est placé uniquement sur le conteneur principal d'une pile dépendante. Proxmox VE conserve le script comme un extrait et l'exécute comme le <code>hookscript</code> de ce CT. La recette de pile n'est pas écrite dans le script : elle vit dans un contrat privé séparé."
},
{
"codeGrid": {
"items": [
{
"title": "Configuration principale CT",
"code": "hookscript: local:snippets/proxmenux-stack-dependencies.sh"
},
{
"title": "Contrat privé (exemple)",
"code": "/etc/pve/priv/proxmenux-stack-VMID.json\n{\n \"schema\": 1,\n \"stack\": \"immich\",\n \"dependencies\": [\n {\"vmid\": 107, \"label\": \"PostgreSQL\", \"healthcheck\": {...}},\n {\"vmid\": 108, \"label\": \"Valkey\", \"healthcheck\": {...}},\n {\"vmid\": 106, \"label\": \"Machine Learning\", \"healthcheck\": {...}}\n ]\n}"
}
]
}
},
{
"snippet": {
"summary": "Source complète de proxmenux-stack-dependencies.sh",
"pathCode": "local:snippets/proxmenux-stack-dependencies.sh",
"snippetCode": "stackDependencyHook"
}
},
{
"p": "Le script est le même pour chaque pile. Les VMID, noms, types de vérifications et délais proviennent du contrat privé <code>/etc/pve/priv/proxmenux-stack-VMID.json</code> de chaque pile."
},
{
"steps": {
"items": [
{
"title": "Proxmox VE appelle pre-start",
"body": "Avant le démarrage du CT principal, le crochet fonctionne avec son VMID et la phase du cycle de vie."
},
{
"title": "Un verrou par pile",
"body": "<code>flock</code> sur <code>/run/lock/proxmenux-stack-VMID.lock</code> empêche deux séquences de démarrage en même temps."
},
{
"title": "Le contrat est lu et validé",
"body": "Un schéma connu, des dépendances numériques, des étiquettes, un contrôle exec, http ou running et un délai maximal positif sont requis."
},
{
"title": "Dépendances dans l'ordre",
"body": "Chaque CT doit exister ; un CT arrêté est démarré, tandis qu’un CT déjà actif n’est pas redémarré."
},
{
"title": "Attendre que le service soit prêt",
"body": "Le contrôle est effectué toutes les deux secondes, et le CT est également confirmé être toujours en cours d'exécution."
},
{
"title": "Le principal CT démarre",
"body": "Lorsque chaque dépendance est prête, prédémarrage se termine et Proxmox VE démarre l'application."
}
]
}
},
{
"calloutInfo": {
"title": "Le crochet n'arrête pas les dépendances",
"body": "Les phases post-démarrage, pré-stop et post-stop ne font rien. L'arrêt du principal CT laisse tourner PostgreSQL, Redis, Valkey ou l'apprentissage automatique. Le crochet commande le démarrage; il ne transforme pas plusieurs LXC en un seul processus."
}
},
{
"table": {
"headers": [
"Type",
"Exemple",
"Démarrages suivants"
],
"rows": [
[
"Pile dépendante",
"Immich, Nextcloud, application avec PostgreSQL",
"Le crochet du CT principal commence les dépendances et les attend"
],
[
"Suite d'application",
"Suite Arr",
"Aucun membre principal: chaque LXC suit son propre <code>onboot</code>"
],
[
"Application unique",
"Jellyfin",
"Proxmox VE commence directement ce LXC"
]
]
}
}
]
},
{
"id": "stack-checks",
"title": "5. Contrôle de la pile dans son ensemble",
"blocks": [
{
"list": {
"items": [
"Chaque VMID existe, est unique et conserve l'identité d'instance attendue.",
"Chaque contrat appartient à la même pile, conserve son rôle et sa configuration native enregistrée.",
"Le membre principal est le dernier en <code>start_order</code> et le premier en <code>stop_order</code>.",
"Aucun membre, volume ou ajustement du rootfs ne manque.",
"Le crochet pointe vers l'extrait officiel, son contenu est inchangé et son contrat correspond à la recette de la pile.",
"Les images et les digests observés correspondent aux archives OCI préparées.",
"Les appareils, les profils GPU, les montages, les secrets et les paramètres correspondent encore aux contrats.",
"Une fois toutes les dépendances validées, le point d’accès de l’application principale vérifie l’intégration entre les membres."
]
}
}
]
},
{
"id": "manage",
"title": "Gestion d'une pile installée",
"intro": "Dans <strong>Gérer les applications OCI installées</strong>, chaque membre mène à toute la pile. Le menu propose <strong>Mettre à jour tous les conteneurs de l’application</strong>, <strong>Modifier les chemins et périphériques supplémentaires</strong>, <strong>Recréer tous les conteneurs avec leur configuration enregistrée</strong> et <strong>Retirer : supprimer l’application et ses conteneurs</strong>. La recréation reconstruit chaque conteneur depuis son image d’origine, identifiée par le digest enregistré, sans chercher d’image plus récente. Elle suit les mêmes étapes qu’une mise à jour et est proposée pour les piles pouvant être mises à jour.",
"blocks": [
{
"steps": {
"items": [
{
"title": "Tout membre",
"body": "Le contrat du membre nomme le VMID principal et la liste complète des membres."
},
{
"title": "La pile est reproductible",
"body": "Les identités, les contrats, le crochet, les adaptations et un replay coordonné pour cette recette sont validés."
},
{
"title": "Images d'abord",
"body": "L'application n'est pas arrêtée avant que chaque digest ait été résolu, téléchargé et vérifié."
},
{
"title": "Arrêter les membres et sauvegarder l’ensemble",
"body": "Les sauvegardes natives vérifiées sont prises avec la pile arrêtée, de sorte que l'application et les bases de données appartiennent au même moment."
},
{
"title": "Mettre à jour et vérifier chaque membre",
"body": "Adaptation, réseau, montages, secrets et dispositifs sont appliqués à nouveau avant le contrôle de santé de chaque membre."
},
{
"title": "Publier ou récupérer tout",
"body": "Les nouveaux contrats ne sont publiés que lorsque chaque membre passe. Si on échoue, chaque membre est rétabli."
}
]
}
},
{
"table": {
"headers": [
"Modifier",
"Ce qui change",
"Ce qui est gardé"
],
"rows": [
[
"Chemins et périphériques supplémentaires",
"Ils sont ajoutés ou retirés du conteneur d'application, qui redémarre. Rien n'est reconstruit",
"Les données de l'application, sa base de données et les autres conteneurs"
],
[
"Ce qui exécute la reconnaissance (Immich)",
"Le conteneur d'apprentissage de la machine prend l'image et les appareils du CPU ou d'un GPU de l'hôte. Toute l'application est arrêtée et mise à jour, comme dans une mise à jour",
"Le cache modèle, la bibliothèque et la base de données. Si quelque chose échoue, les conteneurs précédents et le choix précédent sont restaurés"
]
]
}
},
{
"calloutWarning": {
"title": "Une pile sans replay coordonné n'est pas mise à jour",
"body": "Si la préparation d'une pile ne peut pas être reproduite, la mise à jour est refusée avant l'arrêt de la pile. L'application continue à fonctionner comme elle est."
}
}
]
},
{
"id": "failure",
"title": "6. Quand quelque chose échoue",
"blocks": [
{
"p": "Pendant une installation, une erreur s'arrête et enlève les conteneurs incomplets que l'opération a créés, et le pont privé si l'opération l'a créé. Une pile n'est pas publiée comme valide jusqu'à ce que la séquence entière se termine."
},
{
"p": "Une mise à jour est transactionnelle: toutes les images sont préparées d'abord, puis la pile s'arrête, chaque membre est sauvegardé et la sauvegarde vérifiée, et seulement alors chaque rootfs est remplacé. Les membres commencent un par un avec leur bilan de santé; si on échoue, chaque membre est restauré à partir du même ensemble de sauvegardes, de sorte que la base de données et l'application n'appartiennent jamais à différents moments."
},
{
"mermaid": {
"chartCode": "flowchart LR\n P[\"{{prepare}}\"] --> S[\"{{stop}}\"]\n S --> B[\"{{backup}}\"]\n B --> R[\"{{replace}}\"]\n R --> H{\"{{healthy}}\"}\n H -- \"{{yes}}\" --> C[\"{{commit}}\"]\n H -- \"{{no}}\" --> X[\"{{rollback}}\"]",
"labels": {
"prepare": "Préparer chaque image",
"stop": "Stop, membre principal d'abord",
"backup": "Sauvegarde vérifiée de chaque CT",
"replace": "Remplacer le rootfs",
"healthy": "Tous opérationnels ?",
"yes": "Oui",
"no": "Non",
"commit": "Publier les contrats",
"rollback": "Restaurer chaque membre"
}
}
}
]
},
{
"id": "not-assumed",
"title": "Ce qu'une pile ne comprend pas",
"blocks": [
{
"list": {
"items": [
"Une suite installée dans un flux, comme la suite Arr, n'est pas une pile dépendante : ses conteneurs n'ont pas d'ordre de départ entre eux.",
"Le réseau privé ne remplace pas l'authentification, TLS ou la configuration de chaque application.",
"La sauvegarde d'un LXC ne contient pas le pont, le crochet ou les contrats du reste de la pile.",
"Prowlarr, Sonarr ou Radarr ne reçoivent aucun indexeur, profil ou fournisseur de ProxMenux."
]
}
}
]
}
]
}
@@ -0,0 +1,305 @@
{
"meta": {
"title": "Données, chemins et réseau | ProxMenux",
"description": "Comment OCI manager Apps conserve les données d’un conteneur OCI : disques du conteneur, répertoires de l’hôte, montages rclone, adresses et réseaux privés."
},
"header": {
"title": "Données, chemins et réseau",
"description": "Ce qui se trouve dans le rootfs, ce qui subsiste après son remplacement, comment les données sont partagées entre conteneurs et comment chacun obtient son adresse.",
"section": "OCI manager Apps"
},
"sections": [
{
"id": "intro",
"blocks": [
{
"calloutInfo": {
"title": "La persistance se décide avant la création du LXC",
"body": "Les volumes déclarés par l’image et son fichier Compose sont lus avant la création du conteneur. Chaque chemin à conserver après une mise à jour devient un point de montage indépendant du rootfs. Celui-ci ne contient donc que les fichiers appartenant à l’image et peut être remplacé."
}
}
]
},
{
"id": "questions",
"title": "Ce que demande l’installateur",
"intro": "Le modèle fournit les chemins nécessaires à l’application. Chacun est placé sur un disque du conteneur ou dans un répertoire de l’hôte. D’autres chemins peuvent être ajoutés avant le récapitulatif.",
"blocks": [
{
"steps": {
"items": [
{
"title": "Chemins nécessaires",
"body": "<code>/config</code>, <code>/data</code>, les bibliothèques, les téléchargements et tous les volumes déclarés par l’application sont répertoriés."
},
{
"title": "Emplacement",
"body": "Chaque chemin est placé sur un disque du conteneur ou dans un répertoire existant de l’hôte."
},
{
"title": "Stockage et taille",
"body": "Un disque du conteneur est créé sur un stockage Proxmox VE avec la taille indiquée. L’installation par défaut utilise <code>local-lvm</code>. L’installation avancée demande le stockage de chaque chemin juste avant sa taille et propose celui du rootfs. Le disque apparaît sous le nom <code>vm-VMID-disk-N</code> et est rattaché comme <code>mpN</code>."
},
{
"title": "Répertoire de l’hôte",
"body": "Le répertoire de l’hôte est indiqué par son chemin. S’il n’existe pas, il est créé avec pour propriétaire l’utilisateur de l’hôte correspondant à celui du conteneur."
},
{
"title": "Chemins supplémentaires",
"body": "Avant l’installation, d’autres associations entre un chemin ou un volume de l’hôte et un chemin du conteneur peuvent être ajoutées."
},
{
"title": "Récapitulatif",
"body": "La correspondance complète des chemins est affichée avant la création du CT et enregistrée dans le contrat de l’instance."
}
]
}
}
]
},
{
"id": "options",
"title": "Les deux emplacements persistants",
"blocks": [
{
"table": {
"headers": [
"Propriété",
"Disque du conteneur",
"Répertoire de l’hôte"
],
"rows": [
[
"Dans la configuration",
"<code>mpN: STORAGE:vm-VMID-disk-N,mp=/config,backup=1,size=16G</code>",
"<code>mpN: /mnt/oci-shared/media,mp=/data/media</code>"
],
[
"Sauvegarde du conteneur (vzdump)",
"Inclus avec <code>backup=1</code>",
"Non inclus"
],
[
"Taille",
"Fixe ; extensible en redimensionnant le point de montage",
"L’espace libre du système de fichiers ou du dataset de l’hôte"
],
[
"Autres conteneurs",
"Monté uniquement par son propre conteneur",
"Le même répertoire peut être monté dans plusieurs conteneurs"
],
[
"Snapshots et restauration",
"Gérés par Proxmox VE avec le CT",
"Gérés sur le stockage de l’hôte"
],
[
"Lors de la suppression de l’application",
"Supprimé avec le conteneur",
"Conservé avec son contenu"
],
[
"Lors du déplacement du CT vers un autre nœud",
"Déplacé avec le CT",
"Le même chemin doit exister sur l’autre nœud"
]
]
}
},
{
"p": "Le rootfs est réservé aux binaires et au contenu de l’image. Une mise à jour ou une recréation le remplace sans toucher à l’un ou l’autre type de point de montage."
}
]
},
{
"id": "example",
"title": "Exemple : un conteneur avec les deux emplacements",
"blocks": [
{
"code": {
"title": "Jellyfin installé comme CT 151 sur local-lvm (extrait)",
"code": "rootfs: local-lvm:vm-151-disk-0,size=8G\n# Container disk, part of the CT backup\nmp0: local-lvm:vm-151-disk-1,mp=/config,backup=1,size=16G\n\n# Host directory, outside the CT backup\nmp1: /mnt/oci-shared/media,mp=/data/media"
}
},
{
"p": "Une mise à jour ou une recréation remplace uniquement le rootfs : <code>mp0</code> conserve les utilisateurs, les bibliothèques et les paramètres, tandis que <code>mp1</code> donne toujours accès aux mêmes médias. Restaurer la sauvegarde du CT rétablit <code>/config</code>. Le répertoire des médias est restauré, si nécessaire, depuis la sauvegarde du stockage de l’hôte."
},
{
"flow": {
"nodes": [
{
"label": "Contrat",
"detail": "/config"
},
{
"label": "Emplacement",
"detail": "Disque du conteneur\nou répertoire de l’hôte"
},
{
"label": "LXC",
"detail": "Toujours /config\npour l’application"
}
],
"caption": "L’application voit le chemin déclaré par l’image ; seul son emplacement de stockage change."
}
}
]
},
{
"id": "shared",
"title": "Un répertoire de l’hôte, plusieurs conteneurs",
"blocks": [
{
"mermaid": {
"chartCode": "flowchart TB\n H[\"{{host}}<br/>/mnt/oci-shared/media\"]\n H --> Q[\"qBittorrent<br/>/data\"]\n H --> J[\"Jellyfin<br/>/data\"]\n H --> R[\"Radarr / Sonarr<br/>/data\"]\n Q -. \"{{config}}\" .-> QV[(\"/config mpN\")]\n J -. \"{{config}}\" .-> JV[(\"/config mpN\")]\n R -. \"{{config}}\" .-> RV[(\"/config mpN\")]",
"labels": {
"host": "Répertoire de l’hôte",
"config": "Configuration propre"
}
}
},
{
"p": "Chaque conteneur conserve sa configuration sur son propre disque. La bibliothèque ou les téléchargements se trouvent dans un unique répertoire de l’hôte, monté au même chemin interne dans chaque conteneur. Ainsi, le chemin dans lequel une application écrit est celui depuis lequel une autre lit."
}
]
},
{
"id": "rclone",
"title": "Stockage cloud avec l’application rclone",
"intro": "Outre son installation, la fiche rclone du catalogue propose <strong>Activer un montage dans un conteneur OCI rclone existant</strong>. Un stockage distant déjà créé et autorisé dans l’interface web de rclone est monté et rendu accessible sur l’hôte. D’autres conteneurs peuvent alors l’utiliser comme un répertoire de l’hôte.",
"blocks": [
{
"steps": {
"items": [
{
"title": "Conteneur et stockage distant",
"body": "Le VMID du conteneur rclone, le nom exact du stockage distant et, éventuellement, un chemin à l’intérieur de celui-ci."
},
{
"title": "Nom du montage et cache",
"body": "Le nom du montage et le mode du cache VFS : <code>off</code>, <code>minimal</code>, <code>writes</code> ou <code>full</code> (par défaut)."
},
{
"title": "Vues exposées",
"body": "Une racine commune, <code>/mnt/oci-shared</code> par défaut, contient une vue en lecture-écriture dans <code>/mnt/oci-shared/remotes/NAME</code> et une vue en lecture seule dans <code>/mnt/oci-shared/remotes-ro/NAME</code>."
},
{
"title": "Activation",
"body": "Après confirmation, le CT est arrêté, sa commande de démarrage et un hookscript Proxmox VE sont configurés, puis il est redémarré. L’opération attend que les deux vues soient montées sur l’hôte."
}
]
}
},
{
"calloutInfo": {
"title": "Si le montage ne s’active pas",
"body": "La configuration précédente du conteneur est restaurée, puis celui-ci est redémarré. Ainsi, un échec d’activation laisse rclone dans son état initial."
}
}
]
},
{
"id": "network",
"title": "Adresses et réseaux",
"intro": "Une application à un seul conteneur a besoin d’une adresse. Une application à plusieurs conteneurs nécessite aussi un réseau stable entre ses membres.",
"blocks": [
{
"cards": {
"items": [
{
"icon": "network",
"title": "Application à un seul conteneur",
"body": "Le pont réseau est choisi, ainsi que DHCP ou une adresse fixe au format CIDR. Le LXC possède sa propre adresse et le récapitulatif affiche les URL complètes des services."
},
{
"icon": "waypoints",
"title": "Application à plusieurs conteneurs",
"body": "Un sous-réseau libre est recherché et un pont privé persistant est créé. Chaque membre — application, base de données et cache — y reçoit une adresse fixe."
}
]
}
},
{
"flow": {
"nodes": [
{
"label": "LAN",
"detail": "Adresse accessible\nservice principal uniquement"
},
{
"label": "LXC principal",
"detail": "Web / API\nLAN + réseau privé"
},
{
"label": "Réseau privé",
"detail": "PostgreSQL · Valkey · ML\nadresses fixes"
}
],
"caption": "Les dépendances communiquent sur le réseau privé et n’ont pas d’adresse sur le LAN."
}
},
{
"p": "Le contrat de la pile enregistre le pont, le sous-réseau, les adresses et les relations entre services. La mise à jour de l’application réutilise la même topologie pour tous les membres. ProxMenux Monitor ouvre le conteneur principal à son adresse LAN, et non à celle du réseau privé."
}
]
},
{
"id": "ownership",
"title": "Propriétaires des fichiers et répertoires",
"blocks": [
{
"list": {
"items": [
"Les nouveaux répertoires sont créés avec les UID et GID auxquels le LXC non privilégié est mappé.",
"Le propriétaire des répertoires existants n’est pas modifié récursivement.",
"Les sockets, fichiers système et chemins sensibles ne sont pas proposés comme répertoires génériques de l’hôte."
]
}
}
]
},
{
"id": "backup",
"title": "Ce que contient une sauvegarde du conteneur",
"blocks": [
{
"table": {
"headers": [
"Élément",
"Dans la sauvegarde vzdump du CT",
"Lieu de conservation"
],
"rows": [
[
"Rootfs OCI",
"Oui",
"Dans la sauvegarde du CT ; il peut aussi être recréé à partir de l’image et du contrat"
],
[
"Disque du conteneur avec <code>backup=1</code>",
"Oui",
"La sauvegarde du CT"
],
[
"Répertoire de l’hôte",
"Non",
"La sauvegarde du stockage de l’hôte"
],
[
"Contrat de l’instance",
"Oui, la copie conservée dans le CT",
"<code>/.proxmenux/oci-record.json</code> dans le CT ; les copies supplémentaires de l’hôte et du cluster sont conservées séparément"
],
[
"Application à plusieurs conteneurs",
"Chaque membre dans sa propre sauvegarde",
"Les sauvegardes de tous les membres, ainsi que le contrat de la pile et son pont réseau sur l’hôte"
]
]
}
}
]
}
]
}
@@ -0,0 +1,172 @@
{
"meta": {
"title": "Script de post-installation automatisé | Documentation ProxMenux",
"description": "Le script de post-installation automatisé ProxMenux exécute 14 optimisations prédéfinies adaptées au matériel sur un nouvel hôte Proxmox VE. Il n’a pas de liste de fonctions à sélectionner, mais peut demander confirmation pour la mise à jour du système, pour masquer l’avertissement d’abonnement, installer Log2RAM dans certains cas et redémarrer. Les changements réversibles sont enregistrés.",
"ogTitle": "Script de post-installation automatisé | Documentation ProxMenux",
"ogDescription": "14 optimisations prédéfinies adaptées au matériel pour un nouvel hôte Proxmox VE, avec confirmation de certaines actions et suivi des changements réversibles."
},
"header": {
"title": "Script de post-installation automatisé",
"description": "ProxMenux exécute 14 optimisations de base prédéfinies sans liste de fonctions à sélectionner. Certaines actions demandent confirmation. Les changements réversibles sont enregistrés pour Désinstaller les optimisations ; les mises à niveau de paquets ne sont pas présentées comme réversibles.",
"section": "Post-installation · Automatisée"
},
"intro": {
"title": "Quand choisir Automatisé",
"body": "Exécutez-le sur un hôte Proxmox fraîchement installé pour obtenir une configuration de base raisonnable sans choisir chaque fonction. Le script est idempotent : une deuxième exécution réapplique les mêmes paramètres. Les fonctions optionnelles (Fastfetch, IOMMU, dépôt Ceph, HA, correctifs AMD…) ne font volontairement <strong>pas</strong> partie de ce parcours ; choisissez-les dans <link>Personnalisable</link> au besoin."
},
"applies": {
"heading": "Ce que le script applique",
"intro": "Les optimisations sont appliquées dans cet ordre exact. La colonne <em>Catégorie</em> permet de consulter la documentation détaillée de chaque changement dans la référence personnalisable.",
"headerNum": "#",
"headerTool": "Outil",
"headerWhat": "Ce qu'il fait",
"headerCategory": "Catégorie"
},
"optimizations": [
{
"tool": "Dépôts APT + mise à jour complète",
"what": "Désactive les dépôts Enterprise pve-enterprise.sources et ceph.sources, crée une source sans abonnement pour le nom de code Debian de l’hôte, puis lance apt update && apt full-upgrade -y (commande officielle de mise à niveau Proxmox).",
"category": "Paramètres de base",
"categorySlug": "basic-settings"
},
{
"tool": "Suppression de la bannière d'abonnement",
"what": "Modifie l’interface web pour masquer l’avertissement « Aucun abonnement valide ». Demande confirmation avant application ; réversible via Désinstaller les optimisations.",
"category": "Personnalisation",
"categorySlug": "customization"
},
{
"tool": "Forcer IPv4",
"what": "Écrit /etc/apt/apt.conf.d/99-force-ipv4 pour que apt utilise uniquement IPv4 et contourne les liaisons IPv6 instables vers les miroirs.",
"category": "Réseau",
"categorySlug": "network"
},
{
"tool": "Sauter les paquets de langue",
"what": "Écrit /etc/apt/apt.conf.d/99-disable-translations pour ne plus télécharger les index de descriptions de paquets traduites et réduire les données des mises à jour apt.",
"category": "Paramètres de base",
"categorySlug": "basic-settings"
},
{
"tool": "Augmentation des limites du système",
"what": "Augmente le nombre de surveillances inotify, les limites nofile/nproc, celles du trousseau du noyau et fs.file-max via sysctl.d, limits.d, pam et systemd, pour les hôtes avec de nombreux conteneurs.",
"category": "Système",
"categorySlug": "system"
},
{
"tool": "Réglage de la mémoire",
"what": "Définit vm.swappiness=10, des ratios équilibrés de pages modifiées non écrites, vm.max_map_count=262144 et la proactivité du compactage si disponible. La politique de surallocation mémoire du noyau reste celle de Proxmox par défaut.",
"category": "Système",
"categorySlug": "system"
},
{
"tool": "Comportement en cas de panique du noyau",
"what": "Configure l’hôte pour redémarrer 10 secondes après un panic / oops / hardlockup au lieu de rester bloqué indéfiniment.",
"category": "Système",
"categorySlug": "system"
},
{
"tool": "Réglage de la pile réseau",
"what": "Taille des tampons TCP, durcissement IPv4 (redirections désactivées, rp_filter=2, journalisation martian désactivée), ports locaux 1024-65535, détection MTU TCP, RFC 1337 et script /usr/local/sbin/proxmenux-fwbr-tune lié à une unité systemd à exécution unique et une règle udev. Ainsi, rp_filter=0 / log_martians=0 sont réappliqués aux interfaces fwbr*/fwln*/fwpr*/tap* à chaque recréation par Proxmox au démarrage/arrêt des VM, au redémarrage ou à la migration à chaud.",
"category": "Réseau",
"categorySlug": "network"
},
{
"tool": "Personnalisation du bashrc (root)",
"what": "PS1 coloré, alias courants (l/la/ll/ls/grep), historique horodaté et chargement de bash-completion, dans un bloc délimité PMX_CORE_BASHRC facile à retirer.",
"category": "Personnalisation",
"categorySlug": "customization"
},
{
"tool": "Log2RAM (adapté aux SSD, automatique)",
"what": "Réduit l’usure SSD/NVMe en déplaçant /var/log dans un disque RAM tmpfs synchronisé régulièrement vers le disque. Installation depuis le projet amont si le disque racine est SSD ou NVMe. Taille selon la RAM de l’hôte (128M / 256M / 512M), synchronisation périodique et protection automatique qui purge les anciens journaux à 80% et tronque les journaux très actifs à 92% avant écriture. Adapte les limites journald au disque RAM. Détails dans <link>Log2RAM</link>.",
"category": "Stockage",
"categorySlug": "storage"
},
{
"tool": "ZFS autotrim (SSD seulement)",
"what": "Active zpool autotrim=on sur chaque pool ZFS dont tous les vdevs sont des SSD ou NVMe compatibles TRIM, après vérification de /sys/block/[dev]/queue/rotational et discard_granularity. Les pools sur HDD sont ignorés. Seuls les pools effectivement modifiés par ProxMenux sont mémorisés pour la désinstallation ; ceux sur lesquels vous avez activé autotrim manuellement restent inchangés.",
"category": "Stockage",
"categorySlug": "storage"
},
{
"tool": "Limites de taille de journald",
"what": "Force le stockage persistant, limite SystemMaxUse=64M / RuntimeMaxUse=60M, active la compression et les journaux de niveau info requis par Monitor. Ignoré si Log2RAM est actif, car il effectue son propre réglage.",
"category": "Système",
"categorySlug": "system"
},
{
"tool": "Réglage du logrotate",
"what": "Définit globalement daily puis size 10M, conserve 7 rotations et active compression et copytruncate. Le critère de taille placé après prévaut ; les règles propres aux journaux peuvent le remplacer. Adapté à Log2RAM, mais la fréquence dépend des règles et du minuteur.",
"category": "Système",
"categorySlug": "system"
},
{
"tool": "Noms d'interface persistants",
"what": "Écrit un <code>/etc/systemd/network/10-proxmenux-&lt;iface&gt;.link</code> par NIC physique (chacun commençant par un en-tête 'Managed by ProxMenux') qui épingle le MAC au nom courant, de sorte que les noms <code>eth0</code> / <code>enp…</code> restent stables à travers les reboots et les nouveaux ajouts NIC.",
"category": "Réseau",
"categorySlug": "network"
}
],
"hardwareTitle": "Valeurs par défaut adaptées au matériel",
"hardwareBody": "Le script examine le matériel avant de configurer l’hôte. Par défaut, Log2RAM s’installe uniquement si le disque racine est SSD ou NVMe ; il demande confirmation sinon. La taille du disque RAM dépend de la RAM totale (<code>≤ 8 GB → 128M</code>, <code>≤ 16 GB → 256M</code>, <code>'>' 16 GB → 512M</code>). Quand Log2RAM est actif, les limites journald sont adaptées au disque RAM pour éviter de le remplir.",
"upgrade": {
"heading": "Mettre à jour les listes de paquets et le système",
"intro": "La première étape du parcours automatisé est la mise à niveau Proxmox. Pour un hôte en fonctionnement au sein de la même version majeure, Proxmox recommande :",
"after": "Cette ligne est la commande officielle des versions actuelles de Proxmox. Le script automatisé l’exécute <strong>exactement</strong> et ajoute le nettoyage des dépôts et les tâches après mise à niveau recommandés par le guide — comme l’utilitaire autonome <link>Mise à jour du système Proxmox</link> :",
"items": [
"Désactive les sources Enterprise <code>pve-enterprise.sources</code> / <code>ceph.sources</code>, supprime les anciens fichiers de dépôts et crée une source sans abonnement pour le nom de code de l’hôte.",
"Exécute la mise à jour non interactive avec <code>DEBIAN_FRONTEND=noninteractive</code> et <code>--force-confdef --force-confold</code> — les fichiers de configuration que vous avez personnalisés restent les vôtres lorsque l'amont les a également modifiés.",
"Installe les paquets Proxmox essentiels s’ils manquent (<code>zfsutils-linux</code>, <code>proxmox-backup-restore-image</code>, <code>chrony</code>).",
"Vérification de cohérence des métadonnées LVM, <code>apt-get autoremove -y</code> + <code>apt-get autoclean -y</code> et demande de redémarrage seulement si le noyau a changé."
],
"sameTitle": "Même mise à jour, deux points d'entrée",
"sameBody": "Le paquet automatisé et l'utilitaire autonome <link>Proxmox System Update</link> partagent les mêmes scripts sous-jacents (<code>update-pve8.sh</code> / <code>update-pve9_2.sh</code>). Utilisez l'utilitaire seul quand vous voulez seulement mettre à niveau l'hôte sans appliquer le reste des optimisations."
},
"endResult": {
"heading": "Résultat final escompté",
"body": "À la fin, un message de réussite et les sorties de chaque étape s’affichent, avec une demande de redémarrage pour les paramètres du noyau qui en ont besoin. Vous pouvez le reporter ; ces paramètres s’appliqueront au prochain démarrage.",
"imageAlt": "script automatisé post-installation — sortie finale du terminal montrant chaque optimisation appliquée avec succès"
},
"notDoes": {
"heading": "Ce que ce script ne fait PAS",
"items": [
"Détection automatique par fuseau horaire (commenté en amont; utiliser Personnalisable si vous le souhaitez).",
"Désactiver portmapper / rpcbind (voir <secLink>Sécurité</secLink>).",
"Activer IOMMU / VFIO (voir <virtLink>Virtualisation</virtLink>).",
"Installer Fastfetch / Figurine / le dépôt Ceph / HA / les correctifs CPU AMD (voir <optLink>Options</optLink>).",
"Installer pigz ou ajuster ZFS ARC (voir <perfLink>Performances</perfLink> / <storLink>Stockage</storLink>)."
]
},
"xshokTitle": "détection xshok-proxmox",
"xshokBody": "Si l'hôte a déjà lancé le script <code>xshok-proxmox</code>, ProxMenux détecte le fichier marqueur et vous avertit avant de continuer. Certains changements peuvent se chevaucher. Le script compagnon est déprécié — si vous décidez de continuer de toute façon, consultez <link>la vue d'ensemble</link> pour le contexte.",
"revert": {
"heading": "Annuler les changements",
"body": "Chaque outil du tableau est enregistré dans <code>/usr/local/share/proxmenux/installed_tools.json</code>. Ouvrez <link>Désinstaller les optimisations</link> pour choisir les éléments à rétablir. Les sauvegardes des fichiers modifiés se trouvent à côté des originaux avec le suffixe <code>.bak</code>."
},
"related": {
"heading": "Voir aussi",
"items": [
{
"label": "Post-installation personnalisable",
"href": "/docs/post-install/customizable",
"tail": "— choisissez exactement ce que vous voulez dans le même catalogue."
},
{
"label": "Désinstaller les optimisations",
"href": "/docs/post-install/uninstall",
"tail": "— de revenir sur tout sous-ensemble de ce qui a été appliqué ici."
},
{
"label": "Commandes système utiles",
"href": "/docs/help-info/system-commands",
"tail": "— vérifier les changements (uptime, free, journalctl, etc.)."
},
{
"label": "Aperçu après l'installation",
"href": "/docs/post-install",
"tail": "."
}
]
}
}
@@ -0,0 +1,240 @@
{
"meta": {
"title": "Post-installation : Paramètres de base | Documentation ProxMenux",
"description": "Options de base après installation : passer aux dépôts Proxmox sans abonnement et mettre à niveau le système, détecter le fuseau horaire et activer NTP, ignorer les traductions APT et choisir parmi 25 utilitaires courants à installer."
},
"header": {
"title": "Post-Install: Paramètres de base",
"section": "Paramètres post-installation de Proxmox"
},
"intro": {
"title": "Ce que cette catégorie couvre",
"body": "Cinq options de base pour un hôte Proxmox neuf : passer aux dépôts communautaires sans abonnement, mettre à niveau tout le système, configurer automatiquement le fuseau horaire et NTP, supprimer les traductions APT pour économiser bande passante et espace disque et choisir parmi 25 utilitaires courants."
},
"upgrade": {
"heading": "Mettre à jour les listes de paquets et le système",
"intro": "Reconfigure APT pour utiliser le dépôt gratuit <em>pve-no-subscription</em> (au lieu de la repo d'entreprise qui nécessite un abonnement) et exécute une mise à niveau complète du système. Les étapes exactes dépendent de la version majeure de Proxmox VE : ProxMenux la détecte et envoie vers le bon script.",
"headerVersion": "Version PVE",
"headerScript": "Script de sélection par version",
"headerCodename": "Nom de code Debian",
"rows": [
{
"version": "9.x",
"script": "update-pve9_2.sh",
"codename": "trixie"
},
{
"version": "8.x",
"script": "update-pve8.sh",
"codename": "bookworm"
}
],
"officialTitle": "La recommandation officielle de Proxmox",
"officialBody": "Le guide de mise à niveau de Proxmox est à exécuter, dans cet ordre exact:",
"officialOutro": "C’est la commande habituelle pour les mises à jour au sein de la version majeure installée de Proxmox VE. Vérifiez les dépôts et les changements de paquets proposés <em>avant</em> de continuer. Un changement de version majeure exige la procédure officielle de migration.",
"doesTitle": "Ce que fait l'option ProxMenux — vérifié par rapport au script",
"doesIntro": "La mise à jour ProxMenux exécute les commandes apt ci-dessus et ajoute des étapes avant et après que vous devriez autrement gérer manuellement. Les éléments suivants correspondent au script de sélection ; voir <link>Mise à jour du système Proxmox</link> pour le détail complet.",
"doesItems": [
"<strong>D’abord, nettoyer les dépôts.</strong> Désactive les dépôts Enterprise <code>pve-enterprise.sources</code> / <code>ceph.sources</code>, supprime les anciens fichiers de dépôt laissés par les versions précédentes de PVE et écrit un fichier <code>proxmox.sources</code> propre pointant vers le canal gratuit <em>pve-no-subscription</em>, adapté au nom de code Debian de l’hôte : trixie pour PVE 9, bookworm pour PVE 8.",
"<strong>Réécrit les dépôts Debian</strong> avec main / updates / security et <code>non-free-firmware</code>, pour éliminer l’avertissement du firmware pendant la mise à niveau.",
"<strong>Exécute la mise à niveau officielle.</strong> <code>apt-get update</code> suivi de <code>apt full-upgrade -y</code> (PVE 9) ou <code>apt dist-upgrade -y</code> (PVE 8), sans interaction avec <code>--force-confdef --force-confold</code> pour conserver vos fichiers de configuration personnalisés.",
"<strong>Installe les paquets essentiels</strong> s'ils manquent: <code>zfsutils-linux</code>, <code>proxmox-backup-restore-image</code>, <code>chrony</code>.",
"<strong>Vérifie les métadonnées LVM.</strong> Recherche les VM avec accès direct aux disques qui ont pu laisser d’anciens en-têtes de volumes physiques sur les disques bruts. Signale les anomalies sans correction automatique.",
"<strong>Nettoye ensuite :</strong> <code>apt-get autoremove -y</code> + <code>apt-get autoclean -y</code>, puis demande un redémarrage si le noyau a été mis à jour ou si <code>/var/run/reboot-required</code> est présent."
],
"shortTitle": "Bref",
"shortBody": "L’option exécute <code>apt update && apt full-upgrade -y</code> comme recommandé par Proxmox, avec le nettoyage des dépôts et les étapes finales mentionnés dans le guide officiel, puis propose un redémarrage. Voir <link>Mise à jour du système Proxmox</link> pour le diagramme complet ; le même outil est disponible seul dans le menu principal.",
"subTitle": "Ne pas appliquer à un hôte avec abonnement",
"subBody": "Si vous avez un abonnement Proxmox et souhaitez garder les dépôts Enterprise, ignorez cette option. Elle désactive Enterprise et passe au canal communautaire. La mise à niveau des paquets et la réécriture des dépôts ne sont pas réversibles dans Désinstaller les optimisations ; reconfigurez explicitement les dépôts pour changer de canal plus tard.",
"safetyTitle": "Contrôle de sécurité après mise à jour",
"safetyBody": "Après la mise à niveau, le script cherche d’anciennes métadonnées de volume physique (PV) sur les disques. Cela peut arriver lorsqu’une VM avec accès direct écrit des en-têtes LVM sur un disque brut. Toute anomalie produit un avertissement suggérant <code>pvs</code> pour l’inspection. Aucune action automatique."
},
"time": {
"heading": "Synchroniser l'heure automatiquement",
"intro": "Détecte l'IP public du serveur via <code>dig myip.opendns.com @resolver1.opendns.com</code>, puis interroge <code>ipapi.co/'{'ip'}'/timezone</code> pour rechercher le fuseau horaire IANA correspondant, et l'applique avec <code>timedatectl set-timezone</code>. Enfin permet NTP avec <code>timedatectl set-ntp true</code>.",
"depTitle": "Dépend de deux services externes",
"depBody": "La recherche repose sur OpenDNS et <code>ipapi.co</code> étant accessibles, et leurs réponses étant correctes. Si vous exécutez Proxmox derrière un VPN ou sur un VLAN qui s'échappe d'une autre région, le fuseau horaire détecté automatiquement peut être erroné. Dans ce cas, sautez cette option et définissez le fuseau horaire à la main:",
"revertTitle": "Réversible depuis le menu Désinstaller",
"revertBody": "<link>Désinstaller les optimisations</link> remet le fuseau horaire à UTC, une valeur par défaut sûre. NTP reste actif : l’horloge continue de se synchroniser et affiche UTC jusqu’au réglage manuel d’un autre fuseau."
},
"languages": {
"heading": "ignorer le téléchargement de langues supplémentaires",
"intro": "Pendant <code>apt update</code>, APT peut télécharger des descriptions de paquets traduites en plus des métadonnées principales. Cette option les désactive pour économiser bande passante et espace. Avant cela, ProxMenux <strong>vérifie que les paramètres régionaux de l’hôte sont générés</strong> : lit <code>/etc/default/locale</code> ou <code>/etc/environment</code>, ajoute à <code>/etc/locale.gen</code> si nécessaire et lance <code>locale-gen</code>. Les paramètres régionaux du shell sont ainsi conservés.",
"writtenTitle": "Ce qui est écrit",
"revertTitle": "Réversible depuis le menu Désinstaller",
"revertBody": "Suppression de <code>/etc/apt/apt.conf.d/99-disable-translations</code> (soit manuellement soit à partir du menu Désinstaller) restaure le comportement par défaut et APT télécharge à nouveau les fichiers linguistiques."
},
"utilities": {
"heading": "Installer les utilitaires système courants",
"intro": "Ouvre une liste groupée de <strong>25 utilitaires sélectionnés</strong>. Choisissez et confirmez ; ProxMenux les installe via <code>apt</code>, vérifie le résultat et affiche un résumé final.",
"imageAlt": "Sélecteur des utilitaires ProxMenux : Espace pour sélectionner, Entrée pour confirmer",
"reuseTitle": "La même liste est réutilisée ailleurs",
"reuseBody": "Le catalogue des 25 utilitaires est défini à un seul endroit : <code>PROXMENUX_UTILS</code> dans <code>scripts/global/utils-install-functions.sh</code>. Le menu <em>Utilitaires et outils → Utilitaires système</em> présente la même liste pour en ajouter plus tard sans refaire la post-installation.",
"listTitle": "Ce qui est dans la liste",
"groups": [
{
"group": "Moniteurs système",
"items": [
{
"pkg": "htop",
"desc": "Affichage interactif des processus"
},
{
"pkg": "btop",
"desc": "Moniteur de ressources modernes (CPU, RAM, disques, net, processus)"
},
{
"pkg": "s-tui",
"desc": "Interface terminal pour les tests de charge CPU et la surveillance"
},
{
"pkg": "iftop",
"desc": "Utilisation de bande passante par connexion en direct"
},
{
"pkg": "iotop",
"desc": "E/S disque par processus"
},
{
"pkg": "iptraf-ng",
"desc": "Moniteur IP LAN interactif"
}
]
},
{
"group": "Réseau",
"items": [
{
"pkg": "iperf3",
"desc": "Mesurer la bande passante maximale réalisable entre les hôtes"
},
{
"pkg": "net-tools",
"desc": "Anciens outils (ifconfig, netstat, route). Toujours utiles pour les vérifications rapides"
},
{
"pkg": "ipset",
"desc": "Gérer les grands ensembles IP dans le noyau — utile avec les règles iptables/nftables."
}
]
},
{
"group": "Téléchargement et archive",
"items": [
{
"pkg": "axel",
"desc": "accélérateur de téléchargement parallèle léger"
},
{
"pkg": "aria2",
"desc": "Téléchargeur multisource / multiprotocole (HTTP, FTP, BitTorrent, Metalink)"
},
{
"pkg": "unzip",
"desc": "Extraire les archives ZIP"
},
{
"pkg": "zip",
"desc": "Créer des archives ZIP"
},
{
"pkg": "cabextract",
"desc": "Extraire les archives Microsoft CAB (utile avec les ISO Windows)"
},
{
"pkg": "wimtools",
"desc": "Manipuler les images WIM Windows (extraire, fractionner, monter, appliquer)"
},
{
"pkg": "genisoimage",
"desc": "Construire des images ISO 9660 à partir d'un arbre de répertoires"
}
]
},
{
"group": "Texte et fichiers",
"items": [
{
"pkg": "dos2unix",
"desc": "Convertir les fins de ligne CRLF (Windows) en LF (Unix)"
},
{
"pkg": "grc",
"desc": "Coloration générique : applique une coloration syntaxique aux sorties de ping, traceroute, dig, tail, etc."
},
{
"pkg": "plocate",
"desc": "Recherche rapide de fichiers (indexée). Exécutez `updatedb` après l'installation pour construire l'index."
}
]
},
{
"group": "Accès distant et sessions",
"items": [
{
"pkg": "sshpass",
"desc": "Authentification SSH par mot de passe sans interaction (pour les scripts, pas pour l’usage quotidien)"
},
{
"pkg": "tmux",
"desc": "Multiplexeur de terminal : détacher les sessions, diviser les panneaux et conserver les sessions après une déconnexion"
}
]
},
{
"group": "Matériel et bas niveau",
"items": [
{
"pkg": "msr-tools",
"desc": "Registres spécifiques au modèle CPU de lecture/écriture (rdmsr, wrmsr)"
},
{
"pkg": "intel-gpu-tools",
"desc": "utilitaires de diagnostic Intel GPU y compris `intel_gpu_top`"
}
]
},
{
"group": "Virtualisation",
"items": [
{
"pkg": "libguestfs-tools",
"desc": "Inspecter et modifier les images de disque VM (virt-ls, virt-cat, guestmount...)"
},
{
"pkg": "chntpw",
"desc": "Modifier Windows SAM — utile pour la récupération de mot de passe sur Windows VMs que vous héritez"
}
]
}
],
"actionTitle": "Quelques-uns en action",
"noBulkTitle": "Seuls les utilitaires installés par ProxMenux sont supprimés",
"noBulkBody": "ProxMenux enregistre uniquement les paquets sélectionnés qui n’étaient pas déjà installés. Désinstaller les optimisations les supprime complètement et conserve les paquets présents auparavant. Une mise à niveau APT n’a pas de retour arrière atomique sûr : désinstaller les utilitaires n’annule pas la mise à niveau du système."
},
"related": {
"heading": "Voir aussi",
"items": [
{
"label": "Mise à jour du système Proxmox",
"href": "/docs/utils/system-update",
"tail": "— relance le cycle apt update + dist-upgrade sur demande."
},
{
"label": "Installateur des utilitaires système",
"href": "/docs/utils/system-utils",
"tail": "— installer (ou réinstaller) les utilitaires individuellement après l'installation."
},
{
"label": "Commandes de mises à jour et de paquets",
"href": "/docs/help-info/update-commands",
"tail": " — Référence apt pour le shell."
},
{
"label": "Post-installation personnalisable",
"href": "/docs/post-install/customizable",
"tail": "— retour au menu parent."
}
]
}
}
@@ -0,0 +1,106 @@
{
"meta": {
"title": "Script post-installation personnalisable | Documentation ProxMenux",
"description": "Choisissez précisément les optimisations à appliquer à un hôte Proxmox VE avec ProxMenux. 10 catégories, environ 35 outils et une interface à cases à cocher. Inclut tout le script Automatisé, plus des options à activer explicitement (IOMMU, Fastfetch, Figurine, Ceph, HA, correctifs AMD…).",
"ogTitle": "Script post-installation personnalisable | Documentation ProxMenux",
"ogDescription": "10 catégories, environ 35 optimisations individuelles. Choisissez précisément ce que vous voulez sur un hôte Proxmox VE. Les modifications réversibles sont suivies."
},
"header": {
"title": "Script post-installation personnalisable",
"description": "Choisissez précisément les optimisations à appliquer à un hôte Proxmox VE. ProxMenux regroupe environ 35 outils dans 10 catégories au sein d’une seule boîte de dialogue à cases à cocher. Même moteur qu’Automatisé, avec un contrôle complet.",
"section": "Post-Installation · Personnalisable"
},
"intro": {
"title": "Quand choisir Personnalisable",
"body": "Choisissez cette voie si vous connaissez déjà les réglages souhaités ou à éviter. Une liste à cases à cocher, groupée par catégorie, permet de sélectionner, désélectionner et combiner les optimisations. Vous pouvez les réappliquer plus tard ; les modifications réversibles sont suivies pour <link>Désinstaller les optimisations</link>. Les mises à niveau de paquets ne sont pas présentées comme réversibles."
},
"compare": {
"heading": "Comment il se compare à Automatisé",
"body": "Personnalisable inclut tout le <link>script Automatisé</link> : les mêmes 14 optimisations de base et de nombreuses options volontairement omises par Automatisé, utiles à certains matériels (correctifs AMD), hébergeurs (OVH RTM) ou usages (IOMMU/VFIO, dépôt Ceph, haute disponibilité, Fastfetch, Figurine, réglage de l’ARC ZFS, pigz, instantanés ZFS automatiques, limites de vitesse vzdump, Open vSwitch, TCP BBR…)."
},
"categoriesSection": {
"heading": "Les 10 catégories",
"body": "Le script Personnalisable regroupe les optimisations en 10 catégories dans une seule boîte de dialogue à cases à cocher. Chaque catégorie a sa propre page de documentation : ouvrez une carte pour consulter la justification, les valeurs par défaut et les vérifications de chaque option."
},
"categories": [
{
"name": "Paramètres de base",
"description": "Nettoyer les sources APT, lancer la mise à niveau officielle Proxmox et définir le fuseau horaire, les paramètres régionaux et les utilitaires courants. La base de toutes les autres catégories."
},
{
"name": "Système",
"description": "Règle la journalisation et les limites du noyau pour un hôte hébergeant de nombreuses VM et conteneurs. Couvre journald, logrotate, sysctl (mémoire, limites de fichiers), le comportement en cas de kernel panic et les redémarrages rapides."
},
{
"name": "Virtualisation",
"description": "Prépare l’hôte à la virtualisation avancée. Installe l’agent invité adapté lorsque Proxmox lui-même fonctionne dans une VM prise en charge et active IOMMU/VFIO pour l’accès direct PCI des GPU, contrôleurs et TPU."
},
{
"name": "Réseau",
"description": "Renforce et règle la pile réseau de l’hôte. Force APT sur IPv4, applique des réglages de sécurité sysctl et des tampons TCP, propose Open vSwitch, TCP BBR et TCP Fast Open et associe les noms d’interface persistants aux adresses MAC."
},
{
"name": "Stockage",
"description": "Configure les sous-systèmes de stockage courants de Proxmox : taille de l’ARC ZFS, instantanés ZFS automatiques, autotrim ZFS pour les pools SSD/NVMe et limites de vitesse vzdump pour éviter de saturer les disques pendant les sauvegardes."
},
{
"name": "Sécurité",
"description": "Réduit la surface d’attaque exposée par défaut. Désactive les services RPC portmapper/rpcbind dont Proxmox n’a pas besoin mais qu’il laisse en écoute."
},
{
"name": "Personnalisation",
"description": "Changer l'expérience visuelle et shell de l'hôte: couleurs et alias dans bashrc, bannière MOTD et suppression de l'avis d'abonnement dans l'interface utilisateur web."
},
{
"name": "Surveillance",
"description": "Intègre l’hôte à OVH Real-Time Monitoring. Installe RTM uniquement si ProxMenux détecte un serveur OVH ; l’option ne modifie rien sur les autres hôtes."
},
{
"name": "Performances",
"description": "Accélère la compression (sauvegardes, transferts) en remplaçant gzip par son équivalent parallèle pigz."
},
{
"name": "Facultatif",
"description": "Options spécialisées dont tous les hôtes n’ont pas besoin : correctifs CPU AMD, bannière Fastfetch, nom d’hôte 3D Figurine, actualisation de l’index PVE Appliance Manager, dépôt Ceph, services haute disponibilité, Log2RAM pour limiter l’usure des SSD et profil de swap ZRAM."
}
],
"mixTip": {
"title": "Combiner Automatisé et Personnalisable",
"body": "Un usage courant : commencez par <strong>Automatisé</strong> pour établir une base raisonnable, puis ouvrez <strong>Personnalisable</strong> et choisissez seulement les options utiles, comme IOMMU pour l’accès direct à un GPU. Les modifications sont suivies séparément ; Désinstaller affiche tout ce qui a été appliqué, quelle que soit la voie utilisée."
},
"related": {
"heading": "Voir aussi",
"items": [
{
"label": "Post-installation automatisée",
"href": "/docs/post-install/automated",
"tail": " — valeurs par défaut raisonnables appliquées sans question."
},
{
"label": "Désinstaller les optimisations",
"href": "/docs/post-install/uninstall",
"tail": " — annuler proprement les éléments sélectionnés."
},
{
"label": "Paramètres de base",
"href": "/docs/post-install/basic-settings",
"tail": "— repos, temps, langue, utilitaires."
},
{
"label": "Virtualisation",
"href": "/docs/post-install/virtualization",
"tail": "— IOMMU + VFIO pour transmission."
},
{
"label": "Sécurité",
"href": "/docs/post-install/security",
"tailRich": " · <storageLink>Stockage</storageLink> · <networkLink>Réseau</networkLink> · <customLink>Personnalisation</customLink> — autres catégories."
},
{
"label": "Aperçu après l'installation",
"href": "/docs/post-install",
"tail": "."
}
]
}
}
@@ -0,0 +1,74 @@
{
"meta": {
"title": "Post-installation : Personnalisation | Documentation ProxMenux",
"description": "Options de personnalisation du script post-installation personnalisable de ProxMenux : invite bash colorée avec des alias utiles, bannière ProxMenux dans le MOTD et suppression du rappel d’abonnement de l’interface web Proxmox."
},
"header": {
"title": "Après installation : personnalisation",
"description": "Réglages visuels et pratiques de l’hôte Proxmox. Ils rendent le shell plus agréable et masquent le rappel d’abonnement de l’interface web. Bashrc, MOTD et la bannière sont suivis et réversibles depuis Désinstaller.",
"section": "Paramètres post-installation de Proxmox"
},
"intro": {
"title": "Ce que cette catégorie couvre",
"body": "Trois petites options indépendantes : une <strong>invite bash colorée avec alias</strong> pour le shell root, une <strong>bannière MOTD</strong> d’une ligne à la connexion SSH et la suppression de la <strong>fenêtre « Aucun abonnement valide »</strong> affichée à chaque connexion web Proxmox."
},
"bashrc": {
"heading": "Personnaliser bashrc",
"intro": "Insère dans <code>/root/.bashrc</code> un bloc préparé avec une invite colorée, un historique horodaté, les alias habituels de <code>ls</code> / <code>grep</code> et un <code>source</code> pour l’autocomplétion bash. Rend le travail via SSH plus agréable et permet d’identifier facilement l’hôte lorsque plusieurs onglets sont ouverts.",
"writesTitle": "Ce que ProxMenux ajoute à .bashrc",
"writesOutro": "Le bloc est délimité par les marqueurs <code>PMX_CORE_BASHRC</code>. Exécuter le script remplace à nouveau le bloc précédent au lieu de le dupliquer. Le <code>.bashrc</code> original est sauvegardé une fois sur <code>/root/.bashrc.bak</code>, et une ligne <code>source /root/.bashrc</code> est annexée au <code>/root/.bash_profile</code> de sorte que l'invite s'applique également sur les shells de connexion (par exemple après <code>su -</code>).",
"rootTitle": "S’applique uniquement à root",
"rootBody": "La personnalisation concerne le shell du compte root. Les autres utilisateurs gardent leurs propres réglages par défaut. Si vous administrez Proxmox uniquement par l’interface web sans utiliser le shell, vous pouvez ignorer cette option purement esthétique."
},
"motd": {
"heading": "Configurer une bannière MOTD personnalisée",
"intro": "Ajoute <em>\"This system is optimised by: ProxMenux\"</em> au début de <code>/etc/motd</code>, le message après une connexion SSH réussie, au-dessus de l’invite et avant les scripts <code>update-motd</code>. Sans danger et purement informatif : confirme visuellement que ProxMenux a été appliqué sur l’hôte.",
"writesTitle": "Ce que ProxMenux écrit",
"writesOutro": "À la première application, ProxMenux enregistre si <code>/etc/motd</code> existait et conserve son contenu original sous <code>/usr/local/share/proxmenux</code>. L’opération est idempotente : si la ligne de repère existe déjà, rien n’est ajouté. Les anciennes installations avec <code>/etc/motd.bak</code> sont migrées vers le même état réversible."
},
"banner": {
"heading": "Supprimer la bannière d'abonnement",
"intro": "Supprime la fenêtre <em>« Vous n’avez pas d’abonnement valide pour ce serveur »</em> affichée à chaque connexion web Proxmox sans abonnement Enterprise. ProxMenux tient compte de la version et lance le script adapté aux différents fichiers d’interface des versions majeures.",
"versionTitle": "Choix du script selon la version",
"versionItems": [
"<strong>PVE 9.x</strong> → exécute <code>remove-banner-pve-v3.sh</code>, qui modifie <code>proxmoxlib.js</code> pour le bureau et la nouvelle interface mobile basée sur Yew.",
"<strong>PVE 8.x</strong> → exécute <code>remove-banner-pve8.sh</code>, uniquement pour l’interface de bureau."
],
"versionOutro": "Avant le patching, ProxMenux sauvegarde les fichiers JS/template originaux vers <code>/usr/local/share/proxmenux/backups/</code> avec un horodatage. Le flux Désinstaller utilise ces sauvegardes pour restaurer les fichiers originaux, et revient à réinstaller les paquets de l'interface utilisateur Proxmox si la sauvegarde est manquante ou corrompue.",
"breakTitle": "Peut se casser après les mises à jour Proxmox",
"breakBody": "Les mises à jour de l’interface Proxmox écrasent régulièrement <code>proxmoxlib.js</code>, ce qui peut faire revenir le rappel. Vous pouvez réappliquer l’option pour modifier le fichier ou garder le rappel jusque-là. ProxMenux installe aussi un hook APT qui réapplique la modification après les mises à niveau de paquets ; voir <link>Désinstaller les optimisations</link> pour sa suppression.",
"legalTitle": "Note juridique (il vaut toujours la peine de répéter)",
"legalBody": "Cette option masque seulement le rappel de l’interface. Elle ne donne <strong>pas</strong> droit au support Enterprise ni au dépôt Enterprise et ne change pas la licence du logiciel. Proxmox VE est publié sous GNU AGPLv3. Un abonnement soutient le projet et donne accès au canal de mises à jour Enterprise ; choisissez le niveau de support adapté à votre environnement."
},
"verify": {
"heading": "Vérification",
"intro": "Après avoir appliqué les trois :",
"reversibleTitle": "Les trois changements de personnalisation sont suivis",
"reversibleBody": "<link>Désinstaller les optimisations</link> restaure <code>/root/.bashrc</code>, remet MOTD dans son état exact d’avant ProxMenux ou supprime le fichier s’il n’existait pas, et restaure les fichiers d’interface modifiés depuis la sauvegarde ou réinstalle les paquets concernés si nécessaire."
},
"related": {
"heading": "Voir aussi",
"items": [
{
"label": "Facultatif",
"href": "/docs/post-install/optional",
"tail": "— Fastfetch et Figurine (autres personnalisations visuelles)."
},
{
"label": "Afficher les informations sur la version",
"href": "/docs/settings/show-version-information",
"tail": "— confirme que les personnalisations sont suivies comme installées."
},
{
"label": "Désinstaller les optimisations",
"href": "/docs/post-install/uninstall",
"tail": " — restaurer bashrc, motd et le rappel d’abonnement."
},
{
"label": "Post-installation personnalisable",
"href": "/docs/post-install/customizable",
"tail": "— retour au menu parent."
}
]
}
}
@@ -0,0 +1,106 @@
{
"meta": {
"title": "Script post-installation de Proxmox VE — Automatisé et personnalisable | ProxMenux",
"description": "Présentation des scripts post-installation de ProxMenux pour Proxmox VE. Le script Automatisé applique des valeurs par défaut raisonnables sans question ; le script Personnalisable permet de choisir précisément parmi 10 catégories ; Désinstaller les optimisations restaure les modifications réversibles prises en charge.",
"ogTitle": "Proxmox VE Script post-installation — automatisé et personnalisable",
"ogDescription": "Appliquez les optimisations courantes après installation de Proxmox VE dans 10 catégories, automatiquement ou à la carte, avec des options réversibles.",
"twitterTitle": "Script post-installation de Proxmox VE | ProxMenux",
"twitterDescription": "Optimisations automatisées et personnalisables post-installation pour Proxmox VE — avec options réversibles."
},
"header": {
"title": "Scripts post-installation",
"description": "Configurez un hôte Proxmox VE fraîchement installé avec les optimisations post-installation de ProxMenux. Appliquez automatiquement la configuration de base, choisissez des options individuelles, mettez à jour les fonctions installées ou restaurez les modifications réversibles prises en charge. Les mises à niveau de paquets ne sont pas présentées comme réversibles.",
"section": "Paramètres post-installation de Proxmox"
},
"intro": {
"title": "À quoi sert ce menu",
"body": "Après l’installation de Proxmox VE, des dizaines de petites modifications rendent l’hôte plus rapide et plus facile à entretenir : dépôts sans abonnement, limites journald raisonnables, tampons TCP adaptés, stockage des journaux ménageant les SSD, améliorations de bashrc et plus encore. ProxMenux les automatise et suit les modifications de configuration réversibles prises en charge."
},
"openingMenu": {
"heading": "Ouverture du menu",
"body": "Dans le menu principal de ProxMenux, sélectionnez <strong>Paramètres après l'installation Proxmox</strong>. Vous verrez ceci :",
"imageAlt": "Menu des scripts post-installation : Automatisé, Personnalisable, l’entrée conditionnelle Appliquer les mises à jour disponibles (uniquement si des mises à jour sont en attente) et Désinstaller, suivis de la section Scripts communautaires"
},
"threeWays": {
"heading": "Quatre façons d'appliquer les optimisations",
"body": "Les quatre entrées ProxMenux partagent le même code et le même registre d’outils installés, mais offrent différents niveaux de contrôle. <em>Appliquer les mises à jour disponibles</em> n’apparaît que si la version sur disque d’au moins une optimisation installée est plus récente que la version enregistrée ; l’entrée reste masquée juste après la configuration de l’hôte."
},
"routes": [
{
"title": "Automatisé",
"description": "Une sélection de 14 optimisations sûres et toujours utiles, appliquées successivement sans question. Un bon choix par défaut pour la plupart des utilisateurs.",
"bullets": [
"Dépôts sans abonnement + mise à niveau du système",
"Mémoire, noyau, réglage réseau",
"Log2RAM (détecté automatiquement sur SSD/NVMe)",
"Limites de taille pour journald + logrotate",
"Noms d'interface persistants"
]
},
{
"title": "Personnalisable",
"description": "Environ 35 optimisations individuelles dans 10 catégories. Vous choisissez précisément lesquelles appliquer. Même moteur qu’Automatisé, avec un contrôle complet.",
"bullets": [
"Interface à cases à cocher par catégorie",
"Inclut tout ce que fait Automatisé, plus des options à activer explicitement (IOMMU, Fastfetch, Figurine, Ceph, HA, correctifs AMD…)",
"Exécutez-le autant de fois que voulu : les modifications sont idempotentes"
]
},
{
"title": "Appliquer les mises à jour disponibles",
"description": "Si une optimisation post-installation (Log2Ram, paramètres de mémoire, Logrotate…) a une version sur disque plus récente que celle enregistrée sur l’hôte, cette entrée affiche uniquement les optimisations concernées. Elle relance leur fonction et actualise le registre, sans rien toucher d’autre.",
"bullets": [
"Activation individuelle par optimisation, uniquement celles modifiées",
"Même sélecteur disponible dans le tableau de bord Monitor",
"Une seule notification groupée lorsque de nouvelles mises à jour sont disponibles"
]
},
{
"title": "Désinstaller les optimisations",
"description": "Les modifications réversibles prises en charge sont suivies dans un registre JSON et associées à une fonction de restauration. Les actions sans retour en arrière sûr, comme une mise à niveau complète des paquets, sont volontairement exclues.",
"bullets": [
"Détecte automatiquement les optimisations précédemment appliquées",
"Choisit le retour adapté à chaque élément : restaurer une sauvegarde .bak si elle existe, supprimer le fragment de configuration sysctl.d si rien ne nécessitait de sauvegarde, ou réinstaller le paquet d’origine avec --force-confnew (par exemple pour la bannière d’abonnement)",
"Demande de redémarrage si nécessaire (VFIO, noms persistants, etc.)"
]
}
],
"whichTitle": "Lequel choisir ?",
"whichBody": "Pour une nouvelle installation de Proxmox avec une configuration de base raisonnable sans décisions à prendre : <autoLink><strong>Automatisé</strong></autoLink>. Si vous connaissez déjà les réglages souhaités ou à éviter : <customLink><strong>Personnalisable</strong></customLink>. Pour ne mettre à jour qu’une optimisation déjà appliquée dont une version plus récente est sur disque : <updatesLink><strong>Appliquer les mises à jour disponibles</strong></updatesLink>. Pour annuler proprement une modification précédente : <uninstallLink><strong>Désinstaller les optimisations</strong></uninstallLink>. Vous pouvez combiner ces modes : commencez par Automatisé, ajoutez Fastfetch ou IOMMU avec Personnalisable, puis annulez des éléments individuels plus tard.",
"mixing": {
"heading": "Mélange avec d'autres scripts post-installation",
"stackTitle": "Ne pas empiler plusieurs scripts post-installation",
"stackBody": "Exécuter plusieurs scripts post-installation sur le même hôte peut créer des fichiers de configuration en double, des entrées sysctl contradictoires ou même casser le réseau après redémarrage. Si vous avez déjà appliqué <strong>Helper-Scripts Post Install</strong>, certaines optimisations ProxMenux peuvent recouper sa configuration. Utilisez un seul outil post-installation par hôte.",
"xshokTitle": "xshok-proxmox: déprécié",
"xshokBody": "Les anciennes versions de ProxMenux présentaient <a>xshok-proxmox</a> comme outil post-installation complémentaire. Ce projet est désormais obsolète et n’est plus proposé dans ProxMenux. Si une ancienne exécution a laissé des marqueurs sur l’hôte, ProxMenux les détecte toujours et vous avertit. Ce n’est toutefois plus un outil à installer aux côtés de ProxMenux."
},
"community": {
"heading": "Scripts communautaires",
"body": "Le menu propose aussi deux scripts tiers du projet <a>community-scripts</a> : <em>Proxmox VE Post Install</em> et <em>Proxmox VE Microcode</em>. Ces enveloppes téléchargent et exécutent les scripts originaux via <code>wget | bash</code>. ProxMenux ne les maintient pas. Consultez <link>Dépôts externes</link> pour les détails et les questions de confiance avant de les lancer."
},
"related": {
"heading": "Voir aussi",
"items": [
{
"label": "Mise à jour du système Proxmox",
"href": "/docs/utils/system-update",
"tail": "— tient l'hôte à jour une fois qu'il a été installé."
},
{
"label": "Sécurité",
"href": "/docs/security",
"tail": "— Fail2Ban + Lynis au-dessus du durcissement post-installation."
},
{
"label": "Afficher les informations sur la version",
"href": "/docs/settings/show-version-information",
"tail": "— voir quels composants post-installation sont suivis comme installés."
},
{
"label": "Commandes de mises à jour et de paquets",
"href": "/docs/help-info/update-commands",
"tail": "— référence pour apt / pveupgrade."
}
]
}
}
@@ -0,0 +1,56 @@
{
"meta": {
"title": "Post-installation : Surveillance | Documentation ProxMenux",
"description": "Options de surveillance dans le script de post-installation personnalisable ProxMenux. Actuellement une seule option : installer OVH Real-Time Monitoring (RTM), qui ne s'active que si l'hôte est détecté comme serveur OVH."
},
"header": {
"title": "Après installation : surveillance",
"description": "Options de surveillance dans le script de post-installation personnalisable. Cette catégorie est petite et spécifique au fournisseur, elle installe l'agent de surveillance en temps réel OVH sur des serveurs OVH dédiés et ne fait rien ailleurs.",
"section": "Paramètres post-installation de Proxmox"
},
"intro": {
"title": "Un périmètre volontairement limité",
"body": "La surveillance post-installation se limite à <strong>un agent propre à un fournisseur</strong>. Les outils généraux (Prometheus, Grafana, node_exporter) sont hors périmètre, car leurs choix d’architecture — hôte séparé, conservation des données, destinataires des alertes — dépassent une étape en un clic. ProxMenux Monitor, inclus dans ProxMenux, remplit l’essentiel de ce rôle sans agent externe."
},
"ovh": {
"heading": "Installer la surveillance en temps réel OVH (RTM)",
"intro": "Si votre hôte Proxmox est un serveur dédié loué à partir de <a>OVHcloud</a>, vous pouvez permettre à RTM d'exposer la télémétrie matérielle (température CPU, statut PSU, disque SMART, état contrôleur RAID, etc.) au panneau de contrôle OVH. C'est le même agent OVH utilise pour leur propre fonction \"Surveillance du serveur\".",
"decisionsTitle": "La décision de ProxMenux",
"decisionsItems": [
"Obtenez l'IP public de l'hôte via <code>curl ipinfo.io/ip</code>.",
"Examine le FAI propriétaire avec une requête <code>whois</code> sur <code>v4.whois.cymru.com</code>.",
"Si le résultat mentionne OVH, télécharge <code>last-public-ovh-infra-yak.snap.mirrors.ovh.net/yak/archives/apply.sh</code> et le transmet à <code>bash</code> avec le manifeste Puppet de RTM v2.",
"Si le résultat ne mentionne <em>pas</em> OVH, rien n'est installé. L'option est sans opération."
],
"remoteTitle": "Le script distant est passé à bash",
"remoteBody": "L’installation exécute <code>wget -qO - https://…apply.sh | bash</code>. Si le miroir OVH est compromis, le script s’exécute en root sur votre hôte. Avant d’activer l’option, mettez en balance la confiance dans la chaîne de miroirs OVH et le bénéfice de surveillance. Pour la plupart des utilisateurs de laboratoires domestiques ou hors OVH, l’option devrait rester désactivée.",
"noOpTitle": "Activer uniquement si l'hôte est effectivement à OVH",
"noOpBody": "L'option est un non-op sur les serveurs non-OVH, donc cochez-le sur un Proxmox home-lab ne casse rien. Sur un hôte non-OVH le script imprime <em>\"Pas un serveur OVH, sauter l'installation RTM\"</em> et sortir proprement; aucun paquet n'est installé.",
"runsTitle": "Ce que ProxMenux exécute",
"verifyTitle": "Vérification",
"verifyBody": "Sur un véritable hôte OVH, après un redémarrage, vous devriez voir le tableau de bord <a>RTM</a> dans votre gestionnaire OVH peuplé de données en direct pour l'hôte. Du côté Proxmox, le capteur RTM est un service systemd — vérifiez-le directement:",
"troubleTitle": "Dépannage",
"revertTitle": "Supprimer RTM depuis le menu Désinstaller",
"revertBody": "Si RTM est enregistré comme installé, Désinstaller les optimisations propose une entrée OVH Real-Time Monitoring. Elle exécute <code>apt-get purge -y ''ovh-rtm*'' ''rtm'' ''rtm-*''</code>, supprime /etc/rtm et marque RTM comme désinstallé. Des éléments Puppet peuvent encore nécessiter un nettoyage manuel ; examinez les manifestes propres à RTM dans <code>/etc/puppet/</code>. Sur un hôte hors OVH, aucun paquet RTM n’a été installé, donc rien n’est à supprimer."
},
"related": {
"heading": "Voir aussi",
"items": [
{
"label": "ProxMenux Monitor",
"href": "/docs/settings/proxmenux-monitor",
"tail": "— tableau de bord web local pour l'hôte (travaille sur n'importe quel fournisseur, pas seulement OVH)."
},
{
"label": "Commandes système utiles",
"href": "/docs/help-info/system-commands",
"tail": "— référence de surveillance des hôtes locaux."
},
{
"label": "Post-installation personnalisable",
"href": "/docs/post-install/customizable",
"tail": "— retour au menu parent."
}
]
}
}
@@ -0,0 +1,128 @@
{
"meta": {
"title": "Post-installation : Réseau | Documentation ProxMenux",
"description": "Options réseau du script de post-installation personnalisable ProxMenux : forcer APT sur IPv4, appliquer un profil sysctl sélectionné, installer Open vSwitch, activer TCP BBR + Fast Open et associer les noms d’interfaces aux adresses MAC."
},
"header": {
"title": "Post-Installation: Réseau",
"section": "Paramètres post-installation de Proxmox"
},
"intro": {
"title": "Ce que cette catégorie couvre",
"body": "Cinq options réseau indépendantes. Deux sont simples (<strong>APT sur IPv4</strong>, <strong>installation d’Open vSwitch</strong>), deux règlent le comportement TCP (<strong>profil sysctl réseau</strong>, <strong>BBR + Fast Open</strong>) et une résout un problème courant : <strong>fixer les noms d’interfaces</strong> pour qu’une nouvelle carte réseau ou une mise à jour du BIOS ne renomme pas <code>enp3s0</code> en <code>enp4s0</code> et ne casse pas vos ponts."
},
"ipv4": {
"heading": "Forcer APT à utiliser IPv4",
"intro": "Écrit <code>Acquire::ForceIPv4 \"true\";</code> à <code>/etc/apt/apt.conf.d/99-force-ipv4</code>. APT refuse alors d'utiliser IPv6 pour les téléchargements de paquets, même si l'hôte a une connectivité IPv6.",
"tipTitle": "Bénéficiaires",
"tipBody": "Utile si la connexion IPv6 est instable, plus lente qu’IPv4 ou si le miroir Debian/Proxmox échoue parfois en IPv6. Sans effet indésirable sur les hôtes sans IPv6. Sur un réseau double pile sain, le comportement devient prévisible : apt ne vous surprendra pas avec un délai d’attente IPv6 dépassé."
},
"sysctl": {
"heading": "Appliquer les optimisations réseau",
"intro": "Écrit un profil sysctl sélectionné dans <code>/etc/sysctl.d/99-network.conf</code> : tampons de sockets du noyau, durcissement ICMP, protection de base contre l’usurpation d’adresse et tailles de tampons TCP adaptées à un hyperviseur avec de nombreux flux simultanés.",
"tunedTitle": "Paramètres ajustés",
"headerArea": "Domaine",
"headerSettings": "Paramètres clés",
"rows": [
{
"area": "Tampons de sockets du noyau",
"settings": "<code>netdev_max_backlog=8192</code>, <code>rmem_max=16M</code>, <code>wmem_max=16M</code>, <code>somaxconn=8192</code>"
},
{
"area": "durcissement ICMP",
"settings": "<code>icmp_echo_ignore_broadcasts=1</code>, <code>icmp_ignore_bogus_error_responses=1</code>"
},
{
"area": "Sécurité du routage",
"settings": "<code>accept_redirects=0</code>, <code>accept_source_route=0</code>, <code>secure_redirects=0</code>, <code>send_redirects=0</code>, <code>log_martians=0</code>"
},
{
"area": "Filtre de chemin inversé",
"settings": "<code>rp_filter=2</code> (mode souple, voir la note ci-dessous)"
},
{
"area": "TCP",
"settings": "<code>tcp_mtu_probing=1</code>, <code>tcp_rfc1337=1</code>, <code>tcp_sack=1</code>, <code>tcp_rmem=8K/87K/16M</code>, <code>tcp_wmem=8K/64K/16M</code>"
},
{
"area": "Ports",
"settings": "<code>ip_local_port_range=1024 65535</code> (plage de ports éphémères)"
},
{
"area": "Sockets Unix",
"settings": "<code>net.unix.max_dgram_qlen=4096</code>"
}
],
"sourceOutro": "Il ajoute également <code>source /etc/network/interfaces.d/*</code> à <code>/etc/network/interfaces</code> si ce n'est déjà présent — pratique standard pour que vous puissiez déposer des extraits d'interface modulaires sans modifier le fichier principal.",
"fwbrTitle": "Réglage automatique des ponts pare-feu virtuels",
"fwbrBody": "En plus du profil sysctl, ProxMenux installe le script auxiliaire <code>/usr/local/sbin/proxmenux-fwbr-tune</code>, qui applique <code>rp_filter=0</code> et <code>log_martians=0</code> aux interfaces <code>fwbr*</code> / <code>fwln*</code> / <code>fwpr*</code> / <code>tap*</code> créées par Proxmox pour les VM et conteneurs. L’unité à exécution unique <code>proxmenux-fwbr-tune.service</code> le lance au démarrage, et la règle <code>/etc/udev/rules.d/99-zz-proxmenux-fwbr-tune.rules</code> à chaque événement <code>net add</code> correspondant à ces préfixes. Cela couvre les interfaces recréées au démarrage ou à l’arrêt des VM, au redémarrage et à la migration à chaud. Le script traite aussi les interfaces existantes immédiatement après l’installation.",
"rpFilterTitle": "Pourquoi rp_filter=2 (souple) plutôt que 1 (strict)",
"rpFilterBody": "Le filtrage strict du chemin inverse rejette les paquets dont l’adresse source serait accessible par une interface <em>différente</em>. C’est une valeur par défaut adaptée aux clients, mais problématique sur un hôte Proxmox où le trafic VM arrive souvent par un pont et repart par une liaison montante avec des routes asymétriques. <code>rp_filter=2</code> (souple) ne rejette que les paquets dont la source est réellement injoignable par routage. Le compromis réduit légèrement la détection de l’usurpation d’IP locale pour préserver le réseau des VM."
},
"ovs": {
"heading": "Installer Open vSwitch",
"intro": "Installe <code>openvswitch-switch</code> + <code>openvswitch-common</code>. Ces paquets ajoutent OVS comme alternative aux ponts Linux utilisés par défaut par Proxmox. L’installation seule ne modifie pas le réseau : les ponts <code>vmbrX</code> existants continuent de fonctionner. Lorsque vous <em>créez</em> un nouveau pont dans Proxmox, OVS devient disponible dans la liste des types.",
"tipTitle": "Quand OVS a du sens",
"tipBody": "Envisagez OVS pour <strong>des trunks VLAN avec des ID non contigus</strong>, <strong>LACP avec LLDP dans certains modes</strong>, <strong>la programmation fine des flux</strong> (OpenFlow) ou l’interopérabilité avec les contrôleurs SDN. Pour un laboratoire domestique avec quelques VLAN et une seule liaison montante LACP, les ponts Linux + <code>vmbrX.VID</code> sont plus simples et tout à fait adaptés.",
"revertTitle": "Réversible depuis le menu Désinstaller",
"revertBody": "OVS est enregistré. <link>Désinstaller les optimisations</link> lance <code>apt purge</code> pour <code>openvswitch-switch</code> et <code>openvswitch-common</code>. Migrez les ponts OVS vers des ponts Linux <em>avant</em> la désinstallation, sinon leurs VM perdront le réseau au prochain démarrage. Équivalent manuel :"
},
"bbr": {
"heading": "Activer TCP BBR + TCP Fast Open",
"intro": "Écrit deux fichiers sysctl et les recharge. BBR remplace CUBIC par l’algorithme de congestion de Google fondé sur la bande passante, qui gère mieux les liaisons à forte capacité et latence ou avec pertes. TCP Fast Open (TFO) économise un aller-retour sur les connexions TCP répétées en envoyant des données dans le SYN.",
"verifyTitle": "Vérification",
"impactTitle": "L'impact dépend de la charge de travail",
"impactBody": "BBR brille sur des liaisons à haute latence ou à perte (réplication transcontinentale, tunnels VPN, clients mobiles). Sur un LAN entre deux machines sur le même commutateur, la différence est souvent dans le bruit. TFO aide les connexions courtes et répétées HTTP le plus.",
"revertTitle": "Réversible depuis le menu Désinstaller",
"revertBody": "BBR/TFO sont enregistrés. <link>Désinstaller les optimisations</link> supprime les deux fichiers sysctl (<code>/etc/sysctl.d/99-kernel-bbr.conf</code> et <code>99-tcp-fastopen.conf</code>) et recharge la configuration restante. Supprimer un fichier ne réinitialise pas ses valeurs actives dans le noyau. Les valeurs par défaut comme <code>cubic</code> et <code>tcp_fastopen=1</code> reviennent après un redémarrage, sauf si une autre configuration les remplace. Équivalent manuel :"
},
"names": {
"heading": "Noms d’interfaces persistants",
"intro": "Parcourt les cartes réseau physiques de l’hôte, en excluant loopback, les veth Docker, les ponts, les périphériques TAP, les bonds, Cilium, ZeroTier et WireGuard. Écrit un fichier systemd <code>.link</code> associant le nom actuel à l’adresse MAC actuelle. Cette association prend alors le pas sur le nommage automatique du noyau.",
"whyTitle": "Pourquoi cela est important",
"whyItems": [
"L'ajout ou la suppression de périphériques PCIe peut déplacer la numérotation du bus, transformer <code>enp3s0</code> en <code>enp4s0</code>. Si votre <code>/etc/network/interfaces</code> fait référence à l'ancien nom, le pont disparaît sur le redémarrage.",
"Les mises à jour du BIOS ou du firmware changent parfois l’énumération des périphériques, avec le même effet.",
"Le script écrit des fichiers <code>.link</code> pour les cartes physiques, y compris les ports des bonds, avec la MAC indiquée par sysfs à ce moment ; pour les ports d’un bond, il peut s’agir de la MAC partagée du bond, vérifiez donc leurs noms après un redémarrage. Il ignore les interfaces virtuelles, comme les veth LXC et les bonds eux-mêmes ; il ne corrige pas les courses au nommage des cartes virtuelles <code>hotplug</code>."
],
"writtenTitle": "Ce qui est écrit",
"writtenIntro": "Un fichier par NIC physique, au <code>/etc/systemd/network/10-proxmenux-&lt;iface&gt;.link</code>. Chaque fichier commence par l'en-tête <code># Managed by ProxMenux — do not edit</code> de sorte que ProxMenux puisse distinguer ses propres fichiers des fichiers <code>.link</code> fournis par l'utilisateur ou le paquet.",
"writtenOutro": "Les fichiers <code>.link</code> d’autres paquets ou écrits par l’utilisateur sont conservés ; seuls ceux portant l’en-tête ProxMenux sont gérés. À chaque nouvelle exécution, la fonction vérifie ses fichiers : elle relit <code>MACAddress=</code> dans chaque <code>10-proxmenux-*.link</code> et supprime ceux dont la MAC n’apparaît plus sous <code>/sys/class/net/</code>. Les fichiers d’anciennes versions ProxMenux au format <code>10-&lt;iface&gt;.link</code> sont migrés automatiquement la première fois.",
"pveTitle": "PVE 9 vs PVE 8",
"pveBody": "Le script utilise des fichiers systemd <code>.link</code> pour les noms persistants. Sur Proxmox VE 9, il recharge aussi les règles udev après écriture afin qu’une carte déjà fixée qui est rebranchée ou redétectée applique sa règle sans redémarrage. Vérifiez les interfaces existantes après un redémarrage sur PVE 8 comme sur PVE 9. Cela ne remplace pas <code>ifupdown2</code> sur l’hôte. Le script demande un redémarrage dans les deux cas via la post-installation personnalisable.",
"reviewTitle": "Examiner d'abord les /etc/network/interfaces existants",
"reviewBody": "Si l’ancienne configuration dans <code>/etc/network/interfaces</code> utilise des noms de cartes générés par le noyau, fixer les noms <em>actuels</em> est le résultat souhaité. Si vous avez déjà adapté la configuration à des noms précis, vérifiez soigneusement que les noms fixés correspondent au fichier interfaces avant de redémarrer.",
"revertTitle": "Réversible depuis le menu Désinstaller",
"revertBody": "<link>Désinstaller les optimisations</link> supprime uniquement les fichiers <code>10-proxmenux-*.link</code> portant l’en-tête ProxMenux dans <code>/etc/systemd/network/</code>. Les fichiers <code>.link</code> de l’utilisateur ou d’autres paquets sont conservés. Le nommage par défaut de systemd revient au prochain redémarrage."
},
"related": {
"heading": "Voir aussi",
"items": [
{
"label": "Gestion du réseau",
"href": "/docs/network",
"tail": "— diagnostic, analyse des ponts, réparations guidées."
},
{
"label": "Noms d'interface persistants",
"href": "/docs/network/persistent-names",
"tail": " — la même fonction dans un menu distinct pour plus tard ; utilisez l’une ou l’autre option, pas les deux."
},
{
"label": "Référence des commandes réseau",
"href": "/docs/help-info/network-commands",
"tail": " — ip, ss, ethtool, sysctl."
},
{
"label": "Désinstaller les optimisations",
"href": "/docs/post-install/uninstall",
"tail": " — annuler ces changements réseau."
},
{
"label": "Post-installation personnalisable",
"href": "/docs/post-install/customizable",
"tail": "— retour au menu parent."
}
]
}
}
@@ -0,0 +1,177 @@
{
"meta": {
"title": "ProxMenux Post-Installation: Paramètres optionnels",
"description": "Guide des paramètres optionnels dans le script ProxMenux post-installation pour les fonctionnalités et optimisations supplémentaires de Proxmox VE.",
"ogTitle": "ProxMenux Post-Installation: Paramètres optionnels",
"ogDescription": "Guide des paramètres optionnels dans le script ProxMenux post-installation pour les fonctionnalités et optimisations supplémentaires de Proxmox VE.",
"ogImageAlt": "Paramètres optionnels après l'installation de ProxMenux"
},
"title": "Paramètres optionnels",
"intro": "La catégorie <strong>Paramètres optionnels</strong> fournit des fonctions et optimisations supplémentaires à appliquer à Proxmox VE. Elles ne sont pas essentielles, mais peuvent améliorer les possibilités du système dans certains cas.",
"available": "Fonctions optionnelles disponibles",
"stepLabel": "Étape",
"ceph": {
"title": "Ajouter le dernier support Ceph",
"intro": "Cette option installe la dernière prise en charge du système de stockage Ceph pour Proxmox VE. Ceph est un système de stockage distribué qui offre des performances élevées, la fiabilité et l'évolutivité.",
"doesIntro": "Ce qu'il fait:",
"doesItems": [
"Ajoute le dépôt Ceph à votre système",
"Mise à jour des listes de paquets",
"Installe les paquets Ceph en utilisant la commande 'pveceph install'",
"Vérification de l'installation"
],
"howUse": "Comment utiliser : Après l'installation, vous pouvez configurer et gérer le stockage Ceph en utilisant l'interface web ou les outils en ligne de commande Proxmox VE.",
"automates": "Ce réglage automatise les commandes suivantes :"
},
"amd": {
"title": "Appliquer les correctifs AMD CPU",
"intro": "Cette option applique des corrections spécifiques pour les processeurs AMD EPYC et Ryzen pour améliorer la stabilité et la compatibilité.",
"doesIntro": "Ce qu'il fait:",
"doesItems": [
"Détecte si un AMD EPYC ou Ryzen CPU est présent",
"Applique le paramètre du noyau idle=nomwait pour prévenir les plantages aléatoires (via /etc/kernel/cmdline sur les hôtes systemd-boot ou /etc/default/grub sur les hôtes GRUB, avec une copie .bak de l’original).",
"Configure KVM pour ignorer certains MSR (Registres spécifiques au modèle) pour une meilleure compatibilité des clients Windows"
],
"howUse": "Comment utiliser: Ces corrections sont appliquées automatiquement et nécessitent un redémarrage du système pour prendre effet.",
"automates": "Ce réglage automatise les commandes suivantes :"
},
"ha": {
"title": "Activer les services à haute disponibilité",
"intro": "Cette option active les services de haute disponibilité (HA) de Proxmox VE, permettant la reprise automatique des VM et conteneurs sur un autre nœud en cas de panne.",
"doesIntro": "Ce qu'il fait:",
"doesItems": [
"Active et démarre le service pve-ha-lrm (gestionnaire des ressources locales)",
"Active et démarre le service pve-ha-crm (Gestionnaire des ressources de la grappe)",
"Active et démarre le service Corosync pour la communication cluster"
],
"howUse": "Comment utiliser: Après avoir activé ces services, vous pouvez configurer des groupes et des ressources HA dans l'interface web Proxmox VE.",
"automates": "Ce réglage automatise les commandes suivantes :"
},
"pveam": {
"title": "Mettre à jour le gestionnaire d'appliances Proxmox VE",
"intro": "Actualise l’index local des modèles de conteneurs exposé par <code>pveam</code> dans Proxmox, afin que les appliances logicielles disponibles soient à jour à la prochaine création d’un LXC.",
"doesIntro": "Ce qu'il fait:",
"doesItems": [
"Exécute <code>pveam update</code> sur les miroirs Proxmox pour récupérer le catalogue actuel des appliances logicielles",
"Remplit la liste des appliances logicielles affichée lors de la création d’un conteneur"
],
"howUse": "Utilisation : exécutez-le si la liste des appliances logicielles semble ancienne ou après un changement de miroir. Il télécharge uniquement l’index du catalogue, pas les modèles eux-mêmes.",
"automates": "Ce réglage automatise la commande suivante :"
},
"fastfetch": {
"title": "Installer et configurer Fastfetch",
"intro": "Cette option installe et configure en silence Fastfetch, un outil d'information système qui affiche les spécifications du système et un logo personnalisé lors de la connexion.",
"doesLabel": "Ce qu'il fait:",
"doesItems": [
"Télécharge et installe silencieusement la dernière version de Fastfetch",
"Vous permet de choisir un logo personnalisé (<strong>ProxMenux, Proxmox, Helper-Scripts, Home-Labs-Club, Proxmology</strong>, ou un logo personnalisé)",
"Configure Fastfetch pour afficher <em>\"Système optimisé par ProxMenux\"</em>",
"Configure Fastfetch pour fonctionner automatiquement à la connexion de la console"
],
"importantLabel": "Important:",
"importantBody": "Si vous vous connectez à Proxmox via SSH, sélectionnez le logo <strong>Proxmox</strong> ou créez un logo personnalisé en utilisant <code>jp2a</code> ou <code>img2txt</code>. Les autres logos sont générés en utilisant <code>chafa</code> et peuvent ne pas s'afficher correctement dans une session standard SSH.",
"customLabel": "Logos personnalisés :",
"customBody1": "Pour utiliser un logo personnalisé, placez votre fichier texte art ASCII dans : <code>/usr/local/share/fastfetch/logos/</code>",
"customBody2": "Vous pouvez créer des logos personnalisés en utilisant des outils tels que <code>chafa</code>, <code>jp2a</code> ou <code>img2txt</code>.",
"customBody3": "Pour de meilleurs résultats:",
"customItems": [
"Limitez la hauteur du logo à 35 lignes pour conserver les proportions et tenir dans le terminal",
"Utilisez <code>chafa</code> pour les logos couleur (peut ne pas s'afficher correctement dans les sessions SSH)",
"Utiliser <code>jp2a</code> ou <code>img2txt</code> pour les logos compatibles SSH"
],
"examplesLabel": "Exemple de logos :",
"logos": [
{
"name": "ProxMenux",
"alt": "Logo ProxMenux",
"src": "https://macrimi.github.io/ProxMenux/fastfetch/proxmenux.png"
},
{
"name": "Proxmox",
"alt": "Logo Proxmox",
"src": "https://macrimi.github.io/ProxMenux/fastfetch/proxmox.png"
},
{
"name": "JC Channel",
"alt": "Logo JC Channel",
"src": "/fastfetch/jc-channel.png"
},
{
"name": "Helper-Scripts",
"alt": "Logo Helper-Scripts",
"src": "https://macrimi.github.io/ProxMenux/fastfetch/helper-scripts.png"
},
{
"name": "Home-Labs-Club",
"alt": "Logo Home-Labs-Club",
"src": "https://macrimi.github.io/ProxMenux/fastfetch/home-labs-club.png"
},
{
"name": "Proxmology",
"alt": "Logo Proxmology",
"src": "https://macrimi.github.io/ProxMenux/fastfetch/proxmology.png"
}
],
"automates": "Ce réglage automatise les commandes suivantes :"
},
"figurine": {
"title": "Installer et configurer Figurine",
"intro": "Cette option installe et configure Figurine, un outil qui crée des bannières texte ASCII élégantes pour votre terminal, affichant votre nom d'hôte dans un format 3D attrayant visuellement.",
"doesLabel": "Ce qu'il fait:",
"doesItems": [
"Télécharge et installe Figurine v2.1.1 depuis GitHub pour l’architecture de l’hôte (AMD64, ARM64 ou ARMv7)",
"Crée un message de bienvenue qui affiche votre nom d'hôte dans l'art 3D ASCII lorsque vous vous connectez",
"Met à jour le binaire Figurine existant une fois le téléchargement et l’extraction terminés avec succès",
"Configure le message de bienvenue à exécuter automatiquement à la connexion"
],
"practicalLabel": "Utilisation pratique:",
"practicalBody": "Lors de la gestion de plusieurs nœuds Proxmox dans un cluster, Figurine fournit une indication visuelle immédiate du noeud dans lequel vous êtes actuellement connecté. Cela permet d'éviter les commandes accidentelles sur le mauvais noeud et améliore votre workflow lors de la gestion de plusieurs serveurs.",
"exampleLabel": "Exemple de sortie :",
"imageAlt": "Figurine Exemple de sortie",
"automates": "Ce réglage automatise le processus suivant :",
"outro": "Après l'installation, vous verrez votre nom d'hôte affiché dans l'art 3D ASCII chaque fois que vous vous connectez, rendant immédiatement clair sur quel noeud Proxmox vous travaillez."
},
"log2ram": {
"title": "Installer Log2RAM (SSD/NVMe réduction de l'usure)",
"intro": "Log2RAM monte <code>/var/log</code> sur un disque RAM tmpfs et le synchronise régulièrement vers le disque. Mettre en mémoire les écritures journald fréquentes peut réduire l’usure SSD et les E/S. La synchronisation et un arrêt propre sauvegardent les journaux ; une coupure brutale peut perdre les entrées depuis la dernière synchronisation.",
"upstreamLabel": "Projet en amont:",
"upstreamUrl": "https://github.com/azlux/log2ram",
"upstreamLinkLabel": "azlux/log2ram sur GitHub",
"doesLabel": "Que fait ProxMenux:",
"doesItems": [
"Détecte si le disque racine est SSD/NVMe en lisant <code>/sys/block/&lt;dev&gt;/queue/rotational</code>. Sur un disque rotatif, le flux automatisé demande d'abord avant d'installer.",
"Clone le dépôt original (<code>azlux/log2ram</code>) dans <code>/tmp/log2ram</code> et modifie <code>install.sh</code> en remplaçant <code>rsync -aAXv</code> par <code>rsync -aXv --no-acls</code>. Cela évite l’erreur <em>set_acl: Operation not supported</em> avec code de sortie 23, déclenchée par le script original lors du déplacement de /var/log sur un système sans ACL. L’unité systemd <code>log2ram</code> est activée après installation.",
"Dimensionne le disque RAM selon la mémoire de l’hôte : <code>≤ 8 GB → 128M</code>, <code>≤ 16 GB → 256M</code>, <code>&gt; 16 GB → 512M</code>. Écrit la valeur dans <code>SIZE=</code> de <code>/etc/log2ram.conf</code>.",
"Planifie une synchronisation périodique du disque via <code>/etc/cron.d/log2ram</code> : toutes les 1h / 3h / 6h selon le même niveau RAM.",
"Installe <code>/usr/local/bin/log2ram-check.sh</code>, lancé toutes les 10 minutes par <code>/etc/cron.d/log2ram-auto-sync</code>. Quand <code>/var/log</code> atteint 80% du disque RAM, il purge les anciens journaux journald. À 92%, il lance d’abord <code>logrotate -f /etc/logrotate.d/proxmox-backup-api</code> si le fichier existe : les journaux API PBS occupent souvent le plus d’espace sur un hôte PBS. Il tronque ensuite <code>pveproxy access/error</code> et <code>pveam.log</code> avant synchronisation. <code>log2ram write</code> seul copie tmpfs sur disque sans le réduire. Cette protection aide à éviter un arrêt de PVE avec <em>No space left on device</em> lorsque les journaux grossissent sans contrôle.",
"Détecte le service <code>proxmox-backup-server</code> sur l’hôte. S’il est présent, crée <code>/etc/logrotate.d/proxmox-backup-api</code> (20 Mo × 3 rotations) et <code>/etc/cron.hourly/proxmox-backup-logrotate</code> pour limiter les journaux API PBS, souvent à l’origine de la croissance, même entre les synchronisations Log2RAM. Sans PBS, cette étape ne change rien.",
"Ajuste les limites systemd-journald (<code>SystemMaxUse</code>, <code>RuntimeMaxUse</code>) pour qu'elles s'adaptent au disque virtuel afin qu'une seule rafale ne puisse pas le remplir.",
"S’enregistre dans <code>installed_tools.json</code> pour pouvoir être annulé via Désinstaller les optimisations."
],
"howUseLabel": "Comment utiliser:",
"howUseBody": "Le parcours automatisé installe Log2RAM sans intervention si le disque racine est SSD/NVMe. Le parcours personnalisable demande taille, intervalle et activation de la protection. L’invite indique actuellement 90%, mais le script généré utilise les seuils de nettoyage à 80% et intensif à 92% décrits plus haut.",
"verifyLabel": "Vérifier et gérer à partir du shell:",
"verifyCode": "# Service state and configured timers\nsystemctl status log2ram\nsystemctl list-timers log2ram*\n\n# Current ramdisk usage — /var/log IS the tmpfs itself\ndf -h /var/log\n\n# Force a sync now (tmpfs → disk); does NOT shrink the tmpfs\nlog2ram write\n\n# Trigger the auto-sync guard on demand (vacuum + sync when usage is high)\n/usr/local/bin/log2ram-check.sh\n\n# Current config: SIZE, mail settings, path\ncat /etc/log2ram.conf\n\n# ProxMenux-specific cron jobs\ncat /etc/cron.d/log2ram /etc/cron.d/log2ram-auto-sync\n\n# Recent Log2RAM activity\njournalctl -u log2ram -n 50 --no-pager"
},
"zram": {
"title": "Activer le profil d'échange ZRAM",
"intro": "Crée un périphérique swap compressé en RAM, <code>/dev/zram0</code>, avec <code>systemd-zram-generator</code>. Les pages déplacées vers le swap sont compressées par zstd et conservées en mémoire avant l’utilisation du swap sur disque.",
"doesLabel": "Ce qu'il fait:",
"doesItems": [
"Installe <code>systemd-zram-generator</code> s'il manque, et enregistre si ProxMenux l'a installé.",
"Écrit <code>/etc/systemd/zram-generator.conf.d/90-proxmenux.conf</code> : un périphérique <code>zram0</code> d’un dixième de la RAM de l’hôte, compression zstd (<code>zstd(level=9)</code> avec systemd-zram-generator 1.2.0 ou ultérieur) et priorité swap 32767.",
"Avec cette priorité, le noyau remplit d'abord ZRAM. Un swap existant sur disque conserve sa propre priorité et prend les pages qui ne correspondent plus à ZRAM.",
"Avant de changer quoi que ce soit, recherche une autre configuration ZRAM: un swap zram actif, une ligne zram dans <code>/etc/fstab</code>, une unité systemd ou un autre fichier générateur. Si elle en trouve un, l'option s'arrête et laisse cette configuration telle qu'elle est.",
"Démarre <code>dev-zram0.swap</code> et vérifie que l'appareil actif correspond au profil. Sinon, l'état précédent est rétabli.",
"S’enregistre dans <code>installed_tools.json</code> pour pouvoir être annulé via Désinstaller les optimisations."
],
"howUseLabel": "Comment utiliser:",
"howUseBody": "Cette option appartient uniquement au parcours personnalisable ; le parcours automatisé ne l’applique pas. Le périphérique est recréé à chaque démarrage. Lorsqu’il est actif, le panneau Mémoire de ProxMenux Monitor affiche capacité, swap utilisé, algorithme, taux de compression et mémoire physique occupée.",
"verifyLabel": "Vérifier depuis le shell :",
"verifyCode": "# Active swap devices and their priority\nswapon --show\n\n# ZRAM device: algorithm, size and compressed data\nzramctl\n\n# Profile written by ProxMenux\ncat /etc/systemd/zram-generator.conf.d/90-proxmenux.conf\n\n# State of the swap unit\nsystemctl status dev-zram0.swap"
},
"autoApplication": {
"title": "Application automatique",
"body": "Dans le parcours personnalisable, choisissez les fonctions selon vos besoins. Log2RAM appartient aussi au parcours automatisé avec détection matérielle ; ZRAM reste réservé au personnalisable. Consultez chaque section pour les confirmations et prérequis."
}
}
@@ -0,0 +1,61 @@
{
"meta": {
"title": "Post-installation : Performances | Documentation ProxMenux",
"description": "Options de performance du script post-installation personnalisable de ProxMenux. Remplace gzip à un seul thread par pigz (gzip parallèle) pour accélérer les sauvegardes et la compression sur les hôtes multicœurs."
},
"header": {
"title": "Après installation : performances",
"description": "Options de performance du script post-installation personnalisable. Cette catégorie contient une seule optimisation : remplacer gzip par pigz pour que les sauvegardes et la compression utilisent tous les cœurs du processeur au lieu d’un seul.",
"section": "Paramètres post-installation de Proxmox"
},
"intro": {
"title": "Ce que cette catégorie couvre",
"body": "La seule option de performance ici redirige gzip vers une implémentation parallèle. Les autres réglages de performance (mémoire, ordonnancement des E/S, taille de l’ARC ZFS, limites du noyau) se trouvent dans leurs catégories (<em>Système</em>, <em>Stockage</em>), car ils concernent d’autres sous-systèmes."
},
"pigz": {
"heading": "Utilisez pigz pour une compression gzip plus rapide",
"intro": "<code>gzip</code> standard compresse avec <strong>un seul cœur de processeur</strong>. Sur les hôtes Proxmox modernes à 8, 16 ou 32 cœurs, cela limite fortement les sauvegardes VM/CT avec <code>vzdump</code>, la rotation des journaux et tout ce qui passe par <code>gzip</code>. <a>pigz</a> est un remplacement parallèle directement compatible : même sortie compatible gzip, mais travail réparti sur tous les cœurs.",
"doesTitle": "Ce que fait ProxMenux",
"doesIntro": "Cinq étapes, toutes idempotentes :",
"doesItems": [
"Définit <code>pigz: 1</code> dans <code>/etc/vzdump.conf</code> pour que l’outil de sauvegarde Proxmox utilise pigz nativement.",
"Installe le paquet apt <code>pigz</code> s’il est absent.",
"Écrit un script wrapper dans <code>/bin/pigzwrapper</code> qui transmet tous les arguments à <code>/usr/bin/pigz</code>.",
"Enregistre un détournement dpkg du binaire système <code>gzip</code> (<code>/usr/bin/gzip</code> sur Proxmox VE 9, <code>/bin/gzip</code> sur Proxmox VE 8). Le binaire original est conservé à côté sous <code>gzip.distrib</code> et le wrapper prend sa place. Désormais, <em>tout</em> ce qui appelle <code>gzip</code> — logrotate, <code>tar czf</code>, scripts, vzdump — utilise pigz de façon transparente.",
"Vérifie que le fichier conservé sous <code>gzip.distrib</code> est un gzip fonctionnel avant de placer le wrapper ; sinon, réinstalle d’abord le paquet <code>gzip</code>. Un hôte utilisant encore l’ancien remplacement <code>/bin/gzip.original</code> passe au détournement lors de la prochaine application."
],
"replacesTitle": "Cela remplace un binaire système",
"replacesBody": "Placer un wrapper à la place de <code>gzip</code> est inhabituel. C’est sûr, car il produit une sortie compatible gzip, mais les scripts à chemins codés en dur, exécutés dans des chroots restrictifs ou vérifiant les empreintes des binaires peuvent se comporter différemment. Le binaire original reste sous <code>gzip.distrib</code>. Grâce au détournement dpkg, une mise à jour du paquet <code>gzip</code> ou le passage de Proxmox VE 8 à 9 met à jour ce fichier et laisse le wrapper en place.",
"revertTitle": "Réversible depuis le menu Désinstaller",
"revertBody": "Cette optimisation est suivie. <link>Désinstaller les optimisations</link> remet le binaire original de <code>gzip.distrib</code> à la place du wrapper, supprime le détournement et <code>pigzwrapper</code>, commente la ligne <code>pigz</code> dans <code>/etc/vzdump.conf</code>, puis exécute <code>apt purge pigz</code> après vérification du fonctionnement de gzip. Équivalent manuel sur Proxmox VE 9 :",
"verifyTitle": "Vérification",
"verifyBody": "Après application, <code>gzip --version</code> doit mentionner pigz. Un test rapide montre aussi la différence de vitesse sur un hôte multicœur :",
"whenTitle": "Quand cela importe le plus",
"whenBody": "Le gain dépend du <strong>nombre de cœurs de l’hôte</strong> et de la <strong>fréquence des sauvegardes</strong>. Sur un serveur de laboratoire domestique à 2 cœurs avec un vzdump quotidien, le gain est faible. Sur un hôte de production à 16 cœurs sauvegardant une douzaine de VM chaque nuit, pigz peut réduire la fenêtre de sauvegarde à une fraction du temps de gzip à un seul thread."
},
"related": {
"heading": "Voir aussi",
"items": [
{
"label": "Commandes de sauvegarde et de restauration",
"href": "/docs/help-info/backup-commands",
"tailRich": " — référence CLI de vzdump, dont l’option de nombre de threads <code>--pigz</code>."
},
{
"label": "Stockage",
"href": "/docs/post-install/storage",
"tail": "— limites de vitesse vzdump et réglage ARC ZFS."
},
{
"label": "Système",
"href": "/docs/post-install/system",
"tail": "— descripteur de fichiers et réglage de mémoire."
},
{
"label": "Post-installation personnalisable",
"href": "/docs/post-install/customizable",
"tail": "— retour au menu parent."
}
]
}
}
@@ -0,0 +1,57 @@
{
"meta": {
"title": "Post-installation : Sécurité | Documentation ProxMenux",
"description": "Options de sécurité disponibles dans le script de post-installation personnalisable ProxMenux. Actuellement une seule option : désactiver le service portmapper/rpcbind pour réduire la surface d'attaque de l'hôte."
},
"header": {
"title": "Post-Installation: Sécurité",
"section": "Paramètres post-installation de Proxmox"
},
"intro": {
"title": "Ce que cette catégorie couvre",
"body": "La sécurité post-installation se limite au <strong>renforcement de l’hôte applicable sans surveillance en toute sécurité</strong> : désactiver des services rarement nécessaires et pouvoir l’annuler dans Désinstaller. Les outils actifs (Fail2Ban pour prévenir les intrusions, Lynis pour les audits) se trouvent dans <em>Sécurité</em> du menu principal de ProxMenux, hors de la post-installation."
},
"rpcbind": {
"heading": "Désactiver le portmapper / rpcbind",
"intro": "<code>rpcbind</code> (anciennement <code>portmap</code>) associe les numéros de programmes RPC aux ports réseau. NFS et certains anciens outils RPC en dépendent. Sur un hôte Proxmox typique qui ne sert pas de serveur NFS, <strong>rien ne l’utilise</strong> ; le laisser actif maintient le port <code>111/tcp</code> en écoute sur toutes les interfaces.",
"whyTitle": "Pourquoi ça vaut la peine d'être désactivé",
"whyItems": [
"Réduit la surface d'attaque de l'hôte — un service d'écoute de moins pour s'inquiéter.",
"Historiquement utilisé comme vecteur de réflexion/amplification dans les attaques DDoS. Désactiver <code>rpcbind</code> supprime ce facteur d'amplification pour votre hôte.",
"Supprime le bruit qu’il génère dans les journaux et les sorties de <code>netstat</code> / <code>ss</code>, pour repérer plus facilement l’activité réelle."
],
"nfsTitle": "Ne pas désactiver cela si vous utilisez NFS",
"nfsBody": "Le serveur NFS <strong>et</strong> le client NFS utilisent <code>rpcbind</code> pour négocier les ports de <code>mountd</code>, <code>statd</code>, <code>lockd</code>, etc. N’appliquez pas cette option si l’hôte Proxmox <em>exporte</em> des partages NFS vers d’autres machines ou <em>monte</em> des partages NFS d’un NAS. Les montages échoueront avec <code>mount.nfs: rpc.statd is not running</code> ou une erreur similaire.",
"runsTitle": "Ce que ProxMenux exécute",
"runsOutro": "Le paquet reste installé. ProxMenux enregistre les états d’activation et d’exécution d’origine de rpcbind.service et rpcbind.socket, puis désactive et arrête les deux unités pour empêcher la réactivation du service par le socket.",
"verifyTitle": "Vérification",
"verifyBody": "Après application, vérifiez que <code>rpcbind</code> est arrêté et que rien n’écoute sur le port 111 :",
"reversibleTitle": "Restaurer l'état de service original",
"reversibleBody": "Cette modification est enregistrée dans <code>installed_tools.json</code>. <link>Désinstaller les optimisations</link> restaure chaque unité rpcbind à ses états d’activation et d’exécution relevés avant la modification par ProxMenux. L’outil ne suppose pas que rpcbind était activé sur tous les hôtes."
},
"related": {
"heading": "Voir aussi",
"items": [
{
"label": "Menu de sécurité",
"href": "/docs/security",
"tail": " — des outils plus poussés : Fail2Ban (prévention des intrusions) et Lynis (audit)."
},
{
"label": "Lynis",
"href": "/docs/security/lynis",
"tail": " — pour auditer l’hôte et trouver d’autres possibilités de renforcer la sécurité."
},
{
"label": "Commandes système utiles",
"href": "/docs/help-info/system-commands",
"tail": "— état de service, journalctl, référence d'audit lynis."
},
{
"label": "Post-installation personnalisable",
"href": "/docs/post-install/customizable",
"tail": "— retour au menu parent."
}
]
}
}
@@ -0,0 +1,167 @@
{
"meta": {
"title": "Post-Installation: Stockage - Documentation ProxMenux",
"description": "Optimisations de stockage du script de post-installation personnalisable ProxMenux : taille ZFS ARC selon la RAM de l’hôte, instantanés périodiques avec zfs-auto-snapshot et suppression des limites de vitesse des sauvegardes vzdump."
},
"header": {
"title": "Post-Installation: Stockage",
"section": "Paramètres post-installation de Proxmox"
},
"intro": {
"title": "Ce que cette catégorie couvre",
"body": "Quatre optimisations de stockage : régler <strong>ZFS ARC</strong> sur une part raisonnable de la RAM, installer et programmer <strong>les instantanés ZFS automatiques</strong>, activer <strong>ZFS autotrim</strong> sur les pools SSD/NVMe et retirer les limitations de <strong>vzdump</strong> pour accélérer les sauvegardes. Choisissez chaque option indépendante selon votre configuration. Une cinquième option, <link>Log2RAM</link>, réduit l’usure SSD/NVMe en déplaçant <code>/var/log</code> en RAM. Elle figure dans Options car le menu personnalisable la classe ainsi."
},
"trackedTitle": "Les quatre sont suivis dans le menu Désinstaller",
"trackedBody": "Chaque option s’enregistre dans <code>installed_tools.json</code> pour <link>Désinstaller les optimisations</link>. <code>zfs_arc</code> supprime <code>/etc/modprobe.d/99-zfsarc.conf</code> et reconstruit initramfs ; <code>zfs_auto_snapshot</code> annule le calendrier cron et propose de purger le paquet ; <code>zfs_autotrim</code> définit <code>autotrim=off</code> sur les pools activés ; <code>vzdump_speed</code> restaure <code>/etc/vzdump.conf</code> depuis le <code>.bak</code> créé à l’installation.",
"arc": {
"heading": "Optimiser la taille de ZFS ARC",
"intro": "Le <strong>Adaptive Replacement Cache (ARC)</strong> est le cache de lecture ZFS en mémoire. Les installations Proxmox VE depuis 8.1 fixent 10% de RAM, au maximum 16 GiB ; les hôtes anciens ou mis à niveau peuvent différer. Cette option écrit explicitement cette même règle (RAM/10, au maximum 16 GiB, au minimum 64 MiB) dans son propre fichier, ce qui couvre aussi les hôtes anciens ou mis à niveau. Vérifiez les réglages et la charge : un cache plus petit n’est pas toujours plus rapide.",
"sizingTitle": "Règles de calibrage",
"headerRam": "RAM de l'hôte",
"headerMax": "Plafond ARC",
"rows": [
{
"ram": "Formule",
"max": "RAM / 10, plafonné à 16 GiB, avec un plancher 64 MiB"
},
{
"ram": "Hôte 8 GB",
"max": "≈ 819 MiB (RAM/10)"
},
{
"ram": "Hôte 16 GB",
"max": "≈ 1.6 GiB (RAM/10)"
},
{
"ram": "Hôte 64 GB",
"max": "≈ 6.4 GiB (RAM/10)"
},
{
"ram": "≥ 160 GB hôte",
"max": "16 GiB (plafond)"
}
],
"after": "Le fichier <code>/etc/modprobe.d/99-zfsarc.conf</code> contient uniquement <code>options zfs zfs_arc_max=…</code>. Les autres paramètres ZFS (<code>zfs_arc_min</code>, prélecture/limitation des écritures L2ARC, délai TXG) ne sont pas ajustés. Au préalable, une vérification recherche les autres <code>*.conf</code> de <code>/etc/modprobe.d/</code> définissant <code>zfs_arc_min</code> / <code>zfs_arc_max</code>, les sauvegarde avec manifeste dans <code>/usr/local/share/proxmenux/backups/zfs_arc/</code> et en retire les valeurs <code>zfs_arc_min</code> / <code>zfs_arc_max</code> conflictuelles (les autres options de ces lignes sont conservées), pour que seul le fichier ARC ProxMenux fixe la limite. Puis <code>update-initramfs -u -k all</code> et, si nécessaire, <code>proxmox-boot-tool refresh</code> intègrent la limite à l’initramfs des systèmes avec racine ZFS.",
"rebootTitle": "Nécessite un redémarrage pour prendre effet",
"rebootBody": "Les réglages ARC sont lus au chargement du module <code>zfs</code>. Pour les hôtes avec racine ZFS, ProxMenux régénère initramfs avec <code>update-initramfs -u -k all</code> et actualise si nécessaire le chargeur avec <code>proxmox-boot-tool refresh</code>. Le nouveau paramètre exige toujours un redémarrage, signalé automatiquement.",
"safeTitle": "Sans effet indésirable sur les hôtes sans ZFS",
"safeBody": "La fonction n’écrit la configuration que si <code>zpool list</code> signale au moins un pool ZFS importé. Sur un hôte Proxmox ext4/LVM uniquement, ou avec outils ZFS mais sans pool importé, cocher cette option ne fait rien : aucun fichier n’est écrit.",
"verifyTitle": "Vérification et retour arrière manuel"
},
"autoSnap": {
"heading": "Installer l'instantané automatique ZFS",
"intro": "Installe le paquet <a>zfs-auto-snapshot</a> et réécrit ses horaires cron afin que les instantanés soient pris automatiquement à plusieurs intervalles. Un grand filet de sécurité sans effort en plus de vos sauvegardes Vzdump régulières.",
"cadenceTitle": "Fréquence des instantanés configurée par ProxMenux",
"headerLabel": "Étiquette",
"headerRuns": "Exécution",
"headerKept": "Captures instantanées conservées",
"rows": [
{
"label": "fréquent",
"runs": "chaque 15 min",
"kept": "4"
},
{
"label": "horaire",
"runs": "toutes les heures",
"kept": "1"
},
{
"label": "quotidiennement",
"runs": "une fois par jour",
"kept": "1"
},
{
"label": "hebdomadaire",
"runs": "une fois par semaine",
"kept": "1"
},
{
"label": "mensuel",
"runs": "une fois par mois",
"kept": "1"
}
],
"conservativeTitle": "Rétention limitée",
"conservativeBody": "ProxMenux est livré avec une rétention prudente (juste 4 fréquent + 1 de chaque intervalle plus long) de sorte que le stockage des instantanés ZFS ne ballonne pas. Si vous souhaitez une conservation plus longue, modifiez les numéros dans <code>/etc/cron.d/zfs-auto-snapshot</code>, <code>/etc/cron.hourly/zfs-auto-snapshot</code>, etc. après le script.",
"onlyZfsTitle": "Utile uniquement sur les pools ZFS",
"onlyZfsBody": "Installer le paquet sur un hôte ext4 seulement est inoffensif mais inutile — il n'y a pas d'ensembles de données ZFS pour qu'il snapshot. Passez cette option si vous n'utilisez pas ZFS.",
"verifyTitle": "Vérification et retour arrière manuel"
},
"autotrim": {
"heading": "Activer ZFS autotrim (pools SSD/NVMe)",
"intro": "Active <code>autotrim</code> sur les pools ZFS composés uniquement de SSD ou NVMe compatibles TRIM. Le script ignore par précaution les pools avec un disque rotatif. Les pools déjà en <code>autotrim=on</code> restent inchangés.",
"trimTitle": "Ce que TRIM fait, et pourquoi il importe sur ZFS",
"trimBody1": "Les SSD et NVMe utilisent des blocs d’effacement internes plus grands que les secteurs logiques du système de fichiers. Après suppression d’un fichier, le disque ne sait pas encore que les secteurs sont libres ; son nettoyage interne peut donc recopier des données obsolètes pour libérer d’autres blocs. <strong>TRIM</strong> lui signale les secteurs libres pour permettre leur effacement anticipé.",
"trimBody2": "Sans TRIM, les performances de SSD se dégradent au fil du temps car le lecteur n'a plus de blocs pré-effacés et doit faire effacer-à-écrire, et l'amplification de l'écriture augmente — les deux raccourcissant la vie utile du lecteur. Avec TRIM activé, le lecteur peut garder un bassin sain de blocs vides prêts à écrire.",
"trimBody3": "Avec <code>autotrim=on</code>, ZFS traite en arrière-plan l’espace récemment libéré en regroupant les plages. Un <code>zpool trim &lt;pool&gt;</code> périodique est une alternative. Autotrim évite un calendrier séparé, mais son impact dépend des disques ; le TRIM manuel périodique peut mieux convenir à certains modèles modestes.",
"practicalTitle": "Pourquoi est-ce pratique?",
"practicalItems": [
"<strong>Performances d’écriture durables.</strong> TRIM peut aider le disque à récupérer efficacement les blocs inutilisés. Le bénéfice et l’impact sur la latence dépendent du matériel et de la charge.",
"<strong>Longévité du disque.</strong> Éviter des copies internes inutiles peut réduire l’amplification d’écriture et l’usure NAND, sans garantir une durée de vie supplémentaire précise.",
"<strong>Pas de tâche cron à prévoir.</strong> Contrairement à un <code>zpool trim</code> périodique, autotrim est géré automatiquement par le pool."
],
"whenTitle": "Quand est-ce nécessaire ?",
"whenIntro1": "<strong>Envisagez de l’activer</strong> sur les pools ZFS uniquement en SSD/NVMe compatibles TRIM. Vérifiez le comportement et la latence ; un TRIM manuel planifié peut mieux convenir.",
"whenIntro2": "<strong>Le script le saute automatiquement</strong> sur:",
"whenSkipItems": [
"Pools avec un vdev sur disque dur rotatif : filtre matériel prudent de ce script.",
"Disques sans <code>discard_granularity</code> exposé dans sysfs : anciens SSD sans TRIM ou accès direct ne permettant pas au système de voir le périphérique sous-jacent.",
"Pools où ZFS lui-même signale la propriété non supportée (rare; très vieux pools).",
"Pools déjà mis à <code>autotrim=on</code> (non-op)."
],
"whenIntro3": "<strong>Non pertinent sur les hôtes ext4 seulement</strong> — il n'y a rien pour ZFS à découper. La fonction sort avec un message amical dans ce cas.",
"recordedTitle": "Pourquoi seuls les pools ProxMenux modifiés sont enregistrés",
"recordedBody": "La fonction n'écrit un pool à son fichier d'état interne (<code>/usr/local/share/proxmenux/zfs_autotrim_pools</code>) que lorsqu'elle a activement retourné ce pool de <code>off</code> à <code>on</code>. Les pools que vous aviez sur autotrim avant d'exécuter le script sont laissés en dehors de la liste, de sorte qu'un futur désinstallation ne désactive pas les paramètres que vous avez configurés vous-même — seuls les changements de ProxMenux sont retournés.",
"manualTitle": "Équivalent manuel (exécutez sur votre serveur)",
"manualIntro": "La séquence complète du script s'exécute contre chaque pool est reproductible à la main. C'est ce que vous taperiez si vous vouliez faire la même chose sur un seul pool sans ProxMenux:",
"verifyTitle": "Vérification et retour arrière manuel",
"oneShotTitle": "Besoin d’un TRIM ponctuel plutôt que continu ?",
"oneShotBody": "Certains administrateurs préfèrent un TRIM manuel aux heures creuses. Désactivez autotrim et programmez une tâche cron exécutant <code>zpool trim &lt;pool&gt;</code> : même objectif, fréquence différente."
},
"vzdump": {
"heading": "Augmenter la vitesse de sauvegarde de vzdump",
"intro": "Écrit bwlimit: 0 et ionice: 5 dans la configuration globale vzdump. Proxmox n’a déjà pas de limite de bande passante par défaut : seul un plafond configuré est retiré. Par rapport à ionice: 7, la valeur 5 augmente la priorité E/S best-effort si l’ordonnanceur la respecte. Cela peut affecter les invités sans garantir des sauvegardes plus rapides.",
"changedTitle": "Ce qui est changé dans /etc/vzdump.conf",
"backupTitle": "La première exécution crée un .bak de vzdump.conf",
"backupBody": "Au premier passage, ProxMenux copie <code>/etc/vzdump.conf</code> vers <code>/etc/vzdump.conf.bak</code> avant modification. Les exécutions suivantes conservent cette sauvegarde pour récupérer la configuration antérieure. <code>bwlimit</code> et <code>ionice</code> sont modifiés par <code>sed</code> ; les autres options comme compress, pigz, tmpdir et exclude-path sont conservées.",
"skipTitle": "Quand sauter ça",
"skipBody": "Sur un hôte à stockage local lent avec des VM sensibles à la latence, retirer la limite de bande passante peut causer des ralentissements pendant les sauvegardes. Si vous avez défini un <code>bwlimit</code> pour cela, conservez-le et ignorez cette option.",
"verifyTitle": "Vérification et retour arrière manuel"
},
"related": {
"heading": "Voir aussi",
"items": [
{
"label": "Commandes de gestion ZFS",
"href": "/docs/help-info/zfs-commands",
"tail": " — référence zpool / zfs pour ARC, instantanés et scrub."
},
{
"label": "Commandes de stockage et de disques",
"href": "/docs/help-info/storage-commands",
"tail": " — référence des périphériques de blocs et du stockage Proxmox."
},
{
"label": "Commandes de sauvegarde et restauration",
"href": "/docs/help-info/backup-commands",
"tail": " — référence CLI vzdump pour la bande passante et la priorité E/S."
},
{
"label": "Désinstaller les optimisations",
"href": "/docs/post-install/uninstall",
"tail": " — annuler les modifications ARC / vzdump."
},
{
"label": "Log2RAM",
"href": "/docs/post-install/optional#log2ram",
"tail": "— réduit l'usure du SSD/NVMe par le support de ramdisque /var/log; documenté sous Facultatif."
},
{
"label": "Post-installation personnalisable",
"href": "/docs/post-install/customizable",
"tail": "— retour au menu parent."
}
]
}
}
@@ -0,0 +1,133 @@
{
"meta": {
"title": "Post-installation : Système | Documentation ProxMenux",
"description": "Optimisations système du script de post-installation personnalisable ProxMenux : limites de taille journald et logrotate, limites du noyau et des descripteurs de fichiers relevées, réglage équilibré de la mémoire, redémarrages rapides par kexec et récupération après panique du noyau."
},
"header": {
"title": "Après installation : système",
"section": "Paramètres post-installation de Proxmox"
},
"intro": {
"title": "Ce que cette catégorie couvre",
"body": "Six optimisations système indépendantes. Elles règlent <strong>journald</strong> et <strong>logrotate</strong> pour éviter de remplir le disque, relèvent <strong>les limites du noyau et des descripteurs de fichiers</strong> pour les applications ouvrant beaucoup de fichiers, <strong>équilibrent la mémoire</strong> d’un hôte de virtualisation, ajoutent <strong>kexec</strong> pour redémarrer sans passer par le BIOS et configurent <strong>la récupération automatique</strong> après panique du noyau. Les six sont enregistrées et réversibles depuis le menu de désinstallation."
},
"journald": {
"heading": "Optimiser journald",
"intro": "Réécrit <code>/etc/systemd/journald.conf</code> avec des valeurs raisonnables pour éviter que le journal systemd remplisse progressivement la partition racine, puis redémarre <code>systemd-journald</code> et purge les anciens journaux.",
"keyTitle": "Valeurs clés",
"keyItems": [
"<code>Storage=persistent</code> — tenir des journaux sur le disque à travers les reboots.",
"<code>SystemMaxUse=64M</code> / <code>RuntimeMaxUse=60M</code> — plafonds d’utilisation du disque et de la mémoire par le journal.",
"<code>Compress=yes</code>, <code>Seal=no</code> — compresser les journaux, désactiver le scellement à sécurité persistante (économise du CPU).",
"<code>MaxLevelStore=info</code> — conserver les niveaux info et supérieurs, nécessaires au lecteur de journaux ProxMenux Monitor et à la détection des échecs d’authentification SSH/Proxmox par Fail2Ban dans le journal.",
"Limite de débit : <code>1000 events / 30 s</code> pour éviter un afflux excessif de journaux.",
"<code>ForwardToSyslog=no</code>, <code>ForwardToWall=no</code> — ne dupliquez pas les messages au syslog ou ne les diffusez pas sur des consoles."
],
"tipTitle": "Pourquoi MaxLevelStore=info compte",
"tipBody": "Un seuil plus strict comme <code>warning</code> fait afficher presque les mêmes entrées à ProxMenux Monitor sur toutes les périodes, car la plupart des activités sont de niveau info, et empêche Fail2Ban de voir les échecs de connexion. Réduisez plutôt le volume avec <code>SystemMaxUse</code> et <code>RateLimitBurst</code> sans restreindre les niveaux conservés."
},
"logrotate": {
"heading": "Optimiser logrotate",
"intro": "Réécrit <code>/etc/logrotate.conf</code> avec des réglages globaux quotidiens et de taille, 7 rotations conservées, compression et <code>copytruncate</code> pour que les services continuent d’écrire sans rouvrir les fichiers. Le critère de taille, placé après le critère quotidien, prévaut sauf règle propre au journal. Le <code>logrotate.conf</code> original est sauvegardé en <code>.bak</code> à la première application.",
"tipTitle": "Compatible avec Log2RAM",
"tipBody": "La directive <code>size 10M</code> prévaut sur le réglage quotidien précédent ; elle ne signifie <em>pas</em> le premier des deux critères. Logrotate vérifie le seuil à son exécution, et les règles propres aux journaux peuvent remplacer les valeurs globales. Pour <code>/var/log</code> en RAM avec Log2RAM, vérifiez les règles et la fréquence du minuteur afin de contrôler l’espace."
},
"limits": {
"heading": "Augmenter diverses limites du système",
"intro": "Relève des limites du noyau, de systemd et de PAM dont les valeurs par défaut peuvent être trop faibles pour un hôte exécutant de nombreuses VM, conteneurs et services réseau.",
"headerFile": "Fichier",
"headerSets": "Ce qu'il définit",
"rows": [
{
"file": "/etc/sysctl.d/99-maxwatches.conf",
"sets": "<code>fs.inotify.max_user_watches / max_user_instances / max_queued_events = 1048576</code>"
},
{
"file": "/etc/sysctl.d/99-maxkeys.conf",
"sets": "<code>kernel.keys.maxkeys / root_maxkeys = 1000000</code>"
},
{
"file": "/etc/sysctl.d/99-swap.conf",
"sets": "<code>vm.swappiness = 10</code>, <code>vm.vfs_cache_pressure = 100</code>"
},
{
"file": "/etc/sysctl.d/99-fs.conf",
"sets": "<code>fs.nr_open / file-max = 2097152</code>, <code>fs.aio-max-nr = 1048576</code>"
},
{
"file": "/etc/security/limits.d/99-limits.conf",
"sets": "<code>nofile</code> et <code>nproc</code> à 1 048 576 (illimités pour root)"
},
{
"file": "/etc/systemd/system.conf + user.conf",
"sets": "<code>DefaultLimitNOFILE=1048576</code> pour les services systemd"
},
{
"file": "/etc/pam.d/common-session + runuser-l",
"sets": "<code>session required pam_limits.so</code> donc ce qui précède s'applique aux shells de connexion"
},
{
"file": "/root/.profile",
"sets": "<code>ulimit -n 1048576</code> pour le shell root"
}
],
"tipTitle": "Pourquoi inotify est important",
"tipBody": "Docker, Syncthing, les surveillances de fichiers Node.js et les analyses Plex peuvent épuiser <code>max_user_watches</code>. La valeur par défaut dépend du noyau et de la mémoire ; elle n’est pas toujours 8192. Un plafond de 1M autorise davantage de surveillances sans les préallouer. Les surveillances actives consomment de la mémoire du noyau : vérifiez l’usage si la RAM est limitée."
},
"memory": {
"heading": "Optimiser les paramètres de la mémoire",
"intro": "Écrit un profil de sysctl équilibré à <code>/etc/sysctl.d/99-memory.conf</code>. Conçu pour un hôte hyperviseur — préfère garder les ensembles de travail VM dans RAM et libère les pages de manière proactive afin que les éclats d'allocation ne s'arrêtent pas.",
"warnTitle": "swappiness=10 sur les hôtes avec peu de mémoire",
"warnBody": "Sur un hôte de 16 Go de RAM exécutant de nombreuses VM, réduire swappiness peut conduire le noyau à tuer des processus par manque de mémoire plutôt qu’à utiliser le swap. Si les événements OOM sont fréquents, remontez swappiness à 30–60 dans <code>/etc/sysctl.d/99-memory.conf</code> après le script."
},
"kexec": {
"heading": "Activer les redémarrages rapides (kexec)",
"intro": "Installe <code>kexec-tools</code> et le branche pour que vous puissiez redémarrer l'hôte directement dans un nouveau noyau <em> sans passer par BIOS/UEFI firmware</em>. Sur les grands serveurs où POST prend 45 – 90 secondes, cela transforme un redémarrage d'une pause café en quelques secondes d'arrêt.",
"installsTitle": "Ce que ProxMenux installe",
"installsItems": [
"Paquet <code>kexec-tools</code> (debconf pré-réponse avec <code>kexec-tools/load_kexec boolean false</code> donc apt n'invite pas et le chargement automatique à l'arrêt reste désactivé).",
"Unité systemd <code>/etc/systemd/system/kexec-pve.service</code> — charge le noyau Proxmox et initrd en mémoire au démarrage en réutilisant la ligne de commande actuelle du noyau.",
"Un alias dans <code>/root/.bash_profile</code>: <code>reboot-quick</code> → <code>systemctl kexec</code>."
],
"usageIntro": "Utilisation après le prochain redémarrage (ou manuel <code>systemctl start kexec-pve</code>):",
"warnTitle": "Quand ne pas utiliser kexec",
"warnBody": "kexec saute l’initialisation du firmware. Si vous dépendez de BIOS/UEFI pour réinitialiser le matériel, par exemple un GPU en passthrough nécessitant un POST complet ou un firmware HBA problématique, ces redémarrages peuvent laisser les appareils partiellement initialisés. Utilisez un <code>reboot</code> normal après une mise à niveau du noyau ou pour appliquer des changements BIOS/UEFI. <code>reboot-quick</code> sert aux redémarrages courants."
},
"panic": {
"heading": "Activer le redémarrage en cas de panique du noyau",
"intro": "Fait <strong>redémarrer automatiquement</strong> le noyau au lieu de rester bloqué sur l’écran de panique. Essentiel pour les hôtes Proxmox distants ou sans console locale : un noyau bloqué arrête toutes les VM jusqu’à ce que vous puissiez couper puis rétablir l’alimentation.",
"tipTitle": "Combinez ceci avec l'accès à la console à distance",
"tipBody": "Le redémarrage automatique sert à récupérer le système, pas à le déboguer. Pour <em>analyser</em> une panique plutôt que simplement redémarrer, utilisez <link>l’option kexec</link> ci-dessus avec kdump du noyau, non configuré par ProxMenux, ou enregistrez une console série sur un autre hôte avant d’activer le redémarrage automatique."
},
"verify": {
"heading": "Vérification",
"intro": "Après l'application des optimisations système:",
"tipTitle": "Restauration et limites",
"tipBody": "Les six options figurent dans <code>installed_tools.json</code> et <link>Désinstaller les optimisations</link>. La restauration retire les fichiers de configuration, l’unité et l’alias kexec, réécrit journald.conf avec les valeurs par défaut de systemd et rétablit logrotate.conf depuis sa sauvegarde. Certaines limites actives nécessitent une nouvelle session ou un redémarrage."
},
"related": {
"heading": "Voir aussi",
"items": [
{
"label": "Commandes système utiles",
"href": "/docs/help-info/system-commands",
"tail": " — vérifier les modifications (free -h, journalctl, ulimit -a)."
},
{
"label": "Performances",
"href": "/docs/post-install/performance",
"tail": "— réglage supplémentaire au niveau du système (pigz)."
},
{
"label": "Désinstaller les optimisations",
"href": "/docs/post-install/uninstall",
"tail": "— revenir à l'un de ces changements."
},
{
"label": "Post-installation personnalisable",
"href": "/docs/post-install/customizable",
"tail": "— retour au menu parent."
}
]
}
}
@@ -0,0 +1,271 @@
{
"meta": {
"title": "Désinstaller les optimisations | Documentation ProxMenux",
"description": "Restaurer les modifications de configuration réversibles après l'installation appliquées par ProxMenux. Les outils enregistrés utilisent des désinstallateurs dédiés qui préservent l'état d'hôte préexistant lorsque c'est possible."
},
"header": {
"title": "Désinstaller les optimisations",
"description": "Restaurer les modifications réversibles apportées par les scripts de post-installation automatisés ou personnalisables. ProxMenux enregistre chaque optimisation supportée avec sa fonction de restauration dédiée; les mises à jour de paquets sont intentionnellement exclues.",
"section": "Paramètres post-installation de Proxmox"
},
"intro": {
"title": "Pourquoi cela existe",
"body": "Chaque réglage réversible pris en charge est <strong>enregistré</strong> dans <code>/usr/local/share/proxmenux/installed_tools.json</code>. Ce registre liste les optimisations actives et appelle la fonction de restauration correspondante. Les actions sans retour arrière sûr, comme une mise à niveau complète des paquets, ne sont pas ajoutées."
},
"openMenu": {
"heading": "Comment l'ouvrir",
"body": "Depuis le menu principal, ouvrez <strong>Paramètres post-installation Proxmox → Désinstaller les optimisations</strong>. La liste propose les optimisations <em>actuellement appliquées</em> ; celles non appliquées n’apparaissent pas.",
"imageAlt": "Liste de désinstallation montrant les optimisations actives sur l’hôte, avec cases de sélection pour les annuler"
},
"howWorks": {
"heading": "Comment fonctionne le retour arrière",
"steps": [
{
"title": "Registre et détection automatique",
"body1": "Au premier passage, ProxMenux recherche des marqueurs sur l’hôte : <code>/etc/sysctl.d/99-memory.conf</code>, <code>/etc/apt/apt.conf.d/99-force-ipv4</code>, paquet <code>haveged</code> installé, service Log2RAM actif, etc. Les éléments reconnus sont enregistrés comme réversibles, même s’ils viennent d’une version antérieure au registre.",
"body2": "Cette migration ne dure qu'une seule fois. Ensuite, chaque application/réversion met à jour le registre directement."
},
{
"title": "Choisir les changements à annuler",
"body1": "La liste de vérification présente une étiquette lisible par l'homme par article (p. ex. <em>Optimisation des paramètres de mémoire</em>, <em>IOMMU/VFIO PCI Passthrough</em>, <em>Log2RAM (SSD Protection)</em>). Cochez ceux que vous voulez inverser. Rien de ce que vous ne cochez ne sera touché."
},
{
"title": "Exécution de la restauration",
"body1": "Pour chaque élément sélectionné, ProxMenux appelle sa fonction de désinstallation correspondante. La plupart des renversements suivent l'un des trois modèles suivants :",
"items": [
"<strong>Basé sur la sauvegarde</strong> — restaurer un <code>.bak</code> capturé au moment de l'application (bashrc, logrotate.conf, journald.conf, GRUB/kernel cmdline).",
"<strong>Suppression de configuration</strong> — retire les fichiers ProxMenux <code>/etc/sysctl.d/99-*.conf</code>, <code>/etc/apt/apt.conf.d/99-*</code> ou l’unité systemd, puis recharge.",
"<strong>Réinstallation de paquets</strong> — pour les modifications d’interface comme l’avertissement d’abonnement, réinstalle les paquets originaux avec <code>--force-confnew</code> pour rétablir les réglages fournis."
],
"body2": "Chaque renversement enregistre ses progrès. Les éléments qui nécessitent un redémarrage (VFIO, noms d'interface persistants) définissent un drapeau qui déclenche l'invite de redémarrage à la fin."
},
{
"title": "Demande de redémarrage à la fin",
"body1": "Une fois l'inversion terminée, le menu affiche une invite de redémarrage. Les éléments qui ont modifié les paramètres du noyau, les modules du noyau ou le nom de réseau (VFIO, noms d'interface persistants) ont besoin du redémarrage pour prendre effet; d'autres éléments ne le font pas, et l'invite est une sécurité par défaut plutôt qu'une vérification par item."
}
]
},
"reversible": {
"heading": "Ce qui est réversible",
"intro": "Les optimisations réversibles enregistrées et leurs désinstallateurs correspondants sont regroupés ici par domaine:",
"groups": [
{
"title": "Dépôts & APT",
"items": [
{
"tool": "Suppression de la bannière d'abonnement",
"restores": "D'abord essayer de restaurer les fichiers d'interface utilisateur à partir des sauvegardes de ProxMenux (/usr/local/share/proxmenux/backups/proxmoxlib.js.backup.* et, lorsque l'interface utilisateur mobile est patchée, index.html.tpl.backup.*). Seulement si une sauvegarde est manquante ou corrompue, revient à réinstaller pve-manager, proxmox-widget-toolkit, libjs-extjs et libpve-http-server-perl avec force-confnew. Efface également les copies en cache .js / .gz."
},
{
"tool": "Ignorer les langues APT",
"restores": "Supprime /etc/apt/apt.conf.d/99-disable-translations pour permettre les index de descriptions de paquets traduites selon les autres réglages linguistiques APT."
},
{
"tool": "Forcer IPv4 pour APT",
"restores": "Supprime /etc/apt/apt.conf.d/99-force-ipv4."
},
{
"tool": "Utilitaires système",
"restores": "Purge seulement les paquets utilitaires sélectionnés que ProxMenux enregistré comme nouvellement installé. Les paquets déjà présents avant l'action ne sont jamais ajoutés à cette liste et restent intacts."
}
]
},
{
"title": "Limites du noyau, de la mémoire et du système",
"items": [
{
"tool": "Paramètres de la mémoire",
"restores": "Supprime /etc/sysctl.d/99-memory.conf et recharge sysctl."
},
{
"tool": "Configuration de la panique du noyau",
"restores": "Supprime /etc/sysctl.d/99-kernelpanic.conf."
},
{
"tool": "Augmentation des limites du système",
"restores": "Supprime /etc/sysctl.d/99-maxwatches.conf, 99-maxkeys.conf, 99-swap.conf, 99-fs.conf et /etc/security/limits.d/99-limits.conf. Rétablit les limites PAM et DefaultLimitNOFILE systemd. Dans /root/.profile, seul l’ancien ulimit -n 256000 est retiré ; ulimit -n 1048576 de l’installateur actuel peut rester et nécessiter une suppression manuelle."
},
{
"tool": "Profil d'échange ZRAM",
"restores": "Désactive le swap /dev/zram0, arrête dev-zram0.swap et supprime /etc/systemd/zram-generator.conf.d/90-proxmenux.conf. Le paquet systemd-zram-generator n’est purgé que si ProxMenux l’a installé et qu’aucune autre configuration ZRAM n’existe. Si les pages ne peuvent pas être évacuées, le profil reste actif et rien n’est supprimé."
}
]
},
{
"title": "Réseautage",
"items": [
{
"tool": "Optimisations du réseau",
"restores": "Supprime /etc/sysctl.d/99-network.conf, 97-proxmenux-fwbr.conf et 98-proxmenux-rpf.conf, l’unité proxmenux-fwbr-tune.service, le script /usr/local/sbin/proxmenux-fwbr-tune et la règle udev /etc/udev/rules.d/99-zz-proxmenux-fwbr-tune.rules. Retire aussi la ligne source /etc/network/interfaces.d/* de /etc/network/interfaces. Recharge sysctl, systemd et les règles udev."
},
{
"tool": "Open vSwitch",
"restores": "Exécute apt purge pour openvswitch-switch et openvswitch-common. Migrez les ponts OVS vers Linux avant la désinstallation, sinon leurs VM perdront le réseau au prochain démarrage."
},
{
"tool": "TCP BBR + TCP Fast Open",
"restores": "Supprime /etc/sysctl.d/99-kernel-bbr.conf et 99-tcp-fastopen.conf, puis recharge le reste de sysctl. Supprimer les fichiers ne réinitialise pas les valeurs actives ; les valeurs par défaut comme cubic et tcp_fastopen=1 reviennent au redémarrage sauf autre configuration."
},
{
"tool": "Noms d'interface persistants",
"restores": "Supprime uniquement les fichiers 10-proxmenux-*.link contenant l'en-tête ProxMenux de /etc/systemd/network/. Tout fichier .link fourni par un autre paquet ou écrit par l'utilisateur est laissé en place. Les noms d'interface retournent au comportement par défaut de systemd lors du prochain redémarrage."
}
]
},
{
"title": "Journalisation",
"items": [
{
"tool": "Optimisation de journald",
"restores": "Réécrit /etc/systemd/journald.conf par défaut et redémarre systemd-journald."
},
{
"tool": "Optimisation du logrotate",
"restores": "Restaurer /etc/logrotate.conf à partir du fichier .bak capturé avant le changement."
},
{
"tool": "Log2RAM",
"restores": "Arrête et désactive le service et le minuteur. Supprime tâches cron, unités systemd, binaires, configuration et /var/log.hdd. Désinstalle aussi le paquet apt si cette méthode a été utilisée."
},
{
"tool": "TRIM automatique ZFS",
"restores": "Lit /usr/local/share/proxmenux/zfs_autotrim_pools, la liste des pools réellement modifiés, et lance zpool set autotrim=off sur chacun. Les pools activés manuellement avant ProxMenux restent intacts."
}
]
},
{
"title": "Shell & apparence",
"items": [
{
"tool": "Personnalisation de Bashrc",
"restores": "Restaurer /root/.bashrc à partir de la sauvegarde .bak. Si aucune sauvegarde n'existe, supprime le bloc PMX_CORE_BASHRC par des marqueurs."
},
{
"tool": "Bannière MOTD personnalisée",
"restores": "Restaurer le contenu original exact /etc/motd conservé sous /usr/local/share/proxmenux, supprime le fichier lorsqu'il n'existait pas avant, ou supprime en toute sécurité le marqueur existant lors de la migration d'une ancienne installation."
},
{
"tool": "Fastfetch",
"restores": "Supprime le binaire, le répertoire de configuration, le hook update-motd et le bloc délimité BEGIN FASTFETCH / END FASTFETCH de /root/.bashrc, ~/.profile, /etc/profile et /etc/profile.d/fastfetch.sh. Purge le paquet apt s’il est installé."
},
{
"tool": "Figurine",
"restores": "Supprime le binaire, l’entrée profile.d et le bloc d’alias de bashrc/profile."
}
]
},
{
"title": "Matériel & virtualisation",
"items": [
{
"tool": "IOMMU / VFIO",
"restores": "Supprime les modules vfio de /etc/modules, les entrées de blocage nouveau / radeon / nvidia et les paramètres intel_iommu=on / amd_iommu=on / iommu=pt / pcie_acs_override de /etc/kernel/cmdline (ZFS) ou GRUB. Reconstruit initramfs."
},
{
"tool": "Corrections AMD CPU (Ryzen/EPYC)",
"restores": "Supprime idle=nomwait de la ligne de commande du noyau (ZFS) ou GRUB, et les options ignore_msrs / report_ignored_msrs de /etc/modprobe.d/kvm.conf."
},
{
"tool": "Agent invité pour un hôte Proxmox virtualisé",
"restores": "Lit /usr/local/share/proxmenux/guest_agent.pkg et purge le paquet hôte enregistré. L’installateur choisit qemu-guest-agent, open-vm-tools ou virtualbox-guest-utils selon l’hyperviseur. Sans enregistrement, la désinstallation essaie ces trois paquets. Cela agit sur l’hôte Proxmox imbriqué, pas sur les modèles invités."
}
]
},
{
"title": "Stockage",
"items": [
{
"tool": "Dimensionnement de l'ARC ZFS",
"restores": "Supprime /etc/modprobe.d/99-zfsarc.conf, restaure les *.conf externes en conflit sauvegardés dans /usr/local/share/proxmenux/backups/zfs_arc/, reconstruit initramfs et lance proxmox-boot-tool refresh sur les hôtes systemd-boot."
},
{
"tool": "Instantanés automatiques ZFS",
"restores": "Supprime les tâches cron écrites par le script et propose apt purge zfs-auto-snapshot. Les instantanés existants sur les pools restent intacts ; supprimez-les séparément si nécessaire."
},
{
"tool": "Limites de vitesse vzdump",
"restores": "Restaure /etc/vzdump.conf depuis le .bak créé à l’installation pour rétablir bwlimit et ionice à leurs valeurs avant ProxMenux."
}
]
},
{
"title": "Services et suppléments",
"items": [
{
"tool": "Synchronisation du temps",
"restores": "Rétablit le fuseau UTC, valeur par défaut sûre, via timedatectl."
},
{
"tool": "Génération d’entropie (haveged)",
"restores": "Arrête, désactive et purge le paquet haveged."
},
{
"tool": "kexec (redémarrages rapides)",
"restores": "Désactive kexec-pve.service, supprime l’unité et l’alias reboot-quick de /root/.bash_profile, puis purge kexec-tools."
},
{
"tool": "RPC / rpcbind Désactiver",
"restores": "Rétablit séparément rpcbind.service et rpcbind.socket dans leurs états activé/désactivé et actif/inactif enregistrés avant ProxMenux."
},
{
"tool": "pigz (parallèle gzip)",
"restores": "Rétablit le vrai gzip depuis gzip.distrib, supprime le détournement dpkg et /bin/pigzwrapper, commente la ligne pigz de /etc/vzdump.conf puis lance apt purge pigz après vérification de gzip."
},
{
"tool": "Services à haute disponibilité",
"restores": "Arrête et désactive pve-ha-lrm, pve-ha-crm et corosync. Les groupes HA existants et les définitions de ressources ne sont pas supprimés — les supprimer de l'interface utilisateur Web si vous n'en avez plus besoin."
},
{
"tool": "Dépôt Ceph",
"restores": "Purge les paquets Ceph installés par cette option, supprime le deb822 /etc/apt/sources.list.d/ceph.sources sur PVE 9 (ou la liste de Ceph sur PVE 8), et rafraîchit le cache APT."
},
{
"tool": "OVH RTM (surveillance)",
"restores": "Purge les paquets correspondant à ovh-rtm*, rtm et rtm-*, supprime /etc/rtm et retire l’entrée RTM du registre. Les restes Puppet dans /etc/puppet/ peuvent nécessiter une vérification et un nettoyage manuels ; le répertoire n’est pas supprimé. Hors OVH, l’installateur ne change normalement rien."
}
]
}
]
},
"edge": {
"heading": "Cas particuliers et précautions",
"packageTitle": "La réinstallation touche des paquets Proxmox en cours d’utilisation",
"packageBody": "Si les sauvegardes ProxMenux ne peuvent pas annuler <strong>Suppression de l’avertissement d’abonnement</strong>, la solution de repli réinstalle <code>pve-manager</code>, <code>proxmox-widget-toolkit</code>, <code>libjs-extjs</code> et <code>libpve-http-server-perl</code> avec <code>--force-confnew</code>. Cela touche l’interface active : actualisez le navigateur et attendez la reconnexion. Évitez les migrations et clonages en cours.",
"rebootTitle": "Les noms persistants et VFIO ont besoin d'un redémarrage",
"rebootBody": "Suppression ProxMenux's <code>10-proxmenux-*.link</code> fichiers (<em>Noms d'interface persistants</em>) et retour <em>IOMMU/VFIO</em> n'affectent pas le système d'exécution — ils ne comptent qu'après un redémarrage. ProxMenux définit le drapeau de redémarrage automatiquement pour ceux-ci.",
"perItemTitle": "Vous pouvez annuler une modification et garder les autres",
"perItemBody": "Le désinstallateur fonctionne par élément. Si vous voulez seulement supprimer Log2RAM mais garder le réglage réseau et les changements de bashrc, cochez uniquement <em>Log2RAM</em>. Rien d'autre n'est touché et le registre est mis à jour en conséquence."
},
"inspect": {
"heading": "Inspection manuelle du registre",
"intro": "Si vous voulez voir ce qui est suivi sans ouvrir le menu:",
"outro": "Chaque entrée <code>\"tool\": true</code> correspond à quelque chose de ProxMenux appliqué et peut inverser. L'élimination manuelle d'une entrée n'est pas recommandée — utilisez toujours le menu, qui exécute également la fonction d'inversion au lieu de simplement oublier le changement.",
"reinstallTitle": "Réinstaller après désinstallation",
"reinstallBody": "La réversion d'une optimisation ne vous empêche pas de la réappliquer plus tard. Ouvrez <link>le menu Post-Installer</link> à nouveau et exécutez soit Automatique ou Personnalisable — le registre suivra le nouvel état."
},
"related": {
"heading": "Voir aussi",
"items": [
{
"label": "Système automatisé de post-installation",
"href": "/docs/post-install/automated",
"tail": "— réappliquer le niveau de référence par défaut."
},
{
"label": "Post-installation personnalisable",
"href": "/docs/post-install/customizable",
"tail": "— choisir un sous-ensemble différent."
},
{
"label": "Désinstaller ProxMenux",
"href": "/docs/settings/uninstall-proxmenux",
"tail": "— fonctionnement différent: supprime ProxMenux lui-même, et non ses optimisations appliquées."
},
{
"label": "Aperçu après l'installation",
"href": "/docs/post-install",
"tail": "."
}
]
}
}
@@ -0,0 +1,112 @@
{
"meta": {
"title": "Appliquer les mises à jour disponibles — Optimisations post-installation | Documentation ProxMenux",
"description": "Comment ProxMenux détecte lorsqu'une optimisation post-installation (Log2Ram, Paramètres de mémoire, Limites du système, Logrotate, réglage réseau...) a été mise à jour en amont, et comment appliquer la nouvelle version — depuis le menu Post-Install ou depuis le tableau de bord de Monitor."
},
"header": {
"title": "Appliquer les mises à jour disponibles",
"description": "Si une optimisation post-installation (Log2Ram, paramètres de mémoire, limites système, Logrotate…) a une version sur disque plus récente que celle enregistrée sur l’hôte, ProxMenux la signale comme mise à jour disponible. Vous pouvez l’appliquer depuis le menu post-installation des scripts ou le tableau de bord Monitor. Les deux relancent la même fonction et actualisent le registre.",
"section": "Paramètres post-installation de Proxmox"
},
"intro": {
"title": "Ce que c'est",
"body": "Les optimisations post-installation ProxMenux ont des versions, par exemple <code>Log2ram SSD Protection v1.2</code>. L’hôte enregistre les optimisations actives et leurs versions dans <code>/usr/local/share/proxmenux/installed_tools.json</code>. Lorsqu’une version ProxMenux fournit une optimisation plus récente, l’écart est détecté et seule celle-ci est proposée à la réapplication, sans relancer toute la post-installation."
},
"why": {
"heading": "Pourquoi cela existe",
"body": "Les optimisations après installation peuvent être améliorées : meilleur réglage sysctl, limite Logrotate plus stricte, nouvelle méthode de dimensionnement de Log2RAM ou correction d’un cas particulier signalé par un testeur. Sans mécanisme de mise à jour, il fallait relancer manuellement le script après installation, qui réapplique <em>toutes</em> les optimisations, ou renoncer à l’amélioration. Appliquer les mises à jour disponibles permet de relancer volontairement chaque optimisation dont la version a changé."
},
"detection": {
"heading": "Comment les mises à jour sont détectées",
"steps": [
{
"title": "Scripts versionnés sur disque",
"body": "Chaque fonction post-installation déclare sa version dans le script (<code>scripts/post_install/auto_post_install.sh</code> et <code>scripts/post_install/customizable_post_install.sh</code>). Un scanner extrait ces versions de la source sur le disque."
},
{
"title": "Registre des versions sur l’hôte",
"body": "Lorsque l'opérateur a appliqué chaque optimisation, l'appel <code>register_tool</code> correspondant a écrit la version active dans <code>/usr/local/share/proxmenux/installed_tools.json</code>. Ce fichier est la source de la vérité pour \"ce qui est actif sur cet hôte en ce moment\"."
},
{
"title": "Monitor compare les deux versions",
"body": "Au démarrage et toutes les 24 h, Monitor compare les versions sur disque aux versions enregistrées. Chaque écart crée une entrée dans <code>/usr/local/share/proxmenux/updates_available.json</code>. Ce fichier alimente l’entrée du menu post-installation et la carte du tableau de bord Monitor."
},
{
"title": "Une notification par nouvelle version",
"body": "Dès qu’une optimisation a une mise à jour en attente, Monitor envoie une notification groupée, par exemple <em>« 4 mises à jour d’optimisations ProxMenux disponibles »</em>, avec une ligne par outil au format <code>name (vX → vY)</code>, comme pour les paquets Proxmox. Elle ne se répète pas chaque jour pour le même ensemble : seule une nouvelle version ou un nouvel outil dans la liste la déclenche à nouveau."
}
]
},
"pathA": {
"heading": "Chemin A — À partir du menu Post-Installation",
"intro": "À partir du menu principal de ProxMenux, ouvrez <strong>Paramètres après l'installation Proxmox</strong>. Lorsqu'il y a des mises à jour en attente, une nouvelle entrée <strong>Appliquer les mises à jour disponibles (N)</strong> apparaît juste au-dessus de <em>Désinstaller les optimisations</em>. Le nombre reflète combien d'optimisations ont une version plus récente sur disque que ce que l'hôte a actuellement enregistré. Lorsque tout est à jour, l'entrée n'apparaît tout simplement pas, donc le menu reste propre.",
"menuAlt": "Menu des scripts post-installation montrant Appliquer les mises à jour disponibles (N) au-dessus de Désinstaller les optimisations ; le compteur indique les optimisations dont une version plus récente est sur disque",
"menuCaption": "<em>Appliquer les mises à jour disponibles (N)</em> apparaît seulement si une optimisation a une mise à jour en attente ; l’entrée est masquée quand l’hôte est à jour.",
"checklistBody": "Sélectionner l'entrée ouvre une liste de contrôle avec chaque mise à jour en attente, chaque ligne formatée en <code>name (vX → vY)</code>. Toutes les lignes sont pré-cochées par défaut; décochez toutes les lignes que vous ne voulez pas appliquer ce tour.",
"checklistAlt": "Sélecteur Appliquer les mises à jour disponibles avec une ligne par optimisation en attente, son nom et le changement de version (actuelle → disponible). Toutes les lignes sont cochées.",
"checklistCaption": "Sélection individuelle des optimisations à mettre à jour. Le même moteur qu’Automatisé et Personnalisable réapplique chaque fonction en arrière-plan et actualise sa version enregistrée."
},
"pathB": {
"heading": "Voie B — Depuis le tableau de bord Monitor",
"intro": "Les mêmes mises à jour apparaissent dans Monitor sous <link>Paramètres → Optimisations ProxMenux</link>. La carte affiche un <strong>compteur des mises à jour</strong> en attente qui ouvre le sélecteur par optimisation. Chaque outil propose aussi sa propre action de mise à jour.",
"imageAlt": "Carte Optimisations ProxMenux dans les paramètres Monitor avec un compteur ouvrant le sélecteur par optimisation et des actions de mise à jour par outil",
"imageCaption": "La carte Optimisations de Monitor donne accès aux mises à jour via son compteur dès qu’une version plus récente est sur disque, sans accès au shell."
},
"applying": {
"heading": "Ce qui se passe lors de l’application",
"steps": [
{
"title": "Réexécute la fonction post-installation",
"body": "La fonction de l’optimisation sélectionnée est réexécutée sur l’hôte. Comme chaque fonction après installation est <strong>idempotente</strong>, la relancer ne duplique pas la configuration : elle remplace la version précédente par la nouvelle, notamment les fichiers sysctl, les fichiers complémentaires et les unités de service."
},
{
"title": "Actualise le registre",
"body": "L'appel <code>register_tool</code> à l'intérieur de la fonction écrit la nouvelle version dans <code>installed_tools.json</code>. Le scan suivant ne voit plus d'inadéquation et l'entrée mise à jour disparaît du menu et de la carte Monitor."
},
{
"title": "Pas de redémarrage sauf si la fonction le dit",
"body": "La plupart des mises à jour prennent effet immédiatement. Les mises à jour qui touchent les modules du noyau, les noms d'interface persistants ou VFIO affichent la même invitation de redémarrage qu'une nouvelle installation."
},
{
"title": "Mise à jour du registre envoyée au moniteur",
"body": "Après le lot, le menu envoie une requête POST à <code>http://127.0.0.1:8008/api/updates/post-install/scan</code> pour reconstruire <code>/usr/local/share/proxmenux/updates_available.json</code>. Une fois toutes les mises à jour appliquées, leur compteur et l’entrée conditionnelle du menu shell disparaissent sans attendre le prochain scan. La carte Optimisations reste disponible."
}
],
"jqTitle": "jq est nécessaire",
"jqBody": "La liste de contrôle Path A repose sur <code>jq</code> pour analyser les mises à jour en attente JSON. Si le <code>jq</code> manque, le flux s'éteint silencieusement — vous verrez l'entrée du menu avec un nombre mais rien ne se produirait après avoir sélectionné les lignes. Sur n'importe quelle installation Proxmox moderne <code>jq</code> est présente; si dans le doute exécuter <code>apt install -y jq</code>."
},
"differs": {
"heading": "Comment il diffère des autres chemins",
"headerPath": "Path",
"headerScope": "Portée",
"headerWhen": "Quand ça a du sens",
"rows": [
{
"pathLabel": "Automatisé",
"pathHref": "/docs/post-install/automated",
"scope": "Ré-applique <em> chaque optimisation </em> dans le paquet.",
"when": "Hôte neuf ou réapplication complète de la configuration de base d’un nœud entièrement géré."
},
{
"pathLabel": "Personnalisable",
"pathHref": "/docs/post-install/customizable",
"scope": "Choisissez parmi le catalogue complet.",
"when": "Choisir précisément les optimisations actives sur l’hôte."
},
{
"pathLabel": "appliquer les mises à jour disponibles",
"pathHref": null,
"scope": "Uniquement les optimisations dont la version sur disque a augmenté.",
"when": "Garder les optimisations installées à jour sans toucher au reste."
},
{
"pathLabel": "Désinstaller les optimisations",
"pathHref": "/docs/post-install/uninstall",
"scope": "Inverser l'optimisation et supprimer son entrée de registre.",
"when": "Annuler une modification précise."
}
]
},
"notifTitle": "Contrôle de la notification",
"notifBody": "L’événement <em>Mises à jour d’optimisations ProxMenux disponibles</em> annonce les mises à jour en attente. Activé par défaut sur chaque canal, il peut être désactivé par canal dans <link>Paramètres → Notifications</link>. Il ne se déclenche qu’une fois par ensemble distinct de mises à jour, pas à chaque scan de 24 h."
}
@@ -0,0 +1,116 @@
{
"meta": {
"title": "Post-installation : Virtualisation | Documentation ProxMenux",
"description": "Options de virtualisation dans le script post-installation personnalisable ProxMenux : installer automatiquement le bon agent invité si Proxmox fonctionne à l'intérieur d'un VM, et activer IOMMU / VFIO afin que vous puissiez passer les périphériques PCI (GPU, NIC, HBAs) à vos propres VM."
},
"header": {
"title": "Post-Installation : Virtualisation",
"section": "Paramètres post-installation de Proxmox"
},
"intro": {
"title": "Ce que cette catégorie couvre",
"body": "Deux options indépendantes. <strong>Installer l’agent invité adapté</strong> aide lorsque Proxmox fonctionne lui-même dans un autre hyperviseur. <strong>Activer la prise en charge de VFIO IOMMU</strong> intéresse la plupart des utilisateurs : active les fonctions du noyau pour attribuer directement un GPU, HBA ou une carte réseau à une VM avec des performances quasi natives."
},
"guestAgent": {
"heading": "installer l'agent invité approprié",
"intro": "Détecte l'environnement de virtualisation sur lequel s'exécute l'hôte Proxmox (en utilisant <code>systemd-detect-virt</code> et <code>dmidecode</code>) et installe le paquet d'outils invités correspondant afin que l'hyperviseur externe puisse communiquer avec Proxmox de manière propre (arrêt progressif, synchronisation d'horloge, reportage IP, etc.).",
"headerDetected": "Hôte détecté",
"headerPackage": "Paquet installé",
"rows": [
{
"detected": "QEMU / KVM",
"package": "qemu-guest-agent"
},
{
"detected": "VMware (ESXi, Workstation)",
"package": "open-vm-tools"
},
{
"detected": "VirtualBox",
"package": "virtualbox-guest-utils"
},
{
"detected": "Matériel physique (aucun)",
"package": "— non-op, rien installé"
}
],
"skipTitle": "Ignorez cette option si Proxmox fonctionne sur du matériel physique",
"skipBody": "Si Proxmox fonctionne directement sur le matériel, le cas habituel, cocher cette option ne change rien : le détecteur retourne <code>none</code> et le script quitte sans modification. L’option concerne seulement les installations où Proxmox fonctionne <em>en tant qu’invité</em> pour des tests ou des laboratoires."
},
"vfio": {
"heading": "Activer la prise en charge de VFIO IOMMU",
"intro": "Active IOMMU sur l’hôte et charge les modules permettant l’accès direct PCI (<code>vfio</code>, <code>vfio_iommu_type1</code>, <code>vfio_pci</code>). Vous pouvez alors attribuer un périphérique physique à une VM, qui y accède directement avec des performances proches du matériel natif.",
"whoTitle": "Qui en a besoin ?",
"whoItems": [
"Vous voulez attribuer directement un GPU à une VM Windows de jeu ou à une VM macOS.",
"Vous avez un 10G NIC dédié pour un pare-feu/routeur VM (OPNsense, pfSense).",
"Vous souhaitez passer un HBA directement à un TrueNAS/Unraid VM pour ZFS sur disques nus.",
"Vous prévoyez utiliser <em>Coral TPU</em>, une carte de capture, ou un dongle SDR dans un VM."
],
"whoOutro": "Si aucun de ces éléments ne s'applique, vous pouvez ignorer cette option en toute sécurité. Pour le relais vers un <strong>LXC</strong> (et non un VM), IOMMU n'est <em>pas</em> requis.",
"doesTitle": "Ce que fait ProxMenux",
"doesIntro": "La fonction tient compte du chargeur de démarrage : elle détecte ZFS (systemd-boot) ou LVM/ext4 (GRUB) et écrit dans le bon fichier. Elle est idempotente : les paramètres déjà présents ne sont pas ajoutés une seconde fois.",
"headerBoot": "Type de démarrage",
"headerFile": "Fichier touché",
"headerPost": "Étape postérieure à la mise à jour",
"bootRows": [
{
"boot": "systemd-boot (ZFS)",
"file": "/etc/kernel/cmdline",
"post": "proxmox-boot-tool refresh"
},
{
"boot": "GRUB (LVM/ext4)",
"file": "/etc/default/grub",
"post": "update-grub"
}
],
"kernelIntro": "Paramètres du noyau ajoutés:",
"modulesIntro": "Modules de noyau ajoutés au <code>/etc/modules</code>:",
"blacklistIntro": "Pilotes en conflit bloqués dans <code>/etc/modprobe.d/blacklist.conf</code> :",
"blacklistTitle": "Bloquer les pilotes GPU empêche l’utilisation du GPU par l’hôte",
"blacklistBody": "La liste de blocage empêche le noyau hôte de lier <em>tout</em> pilote GPU, pour que VFIO puisse prendre le contrôle du GPU. C’est souhaitable pour l’attribution directe à une VM, mais c’est l’<strong>opposé</strong> de ce qu’il faut pour <link>installer les pilotes NVIDIA sur l’hôte</link>, par exemple pour le transcodage LXC. Choisissez une voie par GPU :",
"pathItems": [
"<strong>GPU → VM:</strong> activez VFIO/IOMMU ici, laissez les pilotes GPU sur la liste noire.",
"<strong>GPU → LXC (ou hôte) :</strong> ignorez cette option, utilisez l’installation NVIDIA sur l’hôte et ne bloquez pas nvidia/nouveau.",
"<strong>Deux GPU :</strong> l’un peut aller à une VM, l’autre à un LXC, mais une configuration plus précise est nécessaire : lier une seule carte à <code>vfio-pci</code> par son identifiant PCI. La liste de blocage par défaut est trop large ; modifiez ensuite <code>blacklist.conf</code>."
],
"acsTitle": "À propos de pcie_acs_override — comprenez ce que vous activez",
"acsBody": "<code>pcie_acs_override=downstream,multifunction</code> assouplit la vérification PCIe Access Control Services. Le noyau peut alors séparer des groupes IOMMU signalés comme indivisibles par le firmware, parfois seul moyen d’attribuer un périphérique sans tout le groupe. En contrepartie, <strong>l’isolation entre périphériques est réduite</strong> : une VM malveillante ou compromise avec accès direct dispose d’une plus grande surface d’attaque via DMA. Acceptable en laboratoire domestique, à bien évaluer pour des charges non fiables. Si inutile, retirez le paramètre de <code>/etc/kernel/cmdline</code> ou <code>/etc/default/grub</code> après le script et relancez la mise à jour du chargeur de démarrage.",
"rebootTitle": "Redémarrage nécessaire",
"rebootBody": "IOMMU, les modules VFIO et la liste de blocage prennent effet après régénération d’initramfs et redémarrage. Le script exécute <code>update-initramfs -u -k all</code>, actualise le chargeur de démarrage et indique qu’un redémarrage est nécessaire pour que Personnalisable le propose à la fin.",
"verifyTitle": "Vérification après redémarrage",
"revertTitle": "Réversible depuis le menu Désinstaller",
"revertBody": "<link>Désinstaller les optimisations</link> annule toutes les modifications : retire les paramètres IOMMU de <code>/etc/kernel/cmdline</code> ou GRUB, les modules VFIO de <code>/etc/modules</code> et les entrées de blocage des pilotes, puis reconstruit initramfs. Un redémarrage applique le retour en arrière."
},
"related": {
"heading": "Voir aussi",
"items": [
{
"label": "Ajouter GPU à VM (Passthrough)",
"href": "/docs/hardware/gpu-vm-passthrough",
"tail": "— l'étape suivante naturelle une fois IOMMU + VFIO activé."
},
{
"label": "Ajouter le contrôleur ou NVMe au VM",
"href": "/docs/disk-manager/add-controller-nvme-vm",
"tail": "— la même infrastructure de transmission pour les contrôleurs de stockage."
},
{
"label": "commandes GPU Passthrough",
"href": "/docs/help-info/gpu-commands",
"tail": "— Référence de vérification IOMMU."
},
{
"label": "Désinstaller les optimisations",
"href": "/docs/post-install/uninstall",
"tail": " — annuler proprement IOMMU / VFIO."
},
{
"label": "Post-installation personnalisable",
"href": "/docs/post-install/customizable",
"tail": "— retour au menu parent."
}
]
}
}
+152
View File
@@ -0,0 +1,152 @@
{
"meta": {
"title": "Fail2Ban | Documentation ProxMenux",
"description": "Installez Fail2Ban avec trois jails optimisés pour Proxmox (SSH agressif, Proxmox UI 8006, ProxMenux Monitor 8008). Inclut le correctif journald MaxLevelStore, des services de journalisation personnalisés pour plus de fiabilité, un backend nftables/iptables détecté automatiquement et le renforcement SSH MaxAuthTries.",
"ogTitle": "Fail2Ban | Documentation ProxMenux",
"ogDescription": "Protection contre la force brute pour SSH et les interfaces web Proxmox, avec des correctifs journald et backend propres à Proxmox."
},
"header": {
"title": "Fail2Ban",
"description": "Installe Fail2Ban pour Proxmox : trois jails (SSH agressif, interface Proxmox sur 8006, ProxMenux Monitor sur 8008 et proxy inverse), correction du niveau journald pour conserver les événements SSH, deux services copiant le journal vers des fichiers afin de contourner un problème connu du backend systemd, détection du backend de pare-feu et durcissement SSH avec MaxAuthTries.",
"section": "Sécurité"
},
"intro": {
"title": "Ce que ça fait",
"body": "Installe Fail2Ban depuis les dépôts Debian et écrit une configuration Proxmox protégeant immédiatement SSH, l'interface web Proxmox et ProxMenux Monitor. Une installation existante est détectée et un menu de gestion propose de réinstaller ou de supprimer."
},
"firstLaunch": {
"heading": "Boîte de dialogue Premier lancement",
"body": "Sans Fail2Ban installé, le script résume dans un dialogue ce qu'il va installer et configurer. Annuler quitte sans modification ; confirmer lance l'installation.",
"imageAlt": "Confirmation de Fail2Ban avec les trois jails, correction de journald et durcissement SSH"
},
"jails": {
"heading": "Les trois jails",
"headerJail": "Jail",
"headerProtects": "Protège",
"headerRetries": "Tentatives / Fenêtre",
"headerBan": "Durée de blocage",
"rows": [
{
"jail": "[sshd]",
"protects": "SSH (mode agressif — couvre ddos, mode, normal)",
"retries": "2 / 60 min",
"ban": "9 heures"
},
{
"jail": "[proxmox]",
"protects": "UI web Proxmox (port 8006)",
"retries": "3 / 10 min",
"ban": "1 heure"
},
{
"jail": "[proxmenux]",
"protects": "ProxMenux Monitor (port 8008 + http/https proxy inverse)",
"retries": "3 / 10 min",
"ban": "1 heure"
}
],
"outro": "Par défaut mondial à partir de <code>jail.local</code>: <code>ignoreip = 127.0.0.1/8 ::1</code>, <code>ignoreself = true</code>,<code> bantime = 86400</code> (24h pour les prisons qui ne le remplacent pas), <code>maxretry = 2</code>, <code>findtime = 1800</code>."
},
"journald": {
"heading": "Pourquoi la correction de journald est importante",
"intro": "Proxmox fournit <code>/etc/systemd/journald.conf</code> avec <codeNw>MaxLevelStore=warning</codeNw>. journald supprime les messages de niveau <em>inférieur</em> à warning avant de les stocker. SSH et PAM signalent les échecs d'authentification aux niveaux <em>info</em> / <em>notice</em>, donc :",
"diagram": {
"sshLabel": "SSH / PAM",
"sshDetail": "échec d'authentification\n(niveau info / notice)",
"journaldLabel": "journald",
"journaldDetail": "MaxLevelStore=warning\n→ événement ignoré sans avertissement",
"fail2banLabel": "Fail2Ban",
"fail2banDetail": "ne voit rien\n→ n'interdit jamais rien",
"arrowLabel": "Proxmox par défaut"
},
"afterDiagram": "L'installateur détecte cela et écrit un drop-in à <codeXs>/etc/systemd/journald.conf.d/proxmenux-loglevel.conf</codeXs> élevant à la fois <code>MaxLevelStore</code> et <code>MaxLevelSyslog</code> à <code>info</code>:",
"code": "[Journal]\nMaxLevelStore=info\nMaxLevelSyslog=info",
"outro": "Puis redémarre <code>systemd-journald</code>. Le drop-in est supprimé lors de la désinstallation, ce qui restaure le Proxmox original par défaut."
},
"loggers": {
"heading": "Pourquoi deux services d'enregistreur personnalisé",
"intro1": "Fail2Ban peut lire directement le journal systemd (<code>backend = systemd</code>), mais ce backend présente sur Proxmox des problèmes connus avec les processus de travail de <code>pvedaemon</code> : les événements d'authentification apparaissent dans le journal sans être toujours détectés. Le problème concerne aussi parfois <code>sshd</code>.",
"intro2": "ProxMenux crée deux petits services systemd qui suivent les unités concernées avec <code>journalctl -f</code> et ajoutent chaque ligne à un fichier. Fail2Ban lit ces fichiers avec le fiable <code>backend = auto</code> (mode fichier) :",
"headerService": "Services",
"headerSource": "Unité source",
"headerOutput": "Fichier de sortie",
"rows": [
{
"service": "proxmox-auth-logger.service",
"source": "pvedaemon.service",
"output": "/var/log/proxmox-auth.log"
},
{
"service": "ssh-auth-logger.service",
"source": "ssh.service",
"output": "/var/log/ssh-auth.log"
}
],
"outro": "Les deux services sont déclarés <code>PartOf=fail2ban.service</code> donc ils redémarrent avec Fail2Ban et s'arrêtent avec elle. Mode 640 appartenant à <code>root:adm</code> dans les fichiers journaux. Le troisième journal utilisé par la prison <code>[proxmenux]</code> (<code>/var/log/proxmenux-auth.log</code>) est écrit directement par l'application ProxMenux Monitor Flask — aucun service d'enregistreur nécessaire pour celui-ci."
},
"backend": {
"heading": "Détection du backend de pare-feu",
"intro": "L'installateur sonde l'hôte : si <code>nft list ruleset</code> fonctionne, il choisit <code>nftables</code> comme mesure d'interdiction. Sinon, il revient à <code>iptables-multiport</code> / <code>iptables-allports</code>. Le choix est écrit dans <code>jail.local</code> :",
"code": "# nftables host\nbanaction = nftables\nbanaction_allports = nftables[type=allports]\n\n# iptables host (fallback)\nbanaction = iptables-multiport\nbanaction_allports = iptables-allports"
},
"hardening": {
"heading": "Durcissement SSH : MaxAuthTries",
"intro": "Le contrôle Lynis <strong>SSH-7408</strong> recommande <code>MaxAuthTries 3</code> dans <code>sshd_config</code>. La jail SSH utilise <code>maxretry = 2</code> pour bloquer après des échecs répétés ; MaxAuthTries limite les tentatives dans une connexion. Ce réglage SSH ajoute une défense en profondeur, y compris lorsque Fail2Ban est arrêté pour maintenance.",
"installerIntro": "L'installateur:",
"items": [
"Lit la valeur actuelle <code>MaxAuthTries</code> (ou par défaut 6 si elle est absente).",
"Enregistre-le dans <code>/usr/local/share/proxmenux/sshd_maxauthtries_backup</code>.",
"Modifie <code>sshd_config</code> sur place : remplace la ligne existante, décommente une ligne commentée ou ajoute une nouvelle ligne.",
"Recharge <code>sshd</code> (recharger, pas redémarrer, pour garder les sessions existantes en vie)."
],
"outro": "Lors de la désinstallation, la valeur originale enregistrée est restaurée et <code>sshd</code> est rechargée."
},
"manage": {
"heading": "Gérer une installation existante",
"intro": "Si Fail2Ban est déjà installé lorsque vous ouvrez le menu, le script le détecte et affiche un menu de gestion au lieu de ré-exécuter l'installateur:",
"headerAction": "Décision",
"headerWhat": "Ce qu'il fait",
"rows": [
{
"action": "Réinstaller",
"what": "Relance l'installation complète et réécrit toutes les jails avec les valeurs actuelles de ProxMenux. À utiliser lorsqu'une mise à jour modifie les recommandations."
},
{
"action": "Supprimer",
"what": "Arrête fail2ban et les deux services d'enregistrement, purge le package apt, supprime tous les fichiers jail/filtre, supprime le drop-in journald (restauration de la valeur par défaut de Proxmox) et restaure l'original SSH MaxAuthTries."
}
]
},
"verify": {
"heading": "Vérifiez que ça marche.",
"intro": "Après l'installation, commandes utiles de l'hôte:",
"code": "# Service status and version\nsystemctl status fail2ban\nfail2ban-client --version\n\n# All active jails\nfail2ban-client status\n\n# Detail on one jail\nfail2ban-client status sshd\nfail2ban-client status proxmox\nfail2ban-client status proxmenux\n\n# Currently banned IPs in a jail\nfail2ban-client status sshd | grep \"Banned IP\"\n\n# Manually unban an IP (use this if you ban yourself)\nfail2ban-client unban 192.0.2.10\n\n# Tail the auth logs Fail2Ban watches\ntail -f /var/log/ssh-auth.log\ntail -f /var/log/proxmox-auth.log\ntail -f /var/log/fail2ban.log"
},
"troubleshoot": {
"heading": "Dépannage",
"neverBansTitle": "Fail2Ban fonctionne mais n'interdit jamais rien",
"neverBansBody": "Vérifiez que <code>tail -f /var/log/ssh-auth.log</code> reçoit une entrée après une tentative SSH avec un mauvais mot de passe depuis une autre machine. Sinon, examinez <code>systemctl status ssh-auth-logger.service</code>. Si le service est actif, consultez les événements récents avec <code>journalctl -u ssh.service -n 50 --no-pager -p info</code> et vérifiez que le complément journald autorise le niveau <em>info</em>.",
"monitorEmptyTitle": "La jail ProxMenux Monitor ne contient aucune entrée malgré des connexions échouées",
"monitorEmptyBody": "Le <code>[proxmenux]</code> jail lit <code>/var/log/proxmenux-auth.log</code>, qui est écrit par l'application ProxMenux Monitor Flask — et non par un enregistreur journald. Si vous n'exécutez pas le moniteur, le fichier reste vide et le jail ne se déclenche jamais. C'est prévu ; la configuration jail est inoffensive. Si vous exécutez le moniteur et que le journal est vide, vérifiez la configuration de journalisation Flask.",
"selfBanTitle": "Je me suis bloqué moi-même",
"selfBanIntro": "À partir d'une console / IPMI / iKVM (ou d'une autre IP sur liste blanche):",
"selfBanCode": "fail2ban-client unban '<'YOUR_IP'>'\n\n# To prevent it next time, edit /etc/fail2ban/jail.local and add your IP:\nignoreip = 127.0.0.1/8 ::1 192.168.1.0/24 203.0.113.42\n\n# Then reload\nfail2ban-client reload",
"aptFailTitle": "Échec d'apt-get : ''Unable to locate package fail2ban''",
"aptFailBody": "Les dépôts Debian manquent sur l'hôte (fréquent sur les installations Proxmox minimales). L'installateur crée <code>/etc/apt/sources.list.d/debian.sources</code> avec le bon nom de code (<code>bookworm</code> / <code>trixie</code>), puis réessaie. Si cela échoue encore, vérifiez <code>VERSION_CODENAME</code> dans <code>/etc/os-release</code> et l'accessibilité du dépôt.",
"lockoutTitle": "SSH me verrouille après l'installation",
"lockoutBody": "L'installateur définit <code>MaxAuthTries=3</code>. Si votre gestionnaire de mot de passe / agent récupère plusieurs clés, vous pouvez dépasser cela sur une seule tentative de connexion. Limiter les clés offertes : <code>ssh -o IdentitiesOnly=yes -i ~/.ssh/specific_key user@host</code>. Ou augmenter temporairement <code>MaxAuthTries</code> en <code>sshd_config</code> pendant le débogage."
},
"files": {
"heading": "Fichiers écrits",
"code": "/etc/fail2ban/jail.local # global defaults + [sshd]\n/etc/fail2ban/jail.d/proxmox.conf # [proxmox]\n/etc/fail2ban/jail.d/proxmenux.conf # [proxmenux]\n/etc/fail2ban/filter.d/proxmox.conf # auth-failure regex for pvedaemon\n/etc/fail2ban/filter.d/proxmenux.conf # auth-failure regex for Monitor\n/etc/systemd/system/proxmox-auth-logger.service # journal → file (pvedaemon)\n/etc/systemd/system/ssh-auth-logger.service # journal → file (sshd)\n/etc/systemd/journald.conf.d/proxmenux-loglevel.conf # MaxLevelStore=info\n/etc/ssh/sshd_config # MaxAuthTries=3 (in-place edit)\n/var/log/proxmox-auth.log # written by logger service\n/var/log/ssh-auth.log # written by logger service\n/var/log/proxmenux-auth.log # written by Monitor Flask app\n/usr/local/share/proxmenux/sshd_maxauthtries_backup # for restore on uninstall"
},
"related": {
"heading": "Autres",
"monitorLabel": "ProxMenux Monitor → Onglet Sécurité",
"monitorTail": " — installation depuis le tableau de bord, état des jails en direct, IP bloquées et réglage des tentatives et de la durée de blocage par jail dans le navigateur.",
"lynisLabel": "Lynis",
"lynisTail": " — lancer un audit avant et après pour vérifier que le contrôle SSH-7408 est satisfait.",
"securityLabel": "Aperçu de la sécurité",
"securityTail": "— retour à l'aperçu de la section."
}
}
+70
View File
@@ -0,0 +1,70 @@
{
"meta": {
"title": "Sécurité Proxmox — Fail2Ban et audit de durcissement Lynis | ProxMenux",
"description": "Deux outils de sécurité installables pour Proxmox VE : Fail2Ban (prévention des intrusions pour SSH, l'interface web Proxmox et ProxMenux Monitor) et Lynis (audit de sécurité et de durcissement installé depuis le dépôt officiel GitHub).",
"ogTitle": "Sécurité Proxmox — Fail2Ban et audit de durcissement Lynis",
"ogDescription": "Fail2Ban et Lynis pour Proxmox VE : prévention des intrusions et audit de durcissement, installés et gérés par ProxMenux.",
"twitterTitle": "Sécurité Proxmox | ProxMenux",
"twitterDescription": "Fail2Ban et Lynis pour Proxmox VE : prévention des intrusions et audit de durcissement."
},
"header": {
"title": "Sécurité",
"description": "Deux outils complémentaires pour Proxmox VE : défense active (Fail2Ban bloque les IP attaquant SSH ou les interfaces web) et audit local (Lynis cherche les lacunes de durcissement et donne un score de 0 à 100). Chaque outil possède son menu d'installation et de gestion, qui détecte une installation existante avant toute action.",
"section": "Sécurité"
},
"intro": {
"title": "Défense active et audit local",
"body": "Ils répondent à des questions différentes. <strong>Fail2Ban</strong> répond à <em>« Sommes-nous attaqués en ce moment ? »</em> en surveillant les journaux d'authentification et en bloquant les IP responsables. <strong>Lynis</strong> répond à <em>« Quel est le niveau de durcissement de cet hôte ? »</em> par un audit ponctuel avec des recommandations concrètes. Utilisez les deux : Lynis indique les améliorations, Fail2Ban réagit aux attaques en cours."
},
"opening": {
"heading": "Ouverture du menu",
"body": "Dans le menu principal ProxMenux, sélectionnez <strong>Sécurité</strong>. Voici ce qui apparaît :",
"imageAlt": "Menu de sécurité avec options Fail2Ban et Lynis"
},
"pick": {
"heading": "Choisissez votre outil",
"body": "Les deux outils sont indépendants : installez-en un, les deux ou aucun. Chaque carte ci-dessous mène à la section détaillant cet outil."
},
"cards": {
"fail2ban": {
"title": "Fail2Ban",
"body": "Prévention active des intrusions. Surveille les journaux d'authentification SSH et web et bloque les IP après des échecs répétés.",
"bullets": [
"Trois jails : SSH, interface Proxmox (8006), ProxMenux Monitor (8008)",
"Corrige les paramètres journald de Proxmox qui bloquent les journaux d'authentification",
"Auto-détecte nftables / iptables",
"SSH durcissement: MaxAuthTries=3 (recommandation Lynis)"
]
},
"lynis": {
"title": "Lynis",
"body": "Auditeur de sécurité local. Analyse l'hôte et affiche un score de durcissement et des conseils concrets pour corriger les problèmes.",
"bullets": [
"Installé depuis le dépôt officiel CISOfy sur GitHub (dernière version)",
"Score de durcissement 0–100 et liste des avertissements et suggestions",
"Audit et mise à jour depuis le menu",
"Conçu en lecture seule : ne modifie jamais le système"
]
}
},
"workflowTip": {
"title": "Flux de travail qui utilise les deux",
"body": "Lancez d'abord Lynis pour connaître le score initial et les recommandations principales. Appliquez les corrections souhaitées. Installez ensuite Fail2Ban : il met automatiquement en place la protection SSH contre la force brute et ajuste <code>MaxAuthTries</code> dans <code>sshd_config</code> pour satisfaire le contrôle SSH-7408. Relancez Lynis pour vérifier l'amélioration."
},
"fail2banSection": {
"heading": "Fail2Ban",
"body": "ProxMenux installe Fail2Ban avec une configuration adaptée à Proxmox. En plus de la jail SSH standard, il protège l'interface web Proxmox et ProxMenux Monitor. Il contourne deux problèmes spécifiques : un paramètre journald supprimant les événements d'authentification et un problème du backend systemd empêchant la lecture fiable de certaines sources du journal. La page détaillée explique l'installation, les trois jails, la correction de journald, le durcissement SSH et le dépannage.",
"optionTitle": "Fail2Ban — installer et gérer",
"optionDescription": "Trois jails préconfigurées (sshd agressif, interface Proxmox sur 8006, ProxMenux Monitor sur 8008 et proxy inverse), détection de nftables/iptables, correction de journald et durcissement SSH avec MaxAuthTries."
},
"lynisSection": {
"heading": "Lynis",
"body": "ProxMenux clone Lynis depuis <code>github.com/CISOfy/lynis</code> dans <code>/opt/lynis</code> et le rend accessible par <code>/usr/local/bin/lynis</code>. Le paquet Debian est volontairement évité car il accuse plusieurs versions majeures de retard sur le projet original. La page détaillée explique installation, audit, mise à jour, désinstallation, lecture du rapport et traitement des résultats.",
"optionTitle": "Lynis — installation, audit et gestion",
"optionDescription": "Installe le dernier Lynis de la repo officielle CISOfy GitHub (pas l'ancien paquet Debian), exécute des audits système avec score de durcissement, et des mises à jour via git pull."
},
"componentStatus": {
"heading": "État des composantes",
"body": "Les deux installateurs enregistrent leur état en <code>/usr/local/share/proxmenux/components_status.json</code> dans la catégorie <code>security</code>. ProxMenux utilise ce fichier pour décider s'il faut afficher l'installation ou le menu de gestion lors d'exécutions ultérieures, et les mêmes données alimentent les tableaux de bord dans le ProxMenux Monitor lorsqu'elles sont présentes."
}
}
+170
View File
@@ -0,0 +1,170 @@
{
"meta": {
"title": "Lynis | Documentation ProxMenux",
"description": "Installez la dernière version de Lynis depuis le dépôt officiel CISOfy sur GitHub, lancez un audit avec score de durcissement de 0 à 100 et mettez à jour par git pull. Auditeur en lecture seule, sans modification du système.",
"ogTitle": "Lynis | Documentation ProxMenux",
"ogDescription": "Installez et exécutez Lynis sur Proxmox VE. Installation depuis le dépôt GitHub officiel, audit et mise à jour."
},
"header": {
"title": "Lynis",
"description": "Clone la dernière version de Lynis depuis le dépôt officiel CISOfy sur GitHub, la rend disponible par /usr/local/bin/lynis et propose audit, mise à jour, réinstallation et désinstallation dans le menu. L'auditeur est en lecture seule : il rapporte sans modifier le système.",
"section": "Sécurité"
},
"intro": {
"title": "Ce que ça fait",
"body": "Installe Lynis, l'auditeur de sécurité libre de CISOfy, depuis son dépôt GitHub dans <code>/opt/lynis</code> et crée un script de lancement dans <code>/usr/local/bin/lynis</code> pour le rendre accessible dans <code>PATH</code>. Une installation existante ouvre un menu d'audit, mise à jour, réinstallation ou suppression."
},
"manageMenu": {
"heading": "Menu de gestion (après installation)",
"intro": "Une fois que Lynis est installé, chaque invocation subséquente ouvre le menu de gestion au lieu de relancer l'installateur. De là vous lancez un audit, mise à jour via git pull, réinstaller ou désinstaller:",
"imageAlt": "Lynis menu de gestion avec audit, mise à jour, réinstaller et supprimer les options"
},
"whyUpstream": {
"heading": "Pourquoi le dépôt officiel GitHub plutôt qu'apt",
"intro": "Debian fournit Lynis via apt, mais le paquet accuse généralement plusieurs versions majeures de retard. Les nouveaux contrôles, correctifs pour de nouveaux vecteurs d'attaque et recommandations améliorées arrivent d'abord sur GitHub. Lynis est un script shell autonome, sans compilation ni dépendance d'installation au-delà de <code>git</code> ; cloner le dépôt est donc la méthode recommandée par CISOfy.",
"headerSource": "Source",
"headerPath": "Install path",
"headerUpdate": "Méthode de mise à jour",
"headerFresh": "Actualité de la version",
"rows": [
{
"sourceRich": "<strong>ProxMenux (ce script)</strong>",
"path": "/opt/lynis/",
"update": "git pull (depuis le menu)",
"fresh": "Dernière version du projet original"
},
{
"sourceRich": "<strong>Debian apt</strong>",
"path": "/usr/bin/lynis",
"update": "apt upgrade",
"fresh": "Souvent mois / années de retard"
}
]
},
"install": {
"heading": "Comment fonctionne l'installation",
"node1Label": "github.com/CISOfy/lynis",
"node1Detail": "git clone\n(installer git d'abord si nécessaire)",
"node2Label": "/opt/lynis/",
"node2Detail": "dépôt complet\ny compris le script ./lynis",
"node3Label": "/usr/local/bin/lynis",
"node3Detail": "script de lancement :\ncd /opt/lynis && ./lynis $@",
"outro": "Le lanceur est nécessaire : Lynis doit être exécuté depuis son propre répertoire pour charger les chemins relatifs des plugins et des profils. Le lanceur masque ce détail et permet à <code>lynis audit system</code> de fonctionner depuis n'importe quel répertoire."
},
"detection": {
"heading": "Voies de détection",
"intro": "Avant d'afficher le menu, le script vérifie trois emplacements pour déterminer si Lynis est déjà présent :",
"items": [
"<code>/usr/local/bin/lynis</code> — enveloppe installée par ProxMenux",
"<code>/opt/lynis/lynis</code> — chemin direct (au cas où l'emballage serait enlevé)",
"<code>/usr/bin/lynis</code> — version apt-installée, si l'utilisateur l'a installé de cette façon précédemment"
],
"outro": "Si un de ces chemins existe, le menu de gestion s'ouvre. Le script ne désinstalle <strong>pas</strong> un Lynis installé par apt, uniquement celui qu'il gère dans <code>/opt/lynis</code> et son lanceur."
},
"audit": {
"heading": "Exécuter un audit",
"intro": "Dans le menu de gestion, choisissez <strong>Lancer l'audit de sécurité maintenant</strong>. Cela revient à exécuter :",
"code": "lynis audit system --no-colors",
"outro": "L'audit prend de 30 secondes à quelques minutes selon la taille de l'hôte. La sortie apparaît directement dans le terminal, sans animation d'attente. Lynis classe les contrôles par catégorie et marque chaque test <ok>[ OK ]</ok>, <warn>[ WARNING ]</warn> ou <sugg>[ SUGGESTION ]</sugg>. Le résumé final affiche les chiffres principaux :",
"summary": "================================================================================\n\n Lynis security scan details:\n\n Hardening index : 76 [############ ]\n Tests performed : 247\n Plugins enabled : 0\n\n Components:\n - Firewall [V]\n - Malware scanner [X]\n\n Lynis modules:\n - Compliance status [?]\n - Security audit [V]\n - Vulnerability scan [V]\n\n================================================================================"
},
"report": {
"heading": "Lire le rapport",
"intro": "Les deux sections importantes sont <strong>Avertissements</strong> (les choses que vous devriez fixer bientôt) et <strong>Suggestions</strong> (recommandations pour améliorer le durcissement). Chaque élément porte un ID de contrôle comme <code>SSH-7408</code> — utile lors de la recherche des documents Lynis pour la justification et la correction.",
"headerMarker": "Marqueur",
"headerMeaning": "Signification",
"headerAction": "Décision",
"rows": [
{
"markerRich": "<strong>OK</strong>",
"meaning": "Essai réussi",
"action": "Rien"
},
{
"markerRich": "<strong>WARNING</strong>",
"meaning": "Problème réel, correction recommandée",
"action": "Lire la description du contrôle, planifier une correction"
},
{
"markerRich": "<strong>SUGGESTION</strong>",
"meaning": "Amélioration du durcissement disponible",
"action": "Appliquer si elle correspond à votre modèle de menace"
}
],
"outro": "Le rapport complet et les données lisibles par machine sont écrits à <code>/var/log/lynis.log</code> et <code>/var/log/lynis-report.dat</code> par Lynis lui-même."
},
"pairFail2ban": {
"title": "À combiner avec Fail2Ban",
"body": "SSH-7408 (MaxAuthTries) est l'un des avertissements les plus courants. L'installation de <link>Fail2Ban</link> à partir de ProxMenux l'élimine automatiquement parce que l'installateur définit <code>MaxAuthTries=3</code> dans le cadre de son processus de durcissement SSH. Lancez Lynis pour confirmer que l'avertissement a disparu."
},
"update": {
"heading": "Mettre à jour Lynis",
"body": "Dans le menu, <strong>Mettre Lynis à jour vers la dernière version</strong> exécute <code>git pull --quiet</code> dans <code>/opt/lynis</code>. Si le répertoire n'est pas une copie de travail Git, par exemple après une copie manuelle des fichiers, le script réinstalle entièrement."
},
"reinstall": {
"heading": "Réinstaller / désinstaller",
"headerAction": "Décision",
"headerWhat": "Ce qu'il fait",
"rows": [
{
"actionRich": "<strong>Réinstaller</strong>",
"whatRich": "Supprime <code>/opt/lynis</code>, clone à nouveau depuis GitHub et recrée le lanceur. À utiliser si la copie locale est endommagée."
},
{
"actionRich": "<strong>Supprimer</strong>",
"whatRich": "Supprime <code>/opt/lynis</code> et <code>/usr/local/bin/lynis</code>. Conserve les journaux <code>/var/log/lynis*</code> comme historique des audits. Un Lynis installé par apt dans <code>/usr/bin/lynis</code> reste intact."
}
]
},
"cli": {
"heading": "Options utiles CLI",
"intro": "Une fois installé, Lynis peut être invoqué directement à partir d'un shell avec des options supplémentaires non exposées par le menu:",
"code": "lynis show version # version + build date\nlynis show commands # list every available command\nlynis show details TEST-ID # explain a specific control\nlynis audit system --quick # skip slow tests (e.g. malware scan)\nlynis audit system --pentest # treat host as untrusted (more aggressive)\nlynis update info # check if a newer Lynis is available\n\n# Filter the report log for just the warnings\ngrep \"Warning\" /var/log/lynis.log\n\n# Same, for suggestions only\ngrep \"Suggestion\" /var/log/lynis.log"
},
"troubleshoot": {
"heading": "Dépannage",
"cloneTitle": "git clone échoue lors de l'installation",
"cloneBody": "L'hôte a besoin d'un accès réseau et DNS pour atteindre <code>github.com</code>. Depuis une console : <code>curl -sI https://github.com</code> et <code>git ls-remote https://github.com/CISOfy/lynis.git</code> révèlent l'erreur réelle (DNS, TLS, proxy, repo URL). Si un proxy est requis, définissez <code>https_proxy</code> dans l'environnement avant de ré-exécuter le menu.",
"notFoundTitle": "lynis: commande introuvable après installation",
"notFoundIntro": "Le lanceur <code>/usr/local/bin/lynis</code> n'a pas été créé ou a été supprimé. La solution la plus rapide est de réinstaller depuis le menu. Correction manuelle :",
"notFoundCode": "cat > /usr/local/bin/lynis <<'EOF'\n#!/bin/bash\ncd /opt/lynis && ./lynis \"$@\"\nEOF\nchmod +x /usr/local/bin/lynis",
"sshTitle": "L'audit affiche \"Warning: Test SSH-7408 — MaxAuthTries set incorrectly\"",
"sshIntro": "Le démon SSH permet trop de tentatives d'auth par connexion. Soit installer <link>Fail2Ban</link> à partir de ProxMenux (qui définit <code>MaxAuthTries=3</code> automatiquement) soit éditer <code>/etc/ssh/sshd_config</code> à la main:",
"sshCode": "sed -i 's/^#?MaxAuthTries.*/MaxAuthTries 3/' /etc/ssh/sshd_config\nsystemctl reload sshd",
"scoreTitle": "Le score a baissé après une mise à niveau Proxmox",
"scoreBody": "Exécutez <code>lynis update info</code> d'abord — une mise à jour de Lynis peut avoir ajouté de nouvelles commandes qui annoncent la configuration existante. Mettre à jour Lynis dans le menu, revérifier et traiter des nouvelles constatations."
},
"files": {
"heading": "Fichiers écrits",
"code": "/opt/lynis/ # full Lynis git checkout\n/usr/local/bin/lynis # wrapper script (cd + exec)\n/var/log/lynis.log # human-readable audit log (Lynis itself)\n/var/log/lynis-report.dat # machine-readable report (Lynis itself)"
},
"sample": {
"heading": "Exemple de rapport",
"intro": "ProxMenux Monitor produit pour chaque exécution de Lynis un PDF de plusieurs pages depuis l'<link>onglet Sécurité</link>. La première page résume score de durcissement, informations système et état de sécurité. Les suivantes détaillent les avertissements, les suggestions classées par impact et l'inventaire des paquets utilisé lors de l'audit.",
"imageAlt": "Première page du rapport d'audit de sécurité de Lynis PDF — résumé avec l'index de durcissement 71/100, bloc d'information système, et vue d'ensemble de la posture de sécurité avec pare-feu, scanner de malware et les paquets installés",
"captionPrefix": "Première page d'un exemple de rapport. Le PDF complet (",
"captionLink": "échantillon",
"captionSuffix": ") continue avec des avertissements détaillés, des suggestions et la liste des paquets installés.",
"cli": "Sur le côté CLI les mêmes données sont dans <code>/var/log/lynis-report.dat</code> (fichier plat lisible par machine) et <code>/var/log/lynis.log</code> (le journal d'exécution lisible par l'homme). Le PDF est généré sur demande par ProxMenux Monitor — l'exécution de <code>lynis</code> à partir de la ligne de commande n'en produit pas."
},
"related": {
"heading": "Autres",
"items": [
{
"href": "/docs/monitor/dashboard/security",
"label": "ProxMenux Monitor → Onglet Sécurité",
"tail": "— exécuter l'audit, parcourir les rapports historiques et télécharger le PDF directement à partir du tableau de bord."
},
{
"href": "/docs/security/fail2ban",
"label": "Fail2Ban",
"tailRich": "— met en œuvre la protection de la force brute SSH que recommande Lynis."
},
{
"href": "/docs/security",
"label": "Aperçu de la sécurité",
"tail": "— retour à l'aperçu de la section."
}
]
}
}
@@ -0,0 +1,169 @@
{
"meta": {
"title": "HTTPS pour ProxMenux Monitor — certificat de l'hôte Proxmox ou chemins personnalisés | ProxMenux",
"description": "Servez ProxMenux Monitor en HTTPS avec le certificat de l'hôte Proxmox (détecté automatiquement, y compris le certificat Let’s Encrypt installé via ACME de Proxmox) ou un certificat personnalisé à un emplacement quelconque sur disque.",
"ogTitle": "HTTPS pour ProxMenux Monitor — Hôte Proxmox ou certificat personnalisé",
"ogDescription": "Activer HTTPS sur le port 8008 avec le certificat hôte Proxmox ou toute paire de .pem / .key personnalisée."
},
"header": {
"title": "HTTPS pour ProxMenux Monitor",
"description": "Activez HTTPS pour Monitor sur le port 8008 avec le certificat de l'hôte Proxmox détecté automatiquement ou un certificat personnalisé sur disque. L'option Proxmox privilégie le certificat ACME, s'il existe, et réutilise Let’s Encrypt géré par Proxmox sans tâche de renouvellement supplémentaire.",
"section": "Sécurité"
},
"intro": {
"title": "Ce que cette page couvre",
"body": "Comment changer le moniteur de HTTP à HTTPS dans le panneau Paramètres → Sécurité, ce que chaque source de certificat pointe en fait sur le disque, comment l'option Proxmox se comporte quand l'hôte a un cert Let's Encrypt et comment définir des chemins personnalisés si vous gérez des certs en dehors de Proxmox."
},
"wheresetting": {
"heading": "Emplacement du réglage",
"body": "Ouvrez Monitor et allez dans <strong>Paramètres → Sécurité → HTTPS / SSL</strong>. Le panneau affiche HTTP ou HTTPS et, si HTTPS est désactivé, les sources de certificats détectées.",
"imageAlt": "Paramètres → Sécurité → Panneau HTTPS / SSL dans le moniteur montrant l'état HTTPS-off, le certificat Proxmox détecté automatiquement (sujet, émetteur, expiration) et l'option Utiliser un certificat personnalisé",
"caption": "Panneau Paramètres → Sécurité → HTTPS / SSL avant activation. Monitor affiche le certificat utilisé par Proxmox et permet de le choisir en un clic."
},
"twoways": {
"heading": "Deux façons d'activer HTTPS",
"proxmox": {
"title": "Utiliser le certificat Proxmox",
"summary": "Un clic : Monitor réutilise le certificat présenté par Proxmox VE sur le port 8006.",
"items": [
"Détecté automatiquement, aucun chemin à saisir",
"Privilégie le certificat ACME s'il existe, sinon le certificat autosigné par défaut",
"Proxmox renouvelle ; Monitor valide et charge le certificat à la prochaine nouvelle connexion TLS"
]
},
"custom": {
"title": "Utiliser un certificat personnalisé",
"summaryRich": "Pointez le moniteur sur une paire <code>.pem</code> / <code>.key</code> n'importe où sur le disque.",
"items": [
"Chemins absolus seulement (le processus Monitor doit pouvoir lire les deux)",
"Utile lorsque les certificats proviennent de <code>certbot</code>, <code>acme.sh</code> ou d'un wildcard",
"Vous gérez le renouvellement : redémarrez Monitor après modification des fichiers"
]
}
},
"proxmoxCert": {
"heading": "Certificat Proxmox — ce qu'il indique en réalité à",
"intro": "Proxmox VE conserve deux paires de certificats dans <code>/etc/pve/local/</code> :",
"table": {
"headers": {
"file": "Fichier",
"origin": "Origine",
"when": "Lorsque le moniteur l'utilise"
},
"rows": [
{
"fileRich": "<code>pveproxy-ssl.pem</code><br /><code>pveproxy-ssl.key</code>",
"originRich": "Certificat personnalisé téléchargé via l'interface utilisateur Proxmox — y compris le certificat Let's Encrypt émis sous <em>Datacenter → Node → Certificats → ACME</em>.",
"when": "Préféré si les deux fichiers existent ; Monitor utilise le certificat présenté par Proxmox."
},
{
"fileRich": "<code>pve-ssl.pem</code><br /><code>pve-ssl.key</code>",
"originRich": "Certificat autosigné généré au moment de l'installation par l'ICP Proxmox.",
"whenRich": "Certificat de repli en l'absence de <code>pveproxy-ssl.pem</code>."
}
]
},
"callout": {
"title": "Même priorité que Proxmox",
"bodyRich": "<code>pveproxy</code> applique la même sélection. Avec l'option Proxmox, Monitor utilise le certificat présenté par l'interface Proxmox sur 8006, sans copie ni processus de renouvellement séparé."
}
},
"letsencrypt": {
"heading": "Obtenir un certificat Let's Encrypt via Proxmox ACME",
"intro": "Proxmox VE inclut son client ACME. <em>« Order Certificate Now »</em> enregistre le résultat dans <code>/etc/pve/local/pveproxy-ssl.pem</code>, lu par Monitor. Les cinq étapes suivantes résument le <extlink1>guide officiel Proxmox</extlink1> avec les commandes nécessaires.",
"prereqs": {
"title": "Préalables",
"items": [
"Le noeud a un vrai nom DNS (pas seulement un IP) pointant dessus.",
"<strong>Soit</strong> le port 80 accessible depuis Internet (validation HTTP-01, la plus simple), <strong>soit</strong> un fournisseur DNS avec identifiants API (DNS-01, fonctionne derrière NAT et accepte les certificats génériques).",
"Une adresse email pour le compte ACME."
]
},
"step1": {
"heading": "Étape 1 — Enregistrer le compte ACME",
"introRich": "Remplacer le courriel par le vôtre. Le nom de compte <code>default</code> n'est qu'une étiquette — vous pouvez utiliser n'importe quelle chaîne.",
"code": "pvenode acme account register default you@example.com",
"afterRich": "Proxmox vous invite à accepter les termes de service Let's Encrypt. Après cela, le compte est maintenu sous <code>/etc/pve/priv/acme/</code> et l'onglet ACME dans l'interface graphique l'affichera."
},
"step2": {
"heading": "Étape 2 — Choisir un type de défi",
"http01Rich": "<strong>HTTP-01</strong> est le plus facile : il est intégré, pas de plugin supplémentaire. Let's Encrypt se connecte à <code>http://&lt;your-host&gt;/.well-known/acme-challenge/...</code> sur le port 80, de sorte que le port 80 doit être ouvert de l'Internet public à votre noeud — généralement un port vers l'avant sur votre routeur.",
"dns01Rich": "<strong>DNS-01</strong> fonctionne sans exposer le port 80 (bon pour les homelabs derrière CG-NAT) et est la seule option pour les certificats wildcard. Vous ajoutez un plugin DNS une fois avec le jeton API de votre fournisseur. Exemple Cloudflare:",
"code": "pvenode acme plugin add dns cf \\\n --api cloudflare \\\n --data CF_Token=YOUR_CLOUDFLARE_API_TOKEN",
"outroRich": "Pour d'autres fournisseurs (Gandi, OVH, AWS Route 53, etc.), consultez <code>pvenode acme plugin add dns --help</code>. Proxmox inclut <extlink2>tous les plugins DNS acme.sh</extlink2>."
},
"step3": {
"heading": "Étape 3 — Relier le domaine à votre nœud",
"http01Rich": "Pour HTTP-01 (utilise le plugin <code>standalone</code> intégré):",
"code1": "pvenode config set --acme domains=host.example.com,account=default",
"dns01": "Pour DNS-01 avec le plugin Cloudflare de l'étape 2 :",
"code2": "pvenode config set --acmedomain0 domain=host.example.com,plugin=cf\npvenode config set --acme account=default",
"wildcardRich": "Certificat générique ? Ajoutez <code>domain=*.example.com</code> dans une entrée séparée <code>--acmedomainN</code>. Les certificats génériques nécessitent DNS-01."
},
"step4": {
"heading": "Étape 4 — Commander le certificat",
"code": "pvenode acme cert order",
"afterRich": "Le premier tour prend généralement 30–60 secondes pendant que le défi se propage. Sur succès Proxmox écrit <code>/etc/pve/local/pveproxy-ssl.pem</code> + <code>.key</code>, redémarre <code>pveproxy</code>, et une cron de renouvellement est programmée automatiquement (Let's Encrypt certs sont valides 90 jours; Proxmox renouvelle à 60)."
},
"step5": {
"heading": "Étape 5 — Vérifier l'émetteur",
"code": "openssl x509 -in /etc/pve/local/pveproxy-ssl.pem -noout -issuer",
"afterRich": "devrait imprimer un émetteur commençant par <code>O = Let's Encrypt</code>. S'il lit plutôt <code>CN = Proxmox Virtual Environment</code> l'ordre a échoué et le fichier est toujours le certificat PVE autosigné — re-exécuter <code>pvenode acme cert order --debug 1</code> pour voir pourquoi."
},
"gui": {
"title": "Vous préférez l'interface utilisateur ? Mêmes cinq étapes",
"bodyRich": "<em>Datacenter → ACME</em> enregistre le compte ; <em>Datacenter → ACME → Plugins</em> ajoute le plugin DNS ; <em>Node → Certificates → ACME</em> associe le domaine ; <em>Order Certificates Now</em> exécute l'étape 4. Les commandes précédentes servent à automatiser et à travailler sans interface graphique."
}
},
"switchToHttps": {
"heading": "Changez le moniteur en HTTPS",
"bodyRich": "Une fois <code>/etc/pve/local/pveproxy-ssl.pem</code> signé par Let's Encrypt, ouvrez <strong>Paramètres → Sécurité → HTTPS / SSL</strong>, vérifiez que l'émetteur est <em>Let's Encrypt</em> et non l'AC locale de Proxmox, puis cliquez sur <strong>Utiliser le certificat Proxmox</strong>. Monitor redémarre et le prochain chargement utilise HTTPS sur 8008 avec une chaîne de confiance publique. Les renouvellements ACME suivants sont validés et sélectionnés à la prochaine nouvelle connexion TLS, sans interrogation périodique ni redémarrage à chaque renouvellement. <strong>Actualiser le certificat</strong> reste disponible dans Sécurité pour le diagnostic et la récupération."
},
"custom": {
"heading": "Certificat personnalisé — quand l'utiliser",
"intro": "Cliquez sur <strong>Utiliser un certificat personnalisé</strong> et saisissez deux chemins absolus :",
"items": [
"<strong>Certificat</strong> — chaîne complète en PEM (<code>.pem</code> ou <code>.crt</code>).",
"<strong>Clé privée</strong> : clé correspondante en PEM (<code>.key</code>)."
],
"outro": "Les deux fichiers sont lus par le processus Monitor au démarrage. Assurez-vous qu'ils restent lisibles par l'utilisateur que l'unité systemd fonctionne comme (root par défaut). Emplacements communs lorsque l'ACME est géré à l'extérieur de Proxmox:",
"code": "# certbot\n/etc/letsencrypt/live/<your-host>/fullchain.pem\n/etc/letsencrypt/live/<your-host>/privkey.pem\n\n# acme.sh\n~/.acme.sh/<your-host>_ecc/fullchain.cer\n~/.acme.sh/<your-host>_ecc/<your-host>.key",
"symlinkCallout": {
"title": "Symlink cibles vs fichiers",
"bodyRich": "<code>certbot</code> stocke les fichiers réels dans <code>/etc/letsencrypt/archive/</code> et le chemin <code>live/</code> est un lien symbolique. Pointez le moniteur sur le lien symbolique <code>live/</code> et non sur le fichier <code>archive/</code> — de cette façon, chaque cycle de renouvellement réécrit simplement la cible de lien symbolique et le moniteur récupère le nouveau certificat au début du service suivant."
}
},
"afterHttps": {
"heading": "Après avoir activé HTTPS",
"bodyRich": "Enregistrer le changement écrit <code>/etc/proxmenux/ssl_config.json</code> et déclenche un redémarrage de l'unité <code>proxmenux-monitor</code> systemd. L'onglet navigateur perdra sa connexion actuelle — rechargez-la sur <code>https://&lt;host&gt;:8008/</code>. La première charge avec un certificat Let's Encrypt ne doit montrer aucun avertissement; avec le certificat Proxmox autosigné, le navigateur aura besoin d'une exception, la même que pour le port 8006.",
"reverse": {
"heading": "Proxies inverses et webhooks",
"bodyRich": "Lorsque le moniteur passe à HTTPS, les URL Proxmox VE webhook enregistrées pour les notifications retournent automatiquement de <code>http://</code> à <code>https://</code>. Les entrées existantes de webhook sont réécrites la prochaine fois qu'une règle de notification est enregistrée ou redétectée, de sorte qu'aucune modification manuelle de la configuration de notification Proxmox n'est nécessaire."
}
},
"trustCa": {
"heading": "Faites confiance à l'AC autosignée Proxmox",
"intro1Rich": "Pour conserver le certificat Proxmox par défaut sans ACME, importez l'AC racine du cluster dans le magasin de confiance du système ou du navigateur. Monitor détecte <code>/etc/pve/local/pve-ssl.pem</code> comme certificat de repli. Le client fait alors confiance à l'émetteur ; l'URL doit toujours correspondre à un nom du certificat.",
"intro2Rich": "Le fichier CA vit à <code>/etc/pve/pve-root-ca.pem</code> sur chaque nœud. Dans un cluster, le chemin est sur le système de fichiers partagé <code>pmxcfs</code> de sorte que tous les nœuds partagent la même racine, et une seule importation couvre l'ensemble du datacenter. Copiez-le sur votre machine :",
"code": "scp root@<your-host>:/etc/pve/pve-root-ca.pem ./pve-root-ca.pem",
"thenImport": "Importez-le du côté client :",
"items": [
"<strong>Linux (tout le système) :</strong> exécutez <code>sudo cp pve-root-ca.pem /usr/local/share/ca-certificates/pve-root-ca.crt</code>, puis <code>sudo update-ca-certificates</code>. Les navigateurs utilisant le magasin système (Chromium, Edge) la reconnaissent après redémarrage ; Firefox utilise son propre magasin et nécessite l'importation manuelle ci-dessous.",
"<strong>macOS :</strong> ouvrez le fichier <code>.pem</code> par double-clic dans Trousseaux d'accès, ajoutez-le au trousseau <em>Système</em>, puis choisissez <em>Se fier → Toujours approuver</em>.",
"<strong>Windows :</strong> clic droit sur le fichier → <em>Installer le certificat</em> → placez-le dans <em>Autorités de certification racines de confiance</em>.",
"<strong>Firefox (tout OS) :</strong> <em>Paramètres → Vie privée et sécurité → Certificats → Afficher les certificats → Autorités → Importer</em> ; cochez <em>Faire confiance à cette AC pour identifier les sites web</em>."
],
"standalone": {
"title": "Nœuds autonomes en dehors d'un cluster",
"bodyRich": "Chaque hôte Proxmox non clustered possède son propre <code>pve-root-ca.pem</code>. Si vous gérez plusieurs hôtes autonomes, répétez la copie/import pour chacun, ou rejoignez-les à un cluster afin qu'ils partagent une seule racine."
}
},
"disable": {
"heading": "Désactivation de HTTPS",
"bodyRich": "Cliquez sur <strong>Désactiver HTTPS</strong> dans le même panneau. Monitor redémarre en HTTP non chiffré, utile si un certificat personnalisé illisible empêche le démarrage. Aucune désinstallation supplémentaire n'est nécessaire ; les fichiers de certificats restent intacts.",
"stateCallout": {
"title": "Emplacement de l'état",
"bodyRich": "<code>/etc/proxmenux/ssl_config.json</code> stocke les chemins de cert actif et la source (<code>none</code>, <code>proxmox</code>, <code>custom</code>). La suppression du fichier équivaut à la désactivation de HTTPS — le prochain démarrage du moniteur revient à HTTP."
}
}
}
@@ -0,0 +1,113 @@
{
"meta": {
"title": "Changer le canal de publication | Documentation ProxMenux",
"description": "Passez entre les canaux Stable (main) et Beta (develop) de ProxMenux dans un seul dialogue. Bidirectionnel et idempotent ; exécute l'installateur officiel du canal choisi et normalise le service Monitor.",
"ogTitle": "Changer le canal de publication | Documentation ProxMenux",
"ogDescription": "Une option des Paramètres pour passer entre Stable et Beta sans relancer manuellement les installateurs."
},
"header": {
"title": "Changer le canal de publication",
"description": "Une option unique des Paramètres permet de passer entre Stable (branche main) et Beta (branche develop). L'ancienne option à sens unique « Désactiver le programme bêta » est remplacée par un dialogue bidirectionnel proposant les deux sens et exécutant l'installateur officiel du canal choisi.",
"section": "Paramètres"
},
"intro": {
"title": "Ce qui a changé",
"body": "Les versions précédentes proposaient « Désactiver le programme bêta », visible uniquement en bêta, et une relance manuelle de l'installateur bêta pour y revenir. Ces deux procédures sont réunies dans <strong>Changer le canal de publication</strong>, toujours disponible, qui affiche le canal actuel et permet de passer entre Stable et Beta dans les deux sens."
},
"why": {
"heading": "Pourquoi cette option existe",
"intro": "ProxMenux est distribué depuis deux branches Git :",
"items": [
"<strong>Stable</strong> : la branche <code>main</code>, indiquée par le README et adaptée à la plupart des administrateurs. Les versions sont moins fréquentes et ne contiennent que des changements déjà validés en bêta.",
"<strong>Beta</strong> : la branche <code>develop</code>. Fonctions et versions de Monitor plus récentes, avec l'étiquette de la prochaine version stable. Certaines fonctions peuvent présenter des défauts : en choisissant ce canal, vous participez aux tests avant publication."
],
"outro": "Auparavant, changer de canal nécessitait de retrouver la bonne URL dans le README et de modifier <code>config.json</code> manuellement en cas de désynchronisation. L'option unifiée réalise tout le processus en une seule action guidée."
},
"dialog": {
"heading": "La boîte de dialogue",
"intro": "Dans le menu principal : <strong>Paramètres → Changer le canal de publication</strong>. Un menu à deux lignes apparaît :",
"options": [
"<code>stable</code> — Stable (branche main)",
"<code>beta</code> — Beta (branche develop)"
],
"behaviour": "Le canal actuel est présélectionné et affiché en haut. Choisir le même affiche « Ce canal de publication est déjà actif » : le dialogue est idempotent. Choisir un autre canal affiche une confirmation spécifique :",
"directions": [
"<strong>Stable → Beta:</strong> avertit que les versions bêta peuvent contenir des bogues ou des fonctions incomplètes.",
"<strong>Beta → Stable:</strong> avertit que les contrôles de mise à jour bêta s'arrêteront et l'installateur stable réinstallera les composants du canal Stable."
]
},
"confirm": {
"heading": "Que se passe-t-il lorsque vous confirmez",
"items": [
"<strong>Télécharge l'installateur officiel</strong> du canal cible :<ul><li>Stable : <code>install_proxmenux.sh</code> depuis <code>main</code></li><li>Beta : <code>install_proxmenux_beta.sh</code> depuis <code>develop</code></li></ul>La présence du fichier téléchargé est vérifiée et il est rendu exécutable avant de continuer.",
"<strong>Exécute l'installateur complet</strong>, le même que celui indiqué dans le README. La détection des composants, les sauvegardes, les dépendances et la conservation de la langue suivent la procédure officielle d'installation du canal choisi.",
"Lors du passage à <strong>Stable</strong>, le menu supprime les métadonnées bêta restantes de <code>config.json</code> : <code>beta_program</code>, <code>beta_version</code>, <code>install_branch</code> et <code>update_available.beta*</code>. <code>proxmenux_monitor.status = beta_updated</code> devient <code>updated</code>. Le fichier résiduel <code>beta_version.txt</code> et les installateurs bêta téléchargés sont supprimés.",
"Lors du passage à Stable, le fichier systemd de Monitor est réécrit depuis le modèle Stable : le suffixe « Beta » est retiré de la description et <code>ExecStart</code> pointe vers le répertoire d'exécution. Une nouvelle commande <code>systemctl status</code> reflète ainsi le canal actuel.",
"Recharge le menu de configuration. <em>Afficher les informations sur la version</em> indiquera le nouveau canal."
]
},
"switching": {
"heading": "Passage en allers et retours",
"intro": "Les deux directions passent par le même programme d'installation – il ne s'agit <strong>pas</strong> de flux de désinstallation et de réinstallation dans des cas particuliers. Chaque direction exécute simplement le propre programme d'installation du canal, qui est conçu pour être idempotent et pouvoir être réexécuté en toute sécurité sur une installation existante. Conséquences pratiques :",
"items": [
"Votre configuration existante, votre login ProxMenux Monitor (<code>auth.json</code>), les canaux de notification, le registre post-installation, les seuils personnalisés — aucun de ceux-ci n'est touché. Le commutateur de canal échange uniquement l'arborescence de script et le binaire AppImage.",
"Un moniteur qui était actif avant que l'interrupteur reste actif après; un moniteur qui a été désactivé reste désactivé.",
"Les jetons ProxMenux Monitor <code>auth.json</code>, API et le secret JWT sont conservés à travers les changements de canaux. Les séances ne sont pas déconnectées.",
"Vous pouvez retourner les canaux autant de fois que vous le souhaitez — le dialogue l'acceptera à chaque fois et relancera l'installateur. Aucun redémarrage de Proxmox n'est nécessaire.",
"Le changement de canal remplace les scripts ProxMenux et ne peut donc pas être exécuté depuis le terminal du navigateur de Monitor : le PTY serait fermé pendant la mise à jour et laisserait le dialogue bloqué. Dans ce terminal, un message affiche à la place la commande officielle en une ligne pour le canal choisi. Exécutez-la depuis SSH ou la console de l'hôte Proxmox."
]
},
"feedback": {
"heading": "Signaler des problèmes de la bêta",
"intro": "Si quelque chose se comporte de manière inattendue pendant que vous êtes sur le canal Beta, ouvrir un problème avec suffisamment de contexte est ce qui comble l'écart à une version stable. Le rapport le plus utile comprend:",
"items": [
"Ce que tu as fait et ce que tu pensais arriver.",
"Tout message d'erreur affiché à l'écran.",
"Les journaux de surveillance pertinents:"
],
"logsCommand": "journalctl -u proxmenux-monitor -n 50 --no-pager",
"versionLine": "La version actuelle de ProxMenux (Paramètres → <link>Afficher les informations sur la version</link>).",
"issueLine": "Ouvrez un <ghlink>ticket GitHub</ghlink> avec ces informations pour faciliter la correction."
},
"manual": {
"heading": "Équivalent manuel",
"intro": "Si vous préférez le shell ou automatisez le changement de canal, le dialogue exécute ces commandes :"
},
"unifiedCallout": {
"title": "Pourquoi les deux directions sont maintenant une option",
"body": "L'ancienne option « Désactiver le programme bêta » apparaissait seulement après une participation à la bêta. Pour <em>rejoindre</em> la bêta, il fallait chercher l'installateur ailleurs ; pour la <em>quitter</em>, il fallait parfois nettoyer manuellement les métadonnées <code>beta_*</code>. <strong>Changer le canal de publication</strong> apparaît toujours, indique le canal actuel et traite les deux sens comme une opération exécutable, répétable et idempotente."
},
"troubleshoot": {
"heading": "Dépannage",
"downloadTitle": "Impossible de télécharger l'installateur.",
"downloadBody": "Le HTTPS à <code>raw.githubusercontent.com</code> a échoué. Vérifiez la connectivité et DNS de l'hôte:",
"downloadCmd": "curl -fsSL -o /tmp/test https://raw.githubusercontent.com/MacRimi/ProxMenux/main/install_proxmenux.sh && head -1 /tmp/test",
"downloadOutro": "Si cela échoue en dehors de ProxMenux, c'est un problème réseau / proxy sur l'hôte.",
"errorsTitle": "L'installation est terminée par des erreurs.",
"errorsBody": "L'installateur a renvoyé un code de sortie non nul. Aucun retour arrière automatique n'est prévu : certains fichiers ou composants peuvent déjà avoir changé. Lisez la sortie de l'installateur affichée au-dessus de l'erreur avant d'appuyer sur Entrée et vérifiez l'état actuel, puis réessayez depuis le menu ou lancez l'installateur manuellement par SSH ou depuis la console de l'hôte.",
"configTitle": "Impossible de mettre à jour le fichier de configuration après le passage à Stable",
"configBody": "Le nettoyage post-installation des métadonnées bêta a échoué — généralement parce que <code>config.json</code> a une erreur de syntaxe d'une modification manuelle. Valider :",
"configCmd": "jq . /usr/local/share/proxmenux/config.json",
"configOutro": "Corrigez ou restaurez le fichier, puis relancez l'option."
},
"related": {
"heading": "Autres",
"items": [
{
"href": "/docs/settings/show-version-information",
"label": "Afficher les informations sur la version",
"tail": "— confirmer quel canal est actif maintenant."
},
{
"href": "/docs/settings/proxmenux-monitor",
"label": "ProxMenux Monitor",
"tail": " — le service Monitor recréé lors du changement de canal."
},
{
"href": "/docs/settings",
"label": "Aperçu des paramètres",
"tail": "."
}
]
}
}
@@ -0,0 +1,108 @@
{
"meta": {
"title": "Changer de langue | Documentation ProxMenux",
"description": "Choisissez parmi huit langues pour ProxMenux. Chaque installation inclut des catalogues JSON de traductions prégénérés ; aucun service de traduction ni environnement Python n'est nécessaire sur l'hôte. Le menu se recharge automatiquement.",
"ogTitle": "Changer de langue | Documentation ProxMenux",
"ogDescription": "Choisissez une des huit langues de ProxMenux dans les Paramètres. Disponible sur chaque installation."
},
"header": {
"title": "Changer de langue",
"description": "Changez la langue de ProxMenux parmi huit langues prises en charge. Le choix est enregistré dans config.json et le menu redémarre dans la nouvelle langue. Chaque installation comprend les catalogues de traductions.",
"section": "Paramètres"
},
"intro": {
"title": "Ce que c'est",
"body": "Un dialogue répertorie les huit langues prises en charge. ProxMenux enregistre votre choix dans <code>config.json</code> sous <code>.language</code>, puis relance <code>config_menu.sh</code> pour l'appliquer immédiatement."
},
"warn": {
"title": "Disponible sur chaque installation",
"body": "Les Paramètres affichent toujours Changer de langue. Les catalogues sont installés dans <code>/usr/local/share/proxmenux/lang/</code> <em>et</em> la langue choisie est enregistrée dans <code>config.json</code>. L'ancien environnement Python de traduction n'est pas nécessaire."
},
"supported": {
"heading": "Langues prises en charge",
"headerCode": "Code",
"headerLang": "Langue",
"headerNotes": "Remarques",
"rows": [
{
"code": "en",
"lang": "Anglais",
"notes": "Langue source — la plus précise"
},
{
"code": "es",
"lang": "Espagnol",
"notes": "Catalogue JSON prégénéré"
},
{
"code": "fr",
"lang": "Français",
"notes": "Catalogue JSON prégénéré"
},
{
"code": "de",
"lang": "Allemand",
"notes": "Catalogue JSON prégénéré"
},
{
"code": "it",
"lang": "italien",
"notes": "Catalogue JSON prégénéré"
},
{
"code": "pt",
"lang": "portugais",
"notes": "Catalogue JSON prégénéré"
},
{
"code": "sk",
"lang": "Slovaque",
"notes": "Catalogue JSON prégénéré"
},
{
"code": "sv",
"lang": "Suédois",
"notes": "Catalogue JSON prégénéré"
}
]
},
"englishTip": {
"title": "L'anglais est le plus précis",
"body": "Les textes dans les autres langues proviennent des catalogues JSON prégénérés inclus avec ProxMenux. Les traductions manquantes sont remplacées par l'anglais ; aucun appel de traduction en direct n'est effectué sur l'hôte. L'anglais reste la référence en cas de traduction douteuse."
},
"underHood": {
"heading": "Comment ça marche sous le capot",
"items": [
"Le dialogue propose huit codes de langue ; choisissez-en un.",
"Si <code>config.json</code> existe : <code>jq --arg lang \"$new_language\" '.language = $lang''</code> met à jour le champ en place.",
"Si <code>config.json</code> n'existe pas : un nouveau est créé avec le code de langue dans un objet à champ unique.",
"Boîte de dialogue de confirmation : <em>\"Langue changée en [code]\"</em>.",
"<code>exec bash config_menu.sh</code> recharge le menu Paramètres avec la nouvelle langue active."
]
},
"manual": {
"heading": "Équivalent manuel"
},
"troubleshoot": {
"heading": "Dépannage",
"noOptionTitle": "L'option n'apparaît pas dans les paramètres",
"noOptionBody": "Changer de langue est toujours disponible dans les versions actuelles. Si cette option manque, mettez ProxMenux à jour avec l'installateur officiel, puis rouvrez les Paramètres.",
"stillEnglishTitle": "La langue a changé mais l'interface utilisateur affiche toujours l'anglais",
"stillEnglishBody": "Le menu se relance après le changement. Si vous avez ouvert un nouveau shell et lancé un autre point d'entrée ProxMenux, exécutez à nouveau <code>menu</code> pour appliquer la nouvelle langue. Vérifiez avec <code>jq -r '.language' /usr/local/share/proxmenux/config.json</code>."
},
"related": {
"heading": "Autres",
"items": [
{
"href": "/docs/settings/show-version-information",
"label": "Afficher les informations sur la version",
"tail": " — confirme le canal de publication, les fichiers de traduction et la langue actuelle."
},
{
"href": "/docs/settings",
"label": "Aperçu des paramètres",
"tail": "."
}
]
}
}
+81
View File
@@ -0,0 +1,81 @@
{
"meta": {
"title": "Paramètres ProxMenux — Activation de Monitor, canal de publication, langues | ProxMenux",
"description": "Paramètres ProxMenux : service Monitor et réinitialisation du mot de passe, canal Stable/Beta, huit langues d'interface, diagnostic de version et désinstallation. Les options Monitor apparaissent si le service est installé.",
"ogTitle": "Paramètres ProxMenux — Activation de Monitor, canal de publication, langues",
"ogDescription": "Configurez ProxMenux : service Monitor, canal de publication, langue, informations de version et désinstallation.",
"twitterTitle": "Paramètres ProxMenux",
"twitterDescription": "Activation de Monitor, changement de canal de publication, langues, version et désinstallation."
},
"header": {
"title": "Paramètres",
"description": "Configurez ProxMenux : activez ou désactivez Monitor, réinitialisez ses identifiants, passez entre Stable et Beta dans les deux sens, choisissez une des huit langues, consultez le diagnostic de version et désinstallez. Les actions Monitor nécessitent son service installé ; le choix de langue est toujours disponible.",
"section": "Paramètres"
},
"intro": {
"title": "Ce menu sert à",
"body": "Administration de ProxMenux lui-même : service Monitor, sortie du canal bêta, langue, diagnostic de version et désinstallation. Aucune option de ce menu ne modifie vos VM, conteneurs ou votre stockage."
},
"opening": {
"heading": "Ouverture du menu",
"body": "Dans le menu principal de ProxMenux, appuyez sur <kbd>s</kbd>. Les actions Monitor apparaissent si son service est installé ; les autres paramètres sont toujours disponibles :",
"imageAlt": "Menu Paramètres ProxMenux avec actions Monitor conditionnelles"
},
"installTypes": {
"heading": "Une installation, toutes les langues",
"intro": "Les versions actuelles incluent les catalogues JSON statiques dans chaque installation. Les anciennes versions proposaient des modes distincts avec traduction et normal :",
"headerType": "Type d'installation",
"headerBundles": "Composants inclus",
"headerMenu": "Affichage du menu",
"rows": [
{
"type": "Installation actuelle",
"bundles": "Catalogues JSON statiques pour sept langues, plus l’anglais intégré ; aucun environnement Python de traduction",
"menuRich": "<strong>Changer de langue</strong> + Afficher la version + Désinstaller"
},
{
"type": "Anciens modes avec traduction / normal",
"bundles": "Ancienne séparation entre environnement de traduction et installation uniquement en anglais",
"menu": "Mettez à jour avec le programme officiel pour utiliser le menu unifié actuel"
}
],
"detectionTitle": "Le choix de langue est toujours disponible",
"detectionBody": "Le menu ne vérifie plus la présence d'un environnement de traduction. Chaque installation inclut <code>/usr/local/share/proxmenux/lang/</code> et enregistre la <code>language</code> choisie dans <code>config.json</code>."
},
"options": {
"heading": "Options du menu",
"intro": "Ces outils gèrent ProxMenux lui-même. <em>Conditionnel</em> signifie que les actions Monitor apparaissent uniquement si son service systemd est installé. Le canal de publication, la langue, le diagnostic de version et la désinstallation sont toujours disponibles.",
"list": [
{
"icon": "Activity",
"href": "/docs/settings/proxmenux-monitor",
"title": "ProxMenux Monitor",
"description": "Activer / désactiver l'unité proxmenux-monitor.service systemd, vérifier son état actuel et réinitialiser le mot de passe de connexion du tableau de bord s'il a été perdu. UI Web disponible sur TCP 8008.",
"badge": "Conditionnel"
},
{
"icon": "TestTube",
"href": "/docs/settings/beta-program",
"title": "Changer le canal de publication",
"description": "Passez de Stable (main) à Beta (develop) et inversement dans un seul dialogue. Exécute l'installateur officiel du canal choisi ; idempotent et toujours visible.",
"badge": "Toujours disponible"
},
{
"icon": "Info",
"href": "/docs/settings/show-version-information",
"title": "Afficher les informations sur la version",
"description": "Version de ProxMenux, canal de publication, composants installés, chemins des fichiers, fichiers de traduction et langue actuelle."
},
{
"icon": "Trash2",
"href": "/docs/settings/uninstall-proxmenux",
"title": "Désinstaller ProxMenux",
"description": "Supprimer ProxMenux et (facultativement) ses dépendances. restaure également les sauvegardes /root/.bashrc et /etc/motd créées au moment de l'installation."
}
]
},
"configTip": {
"title": "Emplacement de la configuration",
"bodyRich": "La plupart des états gérés par ce menu sont stockés dans <code>/usr/local/share/proxmenux/config.json</code> : <code>language</code>, <code>beta_program.status</code> et les indicateurs d'installation de chaque composant. L'état du service Monitor est géré dans systemd (<code>proxmenux-monitor.service</code>), pas ici. La version est lue dans <code>/usr/local/share/proxmenux/version.txt</code>."
}
}
@@ -0,0 +1,119 @@
{
"meta": {
"title": "ProxMenux Monitor | Documentation ProxMenux",
"description": "Activer ou désactiver l'unité proxmenux-monitor.service systemd et inspecter son état actuel. Le moniteur expose une interface utilisateur web sur TCP 8008 pour la surveillance visuelle des hôtes.",
"ogTitle": "ProxMenux Monitor | Documentation ProxMenux",
"ogDescription": "Activez ou désactivez le service systemd proxmenux-monitor et vérifiez son état dans les Paramètres."
},
"header": {
"title": "ProxMenux Monitor",
"description": "Deux actions connexes dans le menu Paramètres : basculer l'unité proxmenux-monitor.service systemd (démarrer / arrêter et activer / désactiver en un seul clic), et afficher son état actuel détaillé. Le moniteur expose une interface utilisateur web sur TCP 8008 pour la surveillance visuelle des hôtes.",
"section": "Paramètres"
},
"intro": {
"title": "Qu'est-ce que ProxMenux Monitor?",
"body": "ProxMenux Monitor est un tableau de bord web intégré qui fournit une visibilité en temps réel dans votre infrastructure Proxmox – accessible depuis n'importe quel navigateur de votre réseau, sans avoir besoin d'un terminal."
},
"offers": {
"heading": "Ce qu'il offre",
"items": [
"Surveillance en temps réel de CPU, RAM, utilisation du disque et trafic réseau.",
"Aperçu des conteneurs VM et LXC fonctionnant avec des indicateurs d'état.",
"Authentification pour protéger l'accès.",
"Authentification à deux facteurs (2FA) avec support TOTP.",
"Prise en charge par proxy inverse (Nginx / Traefik).",
"Conçu pour fonctionner sur les appareils de bureau et mobiles."
]
},
"access": {
"heading": "Accès",
"intro": "Une fois installé, le tableau de bord est disponible à :",
"url": "http://<your-proxmox-ip>:8008",
"outro": "Le moniteur est installé automatiquement dans le cadre de l'installation standard ProxMenux et fonctionne comme un service systemd (<code>proxmenux-monitor.service</code>) qui démarre automatiquement au démarrage."
},
"warnConditional": {
"title": "Options de configuration uniquement visibles lorsque Monitor est installé",
"body": "Les deux entrées de menu décrites ci-dessous apparaissent seulement dans Paramètres si <code>proxmenux-monitor.service</code> est enregistré avec systemd. Si vous ne les voyez pas, le moniteur n'a pas été installé (il est optionnel pendant l'installation de ProxMenux). Pour l'ajouter plus tard, réinstallez ProxMenux avec la dernière version et choisissez l'option Monitor."
},
"toggle": {
"heading": "Activer / Désactiver",
"intro": "La première entrée de menu est une bascule unique qui bascule entre deux états selon que le service fonctionne actuellement :",
"headerState": "État actuel",
"headerLabel": "Étiquette de menu affichée",
"headerAction": "Décision sur confirmation",
"rows": [
{
"state": "actif",
"label": "Désactiver le ProxMenux Monitor",
"action": "systemctl stop + disable"
},
{
"state": "inactif",
"label": "Activer le ProxMenux Monitor",
"action": "systemctl enable + start"
}
],
"outro": "Chaque changement demande une confirmation oui/non. Désactiver arrête le service <em>et</em> désactive son démarrage automatique ; activer autorise le démarrage automatique <em>et</em> lance le service immédiatement."
},
"status": {
"heading": "Afficher l'état du service de surveillance",
"intro": "La deuxième entrée de menu est en lecture seule. Il efface l'écran, affiche le logo ProxMenux et le titre <em>\"ProxMenux Monitor Vérification de service\"</em>, puis déclare:",
"items": [
"<strong>État du service:</strong> actif, inactif ou not_installed.",
"<strong>Web UI URL</strong> (uniquement lorsqu'il est actif): <code>http://&lt;host_ip&gt;:8008</code> — dérivé de <code>hostname -I | awk '''{print $1}'''</code>.",
"<strong>Détaillé systemd sortie:</strong> <code>systemctl status proxmenux-monitor.service --no-pager -l</code> — montre les lignes de log récentes, ExecStart, MainPID, etc."
]
},
"manual": {
"title": "Équivalents manuels",
"intro": "Depuis n'importe quel shell :",
"code": "systemctl status proxmenux-monitor.service # detailed status\nsystemctl is-active proxmenux-monitor.service # one-word status\nsystemctl enable --now proxmenux-monitor.service # enable + start\nsystemctl disable --now proxmenux-monitor.service # stop + disable\njournalctl -u proxmenux-monitor.service -f # follow live logs"
},
"reset": {
"heading": "Réinitialiser le mot de passe du ProxMenux Monitor",
"intro": "Chemin de récupération pour l'opérateur qui a perdu le mot de passe du tableau de bord (ou périphérique 2FA). L'option n'apparaît que lorsque le moniteur est installé sur l'hôte. Sélection :",
"items": [
"Demande confirmation avec un dialogue oui/non — l'action est destructrice pour les identifiants de connexion.",
"Sauvegarde le <code>/root/.config/proxmenux-monitor/auth.json</code> existant à <code>auth.json.bak-&lt;UTC timestamp&gt;</code> (mode <code>0600</code>) afin que l'état précédent puisse être restauré manuellement si la réinitialisation était une erreur.",
"Arrête le service <code>proxmenux-monitor</code> pour éviter un conflit entre la modification du fichier et une connexion en cours.",
"Efface les champs d'identité dans <code>auth.json</code>: <code>enabled=false</code>, <code>configured=false</code>, vide <code>username</code>, <code>password_hash</code>, <code>totp_secret</code> et le tableau des codes de sauvegarde.",
"<strong>Conserve</strong> <code>jwt_secret</code> et les <code>api_tokens</code> / <code>revoked_tokens</code> enregistrés pour que les jetons de longue durée de Home Assistant ou d'autres scripts <em>continuent à permettre l'authentification</em> après la réinitialisation.",
"Redémarre le service. La prochaine visite sur <code>http://&lt;host&gt;:8008</code> affiche l'assistant de configuration initiale pour créer un nouveau compte administrateur."
],
"preservedTitle": "Ce qui est conservé et ce qui est effacé",
"preservedBody": "<strong>Effacés :</strong> nom d'utilisateur, empreinte du mot de passe, secret TOTP 2FA et codes de secours. <strong>Conservés :</strong> <code>jwt_secret</code>, métadonnées <code>api_tokens</code> et liste <code>revoked_tokens</code>. Pour invalider aussi tous les jetons API et repartir de zéro, supprimez <code>auth.json</code> manuellement au lieu de cette option. Au prochain démarrage, le service régénère le secret JWT et toutes les autres données.",
"trustTitle": "L'accès physique-hôte est l'ancre de confiance",
"trustBody": "Ce chemin de réinitialisation nécessite un shell racine sur l'hôte. Quiconque peut exécuter la commande <code>menu</code> en tant que root contrôle déjà la boîte, donc leur donner la récupération de mot de passe n'est pas une escalade de privilège — il est cohérent avec la façon dont chaque autre outil d'administration sur Proxmox fonctionne. Le corollaire : la connexion Monitor ne protégera rien de quelqu'un que vous avez déjà laissé entrer dans le shell Proxmox.",
"seeAlso": "Consultez aussi <link>Monitor → Accès et authentification → Récupérer un mot de passe perdu</link> pour ce processus vu du tableau de bord et les détails sur les empreintes des mots de passe et la génération du secret JWT."
},
"files": {
"heading": "Fichiers concernés",
"code": "/etc/systemd/system/proxmenux-monitor.service # systemd unit\n/root/.config/proxmenux-monitor/ # runtime config dir\n/var/log/proxmenux-auth.log # Flask app auth log\n # (read by Fail2Ban [proxmenux] jail)"
},
"troubleshoot": {
"heading": "Dépannage",
"missingTitle": "Les deux options du menu sont manquantes",
"missingBody": "Le moniteur n'est pas enregistré avec systemd. Confirmez avec <code>systemctl list-unit-files | grep proxmenux-monitor</code> — s'il n'y a pas de sortie, réinstallez ProxMenux depuis l'installateur officiel avec la dernière version et choisissez l'option Monitor pendant l'installation.",
"unreachableTitle": "Service activé mais l'URL est inaccessible",
"unreachableBody": "La sortie d'état de paramètres vous donne l'IP. Confirmer :",
"unreachableCmd": "ss -tlnp | grep 8008 # is anything listening?\njournalctl -u proxmenux-monitor -n 100 --no-pager # recent errors\ncurl -sI http://localhost:8008 # local reachability",
"unreachableOutro": "Si localhost fonctionne mais n'est pas externe, vérifiez votre pare-feu hôte (<code>pve-firewall</code> ou nftables) pour TCP 8008.",
"stopsTitle": "Active le service mais il s'arrête quelques secondes plus tard",
"stopsBody": "Le plus souvent, il s'agit d'un conflit sur le port 8008 ou d'un échec de vérification des dépendances. Le journal système indique la cause : <code>journalctl -u proxmenux-monitor.service -b</code>."
},
"related": {
"heading": "Autres",
"items": [
{
"href": "/docs/security/fail2ban",
"label": "Fail2Ban",
"tailRich": "— la prison <code>[proxmenux]</code> protège le moniteur sur TCP 8008."
},
{
"href": "/docs/settings",
"label": "Aperçu des paramètres",
"tail": "."
}
]
}
}
@@ -0,0 +1,81 @@
{
"meta": {
"title": "Afficher les informations de version | Documentation ProxMenux",
"description": "Diagnostic ProxMenux en lecture seule : version, canal de publication, composants enregistrés dans config.json, chemins des fichiers, catalogues de traductions et langue actuelle.",
"ogTitle": "Afficher les informations de version | Documentation ProxMenux",
"ogDescription": "Diagnostic de la version de ProxMenux, du canal de publication, des composants, des fichiers et de la langue."
},
"header": {
"title": "Afficher les informations sur la version",
"description": "Diagnostic en lecture seule. Lit version.txt, config.json et les chemins connus, puis affiche une zone de texte défilante avec la version, le canal de publication, les composants installés, la présence des fichiers, les fichiers de traduction et la langue actuelle.",
"section": "Paramètres"
},
"intro": {
"title": "Ce que c'est",
"body": "Un autodiagnostic. Utile pour signaler un problème (coller le contenu de la boîte de dialogue dans le rapport de bogue) ou confirmer une installation effectuée proprement. Ne modifie rien."
},
"reports": {
"heading": "Ce qu'il rapporte",
"headerSection": "Chapitre",
"headerSource": "Source",
"headerContent": "Contenu",
"rows": [
{
"section": "Version actuelle",
"source": "version.txt",
"contentRich": "Numéro de version sur une seule ligne ; <code>Unknown</code> si le fichier manque"
},
{
"section": "Canal de publication",
"source": "État du programme bêta dans config.json",
"content": "Stable (main) ou Beta (develop) ; version bêta si disponible"
},
{
"section": "Composants installés",
"source": "config.json",
"content": "État de chaque composant (✓ installé / créé / mis à jour, ✗ absent)"
},
{
"section": "Fichiers ProxMenux",
"source": "contrôle du système de fichiers",
"contentRich": "<code>menu</code>, <code>utils.sh</code>, <code>config.json</code>, <code>version.txt</code> présence + chemins"
},
{
"section": "Fichiers de traduction",
"source": "/usr/local/share/proxmenux/lang/",
"content": "Présence du répertoire lang/ inclus avec chaque installation"
},
{
"section": "Langue actuelle",
"source": "config.json",
"contentRich": "Code de langue de <code>.language</code> ; <code>en</code> par défaut si non défini"
}
]
},
"sampleHeading": "Exemple de sortie",
"manualHeading": "Équivalents manuels",
"troubleshoot": {
"heading": "Dépannage",
"unknownTitle": "La version affiche \"Unknown\"",
"unknownBody": "<code>/usr/local/share/proxmenux/version.txt</code> est manquant ou illisible. Le plus souvent causé par une installation partielle. Réinstaller à partir de la source officielle ProxMenux.",
"noConfigTitle": "Aucune information disponible sur l'installation",
"noConfigBody": "<code>config.json</code> manque. Sans ce fichier, le script ne peut pas énumérer les composants. Réinstallez pour le recréer.",
"wrongStatusTitle": "Un composant affiche ✗ alors que je suis sûr de l'avoir installé",
"wrongStatusBody": "Cela signifie que <code>config.json</code> ne répertorie pas ce composant comme installé : il peut s'agir d'un script qui ne s'enregistre pas encore, ou d'une installation manuelle effectuée sans ProxMenux. Le dialogue reflète le contenu de <code>config.json</code>, pas l'état réel du disque."
},
"related": {
"heading": "Autres",
"items": [
{
"href": "/docs/settings/uninstall-proxmenux",
"label": "Désinstaller ProxMenux",
"tail": "— supprimer tous ces fichiers."
},
{
"href": "/docs/settings",
"label": "Aperçu des paramètres",
"tail": "."
}
]
}
}
@@ -0,0 +1,92 @@
{
"meta": {
"title": "Désinstaller ProxMenux | Documentation ProxMenux",
"description": "Désinstallation propre de ProxMenux avec suppression facultative de jq et dialog, nettoyage des anciens fichiers de traduction et du service Monitor, et restauration des sauvegardes système.",
"ogTitle": "Désinstaller ProxMenux | Documentation ProxMenux",
"ogDescription": "Supprimer complètement ProxMenux d'un hôte Proxmox avec nettoyage de dépendance optionnel."
},
"header": {
"title": "Désinstaller ProxMenux",
"description": "Supprime ProxMenux de l'hôte Proxmox par un processus interactif : confirmation, suppression facultative des dépendances, nettoyage du service ProxMenux Monitor et restauration des sauvegardes de /root/.bashrc et /etc/motd. Une barre de progression est affichée tout au long du processus.",
"section": "Paramètres"
},
"scopeWarn": {
"title": "affecte uniquement l'installation de ProxMenux — pas vos VM / CT / stockage",
"body": "La désinstallation supprime les scripts ProxMenux, le lanceur de menu, le service Monitor facultatif et les sauvegardes de fichiers système créées par ProxMenux lors de son installation. <strong>Elle ne modifie pas vos VM, conteneurs, stockage, configuration réseau, Fail2Ban, pilote NVIDIA ni aucun autre élément installé via ProxMenux.</strong> Ces éléments restent en place."
},
"flow": {
"heading": "Déroulement de la désinstallation",
"items": [
"<strong>Dialogue de confirmation.</strong> Oui/non : « Voulez-vous vraiment désinstaller ProxMenux ? »",
"<strong>Liste des dépendances à supprimer.</strong> Propose jq et dialog. Les deux cases sont décochées par défaut ; sélectionnez uniquement les dépendances dont aucune autre application n'a besoin.",
"<strong>La suppression affiche une barre de progression.</strong> Supprime un éventuel ancien environnement de traduction, le lanceur <code>menu</code>, l'arborescence <code>/usr/local/share/proxmenux/</code>, le service ProxMenux Monitor s'il est présent avec la cible de notification enregistrée dans Proxmox VE (<code>proxmenux-webhook</code> et sa règle de correspondance), ainsi que les dépendances cochées. Restaure enfin les sauvegardes des fichiers système (voir ci-dessous).",
"<strong>Dialogue de fin.</strong> Répertorie les dépendances supprimées, puis quitte le programme."
]
},
"deps": {
"heading": "Suppression de la dépendance : ce qui est offert",
"intro": "La liste propose jq et dialog. <strong>Aucune case n'est cochée par défaut</strong> : d'autres applications peuvent utiliser ces paquets système ; il est donc plus sûr de les conserver.",
"headerType": "Installation",
"headerOffered": "Proposé à la suppression",
"rows": [
{
"type": "Versions actuelles",
"offeredRich": "<code>dialog</code>, <code>jq</code>"
},
{
"type": "Anciennes installations après mise à jour",
"offeredRich": "<code>dialog</code>, <code>jq</code>"
}
],
"warnTitle": "Paquets à l'échelle du système — réfléchir deux fois",
"warnBody": "La liste actuelle propose <code>jq</code> et <code>dialog</code>, pas <code>python3</code>. Ces paquets système peuvent être nécessaires à d'autres outils. Leur suppression peut aussi retirer des paquets dépendants ou des dépendances inutilisées. Conservez les paquets nécessaires et examinez toute proposition de suppression avant d'exécuter apt manuellement."
},
"removed": {
"heading": "Ce qui est enlevé",
"code": "/usr/local/bin/menu # the launcher\n/usr/local/share/proxmenux/ # everything: scripts, config, cache, version\n/opt/googletrans-env/ # leftover legacy translation environment\n/etc/systemd/system/proxmenux-monitor.service # Monitor service unit\n/root/.config/proxmenux-monitor/ # Monitor config dir\n # + dependencies you ticked in the checklist"
},
"restored": {
"heading": "Ce qui est restauré",
"items": [
"Si <code>/root/.bashrc.bak</code> existe → rebaptisé <code>/root/.bashrc</code> (votre bashrc original retourne).",
"Si <code>/etc/motd.bak</code> existe, ce fichier est renommé en <code>/etc/motd</code>. Sinon, sed supprime la ligne ProxMenux (<em>“This system is optimised by: ProxMenux”</em>) du motd existant."
]
},
"othersCallout": {
"title": "Les autres composants installés par ProxMenux sont conservés",
"body": "Tout ce qui est ProxMenux installé via d'autres menus — Fail2Ban, Lynis, les pilotes NVIDIA, les ajustements post-installation — n'est <strong>pas</strong> touché par ce programme de désinstallation. Chacun a son propre flux de désinstallation dans son menu respectif (ou vous pouvez le supprimer directement avec apt). Regardez d'abord <em>Afficher les informations sur la version</em> pour voir ce qui est enregistré."
},
"manual": {
"heading": "Désinstaller manuellement",
"intro": "Si pour une raison quelconque le désinstallateur de menu ne peut pas exécuter (par exemple, <code>dialog</code> déjà manquant), la séquence manuelle équivalente:",
"code": "# 1. Stop and remove the Monitor service (if installed)\nsystemctl stop proxmenux-monitor.service 2>/dev/null\nsystemctl disable proxmenux-monitor.service 2>/dev/null\nrm -f /etc/systemd/system/proxmenux-monitor.service\nrm -rf /root/.config/proxmenux-monitor\nsystemctl daemon-reload\nsystemctl reset-failed 2>/dev/null\n\n# 2. Remove a leftover legacy translation environment\nrm -rf /opt/googletrans-env\n\n# 3. Remove ProxMenux files\nrm -f /usr/local/bin/menu\nrm -rf /usr/local/share/proxmenux\n\n# 4. Restore backups\n[ -f /root/.bashrc.bak ] && mv /root/.bashrc.bak /root/.bashrc\n[ -f /etc/motd.bak ] && mv /etc/motd.bak /etc/motd \\\n || sed -i '/This system is optimised by: ProxMenux/d' /etc/motd"
},
"reinstall": {
"heading": "Réinstaller plus tard",
"body": "Exécutez à nouveau l'installateur officiel ProxMenux. Les versions actuelles utilisent un seul mode d'installation incluant les huit langues de l'interface."
},
"troubleshoot": {
"heading": "Dépannage",
"hangTitle": "La désinstallation se bloque lors de la suppression d'un ancien environnement de traduction",
"hangBody": "Les versions actuelles suppriment un environnement résiduel avec <code>rm -rf /opt/googletrans-env</code> ; elles n'exécutent pas <code>pip uninstall</code>. Si cette étape se bloque, examinez-la depuis un autre shell et vérifiez le système de fichiers de l'hôte avant de réessayer.",
"aptTitle": "apt signale des paquets encore utilisés lors de la suppression des dépendances",
"aptBody": "Les paquets sélectionnés sont marqués comme automatiques et transmis à <code>apt-get -y --purge autoremove</code>. Cela ne garantit pas la protection des services dépendants. Laissez les dépendances décochées si d'autres outils les utilisent et examinez les suppressions proposées par apt avant tout nettoyage manuel.",
"motdTitle": "MOTD affiche toujours la ligne ProxMenux après désinstallation",
"motdBody": "Il se peut que <code>/etc/motd.bak</code> n'existe pas et que sed n'ait pas trouvé la ligne (par exemple, si elle a été modifiée). Modifiez <code>/etc/motd</code> manuellement et supprimez toute ligne ProxMenux restante."
},
"related": {
"heading": "Autres",
"items": [
{
"href": "/docs/settings/show-version-information",
"label": "Afficher les informations sur la version",
"tail": "— voir ce qui serait enlevé avant de désinstaller."
},
{
"href": "/docs/settings",
"label": "Aperçu des paramètres",
"tail": "."
}
]
}
}
@@ -0,0 +1,123 @@
{
"meta": {
"title": "Hôte : ajouter une cible iSCSI comme stockage Proxmox | Documentation ProxMenux",
"description": "Enregistrez une cible iSCSI comme stockage Proxmox avec ProxMenux. L’outil installe open-iscsi, découvre le portail via sendtargets, permet de choisir la cible et exécute pvesm add iscsi. Il fournit des périphériques bloc bruts pour les images disque des VM.",
"ogTitle": "Hôte : ajouter une cible iSCSI comme stockage Proxmox | Documentation ProxMenux",
"ogDescription": "Enregistrer une cible iSCSI comme stockage Proxmox avec découverte guidée. Utilise pvesm add iscsi et fournit des périphériques de blocs bruts pour les disques VM."
},
"header": {
"title": "Hôte : Ajouter une cible iSCSI comme stockage Proxmox",
"description": "Enregistrez une cible iSCSI (à partir d'un SAN, TrueNAS / FreeNAS, Synology, une cible Windows Server, n'importe quel baie compatible avec iSCSI) comme stockage Proxmox. Les LUN exportés apparaissent comme des périphériques de blocs et peuvent héberger des images de disque VM à des performances quasi locales sur le réseau.",
"section": "Stockage et partage · Hôte"
},
"intro": {
"title": "Ce que ça fait",
"body": "ProxMenux enveloppe <code>pvesm add iscsi</code> avec un flux guidé: il installe <code>open-iscsi</code> si nécessaire, demande le portail iSCSI (IP:port), exécute <code>iscsiadm --mode discovery --type sendtargets</code> contre lui, vous permet de choisir une cible IQN, et enregistre le stockage iSCSI dans Proxmox. Le service <code>iscsid</code> maintient ensuite la session iSCSI en vie à travers les reboots."
},
"vocab": {
"heading": "vocabulaire iSCSI (référence rapide)",
"headerTerm": "Terme",
"headerMeaning": "Signification",
"rows": [
{
"term": "Portail",
"meaningRich": "Le point d’accès du service iSCSI sur le serveur cible : une adresse IP (ou un nom d’hôte) et un port TCP. Le port par défaut est <code>3260</code> ; ProxMenux l’utilise si aucun autre n’est indiqué."
},
{
"term": "Cible",
"meaningRich": "Un seul \"serveur\" exporté à l'intérieur du portail, identifié par son IQN (<em>iSCSI Nom qualifié</em>). Un portail peut accueillir de nombreuses cibles."
},
{
"term": "IQN",
"meaningRich": "La forme canonique est <code>iqn.YYYY-MM.reverse.domain:identifier</code>, par exemple <code>iqn.2024-08.com.truenas:proxmox-pool</code>. La cible et l'initiateur ont leur propre IQN."
},
{
"term": "LUN",
"meaningRich": "Un périphérique bloc à l'intérieur d'une cible (numéro d'unité logique). Une seule cible peut exposer plusieurs LUN ; chaque LUN apparaît comme son propre disque dans Proxmox et peut devenir un disque VM."
},
{
"term": "Initiateur",
"meaningRich": "Le client qui se connecte à une cible — dans ce cas, votre hôte Proxmox. L'initiateur a son propre IQN stocké dans <code>/etc/iscsi/initiatorname.iscsi</code>. Les cibles n'acceptent généralement que les sessions des IQN des initiateurs préautorisés."
}
]
},
"opening": {
"heading": "Ouverture de l'outil",
"body": "Depuis le menu principal de ProxMenux, ouvrez <strong>Storage &amp; Share Manager → Ajouter iSCSI Target comme Proxmox Storage</strong>. Vous verrez ce menu sub avec quatre options :",
"imageAlt": "Menu du gestionnaire d'hôtes iSCSI — Ajouter / Afficher / Supprimer / Tester la connectivité"
},
"howRuns": {
"heading": "Comment fonctionne le script (Ajouter le flux)",
"body": "Le flux a deux phases avec une séparation claire entre \"la mise en place de l'initiateur, la découverte des cibles\" et \"l'enregistrement effectif du stockage dans Proxmox\". Contrairement à NFS / Samba, il n'y a pas d'auto-découverte sur le sous-réseau — vous devez connaître l'adresse du portail (iSCSI n'est pas convivial pour la diffusion)."
},
"add": {
"heading": "Ajouter la cible iSCSI comme stockage Proxmox",
"items": [
"<strong>Saisie du portail</strong> — tapez l'IP ou le nom d'hôte du serveur cible iSCSI. Port <code>3260</code> est supposé sauf si vous tapez <code>host:port</code>.",
"<strong>Découverte des cibles</strong> — ProxMenux appelle <code>iscsiadm --mode discovery --type sendtargets --portal &lt;ip:port&gt;</code>. Le serveur répond avec chaque IQN qu'il permet à cet initiateur de voir. Si la découverte échoue, le script affiche l'erreur exacte de <code>iscsiadm</code> et énumère les causes courantes (mauvaise IP, pare-feu, initiateur IQN non autorisé).",
"<strong>Sélection des cibles</strong> — une seule cible est sélectionnée automatiquement; plusieurs cibles affichent un menu.",
"<strong>Storage ID</strong> — par défaut <code>iscsi-&lt;last IQN segment, 20 chars max&gt;</code>. Seulement lettres, chiffres, <code>-</code> et <code>_</code>.",
"<strong>Type de contenu</strong> — contrairement à NFS / Samba, le contenu iSCSI est <strong>fixé à <code>images</code></strong>. iSCSI expose les périphériques de blocs bruts, pas un système de fichiers, donc Proxmox vous permet seulement d'héberger des disques VM sur lui."
],
"authTitle": "Autoriser l'initiateur Proxmox sur la cible",
"authBody1": "Avant que le flux Add ne fonctionne de bout en bout, la cible iSCSI doit connaître votre hôte Proxmox. Obtenez votre initiateur IQN:",
"authBody2": "Ajoutez cet IQN à la liste d’accès de la cible (TrueNAS : <em>Sharing → Block → Initiators Groups</em> ; Synology : <em>SAN Manager → iSCSI → Target → Edit → Initiators</em> ; etc.). Si l’initiateur n’est pas autorisé, la découverte avec <code>iscsiadm</code> renvoie une liste vide ou une erreur d’authentification."
},
"manual": {
"heading": "Équivalent manuel",
"body": "La procédure complète correspond aux commandes suivantes :"
},
"view": {
"heading": "Affichage des stockages iSCSI configurés",
"body": "Liste toutes les entrées iSCSI dans Proxmox (<code>pvesm status | awk ''$2 == \"iscsi\"''</code>) avec portail, cible IQN, type de contenu et statut en direct."
},
"remove": {
"heading": "Supprimer le stockage iSCSI",
"body": "Exécute <code>pvesm remove &lt;storage-id&gt;</code> après avoir confirmé portail, cible et contenu. Seul l’enregistrement Proxmox est supprimé — <strong>la cible iSCSI elle-même n'est pas touchée</strong> et les sessions existantes du côté noyau peuvent durer jusqu'au prochain redémarrage.",
"warnTitle": "Vérifiez d’abord les disques VM existants sur cet iSCSI",
"warnBody": "Supprimer un stockage iSCSI alors que des VM y possèdent encore des disques laisse ces VM pointer vers un stockage absent. Proxmox signale l’erreur, mais les données LUN restent intactes sur la cible : vous pouvez réenregistrer le stockage pour retrouver les disques. Déplacez ou sauvegardez toutefois les VM au préalable par précaution."
},
"test": {
"heading": "Tester la connectivité iSCSI",
"body": "Exécute une passe de diagnostic : vérifie que <code>iscsiadm</code> est installé, imprime votre initiateur IQN, confirme que <code>iscsid</code> fonctionne, pinge chaque portail enregistré, sonde son port, et signale <code>pvesm status</code> plus si une session iSCSI est actuellement active (<code>iscsiadm --mode session</code>). Session active plus portail accessible, mais \"inactive\" dans Proxmox signifie généralement un état obsolète — essayez <code>pvesm set &lt;id&gt; --disable 0</code>."
},
"troubleshoot": {
"heading": "Dépannage",
"portalTitle": "\"Impossible d'atteindre le portail\" mais l'IP du serveur répond ailleurs",
"portalBody": "Ping a échoué sur l'adresse du portail. Vérifiez que vous atteignez l'interface <em>réseau de stockage</em> (iSCSI vit souvent sur un réseau VLAN / sous-net séparé du réseau de gestion). Vérifiez également DNS si vous avez tapé un nom d'hôte.",
"discoverTitle": "\"la découverte iSCSI a échoué\" de l'iscsiadm",
"discoverIntro": "Le script montre l'erreur exacte. Causes les plus courantes:",
"discoverItems": [
"Portal IP / port incorrect (double vérification, par défaut est 3260).",
"Le service iSCSI ne fonctionne pas sur le serveur cible.",
"Pare-feu bloque 3260 entre Proxmox et la cible.",
"<strong>L’IQN de l’initiateur n’est pas autorisé sur la cible.</strong> Cause la plus fréquente sur les baies professionnelles. Ajoutez d’abord l’IQN Proxmox à l’ACL des initiateurs de la cible."
],
"noTargetTitle": "Aucune cible trouvée mais la découverte a réussi",
"noTargetBody": "Le serveur a accepté votre initiateur mais ne lui expose aucune cible. Vérifiez les contrôles d’authentification et d’accès : certaines baies autorisent la découverte pour tous les IQN mais filtrent les cibles visibles par chacun.",
"noLunTitle": "Les LUNs n'apparaissent pas dans /dev/disk/by-path après enregistrement",
"noLunBody": "<code>pvesm add iscsi</code> a réussi mais le noyau ne voit pas les périphériques de blocs. Vérifiez <code>iscsiadm --mode session</code> — Si aucune session n'est active, démarrez manuellement avec <code>iscsiadm --mode node --login</code>. Si une session existe mais qu'aucun LUN n'apparaît, forcez un rescan : <code>iscsiadm --mode session --rescan</code>. Si rien n'est encore fait, la cible n'a probablement pas encore de LUN assigné à cet IQN (configurer la cartographie LUN sur la cible).",
"chapTitle": "Authentification CHAP",
"chapBody": "ProxMenux ne propose pas de champs utilisateur/mot de passe CHAP dans le processus interactif. Si la découverte échoue, le script s’arrête avant <code>pvesm add</code> ; le stockage n’est pas enregistré malgré l’échec. Configurez séparément les exigences CHAP de la cible dans <code>open-iscsi</code>, y compris l’authentification de découverte si nécessaire, puis réessayez. Vérifiez la configuration avec <code>iscsiadm</code> et les sessions actives avec <code>iscsiadm --mode session</code>."
},
"related": {
"heading": "Autres",
"items": [
{
"href": "/docs/storage-share/host-nfs",
"label": "Partage NFS comme stockage Proxmox",
"tail": "— alternative au niveau des fichiers. Plus simple à configurer, plus flexible (backup / ISO / tmpl / images), légèrement plus lent pour les disques en direct VM."
},
{
"href": "/docs/storage-share/host-samba",
"label": "Samba / CIFS comme stockage Proxmox",
"tail": " — une autre option au niveau des fichiers ; à éviter pour les disques des VM actives en raison de la sémantique des verrous."
},
{
"href": "/docs/storage-share/host-local-disk",
"label": "Ajouter le disque local comme stockage Proxmox",
"tail": "— lorsque le disque est local à l'hôte Proxmox, pas sur une autre boîte sur le réseau."
}
]
}
}
@@ -0,0 +1,186 @@
{
"meta": {
"title": "Hôte : Ajouter le disque local comme stockage Proxmox ProxMenux Documentation",
"description": "Formatez un disque SATA, SAS ou NVMe local sur un hôte Proxmox et enregistrez-le comme stockage de type répertoire ou pool ZFS. L’outil vérifie les disques, exige une confirmation avant les opérations destructives, configure fstab par UUID, crée les pools ZFS et utilise pvesm add dir / zfspool.",
"ogTitle": "Hôte : Ajouter le disque local comme stockage Proxmox ProxMenux Documentation",
"ogDescription": "Formatez un disque local et enregistrez-le comme stockage répertoire ou pool ZFS dans Proxmox avec une procédure guidée et des filtres de sécurité."
},
"header": {
"title": "Hôte : Ajouter un disque local comme stockage Proxmox",
"description": "Choisissez un disque physique sur l’hôte Proxmox, formatez-le si nécessaire en ext4, xfs, btrfs ou zfs, puis enregistrez-le comme stockage répertoire avec pvesm add dir ou comme pool ZFS avec pvesm add zfspool. ProxMenux écarte le disque système et les disques utilisés, et annonce chaque opération destructive avant de l’exécuter.",
"section": "Stockage et partage · Hôte"
},
"intro": {
"title": "Ce que ça fait",
"body": "D'autres outils <em>Host</em> dans cette section traitent du stockage <strong>réseau</strong> (NFS / Samba / iSCSI). Celui-ci traite des disques <strong>locaux</strong> — disques de rechange physiquement attachés à votre hôte Proxmox que vous souhaitez utiliser pour les disques, sauvegardes, ISO ou modèles VM. ProxMenux prépare le disque (partitionnement + formatage + montage) et l'enregistre dans Proxmox afin que l'interface utilisateur puisse y placer du contenu."
},
"destructive": {
"title": "Outil destructif pour le chemin 'format'",
"body": "L’option <em>Formater</em> <strong>détruit les partitions et données existantes du disque sélectionné</strong>. ProxMenux affiche un avertissement, filtre les disques utilisés et exige une confirmation avant <code>wipefs</code> / <code>sgdisk</code> / <code>mkfs</code>. Ce n’est pas un écrasement sécurisé de chaque octet. Vérifiez deux fois le chemin du périphérique avant de confirmer."
},
"compare": {
"heading": "Répertoire ou pool ZFS — que choisir ?",
"headerDir": "Répertoire (ext4 / xfs / btrfs)",
"headerZfs": "Pool ZFS",
"rows": [
{
"label": "Type de stockage Proxmox",
"dirRich": "<code>dir</code>",
"zfsRich": "<code>zfspool</code>"
},
{
"label": "Format du disque VM",
"dir": "Fichier qcow2 / raw dans un système de fichiers",
"zfs": "Ensemble de données Native ZFS (zvol) par disque"
},
{
"label": "Instantanés",
"dir": "qcow2 snapshots; btrfs snapshots si fs=btrfs",
"zfs": "Natif, instantané, copie à l'écriture"
},
{
"label": "Allocation fine",
"dir": "Oui (par défaut qcow2)",
"zfs": "Oui (ZFS par défaut)"
},
{
"label": "Besoins en RAM",
"dir": "Faible",
"zfs": "Élevés — ZFS utilise la RAM disponible comme cache ARC"
},
{
"label": "Prend en charge les types de contenu",
"dir": "images, backup, iso, vztmpl, snippets, rootdir",
"zfs": "images et rootdir uniquement (stockage en blocs)"
},
{
"label": "Meilleur pour",
"dir": "Disque à usage général: mélange de disques VM, sauvegardes, ISO",
"zfs": "Pure disque de données VM / LXC avec instantané + besoins d'intégrité"
}
]
},
"opening": {
"heading": "Ouverture de l'outil",
"body": "Dans le menu principal de ProxMenux, ouvrez <strong>Storage &amp; Share Manager → Add Local Disk as Proxmox Storage</strong>. Le sous-menu comporte quatre options :",
"imageAlt": "Menu Local Disk Manager — Ajouter / Afficher / Supprimer / Liste des disques disponibles"
},
"howRuns": {
"heading": "Comment fonctionne le script (Ajouter le flux)",
"body": "La procédure comporte deux phases avec un filtre de sécurité à trois vérifications. Phase 1 découvre les disques sûrs, décide ce qu'il faut faire avec celui choisi et recueille les paramètres de stockage; Phase 2 fait le travail destructeur. Jusqu'à la confirmation finale, le disque est intact."
},
"format": {
"heading": "Formater un disque vide",
"intro": "Le chemin pour un disque frais ou un disque dont le contenu ne vous intéresse pas.",
"items": [
"Choisissez le disque (système / disques en usage sont cachés).",
"Choisissez \"Format disque (ERASE toutes les données)\".",
"Choisissez le système de fichiers — voir le tableau ci-dessus pour les compromis.",
"ID de stockage (<code>disk-&lt;device&gt;</code> par défaut), chemin de montage, préréglage de type contenu.",
"Confirmez dans le dialogue <strong>CONFIRMATION FINALE — LES DONNÉES SERONT EFFACÉES</strong>.",
"ProxMenux efface la table de partitions et crée une partition sur tout le disque. Il exécute <code>mkfs.&lt;fs&gt;</code> ou <code>zpool create</code>, puis monte le résultat. Les systèmes de fichiers classiques reçoivent une entrée UUID dans <code>/etc/fstab</code> avec <code>defaults,nofail</code> ; ZFS utilise la configuration de montage du pool. Si <em>Comme stockage Proxmox</em> est coché (toujours le cas pour ZFS), il est ensuite enregistré avec <code>pvesm add dir</code> ou <code>pvesm add zfspool</code> ; sinon, il reste un simple montage de l’hôte."
],
"tipTitle": "Pourquoi UUID + nofail dans /etc/fstab",
"tipBody": "Le script écrit <code>UUID=… /mnt/&lt;id&gt; &lt;fs&gt; defaults,nofail 0 2</code>. UUID survit à la réorganisation de l'appareil à travers les reboots (ainsi <code>/dev/sdc</code> devenir <code>/dev/sdd</code> ne casse pas le démarrage). <code>nofail</code> signifie que si le disque disparaît un jour (défaut de matériel, débranché), Proxmox démarre quand même — le stockage se montrera comme inactif jusqu'à ce que le disque revienne."
},
"reuse": {
"heading": "Réutiliser un système de fichiers existant",
"intro": "Le chemin pour un disque sur lequel vous souhaitez conserver les données — peut-être l'avez-vous déplacé d'un autre hôte Proxmox, ou le disque a déjà des sauvegardes / ISO que vous voulez garder accessible.",
"items": [
"Choisissez le disque.",
"Choisir « Utiliser le système de fichiers existant ».",
"ID de stockage, chemin de montage, préréglage de type contenu.",
"ProxMenux ne touche <strong>pas</strong> aux données : il crée le point de montage, monte le disque, ajoute une entrée UUID à <code>/etc/fstab</code> et l'enregistre en tant que stockage Proxmox <code>dir</code>."
],
"warnTitle": "Le chemin de réutilisation ne gère pas ZFS pools",
"warnBody": "Si le disque contient déjà un pool ZFS, le chemin <em>reuse</em> essaie ici de le monter en tant que système de fichiers régulier — qui échoue. Pour importer un pool ZFS existant, utilisez <code>zpool import &lt;name&gt;</code> sur la ligne de commande, puis enregistrez-le manuellement avec <code>pvesm add zfspool</code>."
},
"presets": {
"heading": "Préréglages de type contenu",
"intro": "ProxMenux propose trois préréglages et une option personnalisée. La liste de contenu choisie est transmise à <code>pvesm add … --content &lt;csv&gt;</code> :",
"headerPreset": "Préréglage",
"headerContent": "Chaîne de contenu",
"headerUse": "Cas d'utilisation",
"rows": [
{
"preset": "Stockage VM",
"content": "images,backup",
"use": "Un magasin de disques VM dédié qui conserve également les sauvegardes de ces VMs à proximité."
},
{
"preset": "NAS standard",
"content": "backup,iso,vztmpl",
"use": "Une archive / disque multimédia — sauvegardes, ISOs et modèles LXC. Pas de disques VM en direct ici."
},
{
"preset": "Tous types",
"content": "images,backup,iso,vztmpl,snippets",
"use": "Ce préréglage étendu active images, sauvegardes, ISO, modèles LXC et snippets. Ajoutez d’autres types pris en charge, comme rootdir, via Personnalisé si nécessaire."
},
{
"preset": "Personnalisé",
"content": "(saisie libre)",
"useRich": "Tapez le CSV exact vous-même, par exemple. <code>images</code> seul ou <code>rootdir,images</code>."
}
],
"zfsTitle": "ZFS pool le contenu est plus étroit",
"zfsBody": "Avec <strong>zfs</strong>, un <code>zfspool</code> accepte uniquement <code>images</code> et <code>rootdir</code>, pas les fichiers ISO ou de sauvegarde. Saisissez une liste compatible via Personnalisé. Le script la transmet sans modification ; des types non pris en charge peuvent faire échouer l’enregistrement. Vérifiez ensuite <code>pvesm status</code>."
},
"manual": {
"heading": "Équivalent manuel",
"extIntro": "Format + enregistrer un disque comme stockage de répertoire ext4 :",
"zfsIntro": "Ou comme un pool ZFS:"
},
"view": {
"heading": "Afficher les stockages de disques",
"body": "Liste tous les stockages Proxmox soutenus par un disque (les deux <code>dir</code> et <code>zfspool</code> qui sont créés par l'utilisateur — système pools comme <code>rpool</code> sont cachés). Affiche le chemin de montage / pool nom, types de contenu et statut en direct."
},
"remove": {
"heading": "Supprimer le stockage du disque",
"body": "Désenregistre le stockage de Proxmox (<code>pvesm remove</code>) et propose de nettoyer l'entrée correspondante dans <code>/etc/fstab</code>. Pour ZFS pools, le script <strong>ne détruit pas</strong> automatiquement le pool — il s'agit d'une étape <code>zpool destroy &lt;name&gt;</code> distincte que vous effectuez manuellement lorsque vous êtes sûr.",
"warnTitle": "Données et dépendances existantes VM",
"warnBody": "La suppression du stockage ne touche pas le système de fichiers ou le pool — les données restent sur le disque. Mais VMs / CTs qui font référence à ce stockage par ID échouera à démarrer après la suppression. Déplacez ces disques VM vers un autre stockage (ou prenez une sauvegarde) avant de les supprimer."
},
"list": {
"heading": "Liste des disques disponibles",
"body": "Une vue diagnostique en lecture seule : imprime la sortie de <code>lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINT,MODEL</code> suivie des stockages <code>dir</code> / <code>zfspool</code> Proxmox en est déjà au courant. Bon premier arrêt lorsque vous ouvrez l'outil et que vous voulez voir \"ce qui est sur cet hôte?\" avant d'ajouter quelque chose."
},
"troubleshoot": {
"heading": "Dépannage",
"noDisksTitle": "\"Aucun disque disponible trouvé\"",
"noDisksIntro": "Le filtre de sécurité a caché chaque disque. Raisons communes:",
"noDisksItems": [
"Seul le disque racine est présent.",
"Tous les autres disques font partie d'un tableau actif ZFS / LVM / RAID.",
"Chaque disque est référencé par une config VM ou LXC (passthrough).",
"Le disque est en lecture seule (défaillance matérielle ou dispositif de blocage des écritures)."
],
"noDisksOutro": "Utiliser <em>List Disques disponibles</em> dans le menu pour voir la sortie brute <code>lsblk</code> et comprendre ce qui se passe.",
"mountedTitle": "Le format échoue avec \"le dispositif est monté\"",
"mountedBody": "Quelque chose a monté automatiquement le disque (udisksd, un gestionnaire de bureau, une unité de systemd persistante). Démonter : <code>umount /dev/sdX?*</code> ou <code>systemctl stop &lt;whatever-mounts-it&gt;</code>, puis réessayer. Le filtre de sécurité du script devrait avoir des disques cachés montés, donc si vous avez atteint cette erreur, le montage s'est produit entre le menu montrant et vous confirmant.",
"zpoolTitle": "Échec de zpool create : « invalid vdev specification »",
"zpoolBody": "En général, le disque a encore des signatures GPT/LVM/ZFS que <code>zpool</code> refuse d'écraser sans force. Le script exécute <code>wipefs</code> et <code>sgdisk --zap-all</code> avant le format, mais un disque très têtu peut encore avoir une étiquette obstinée. Forcez un nettoyage manuellement : <code>zpool labelclear -f /dev/sdX</code> ou <code>dd if=/dev/zero of=/dev/sdX bs=1M count=10</code> et réessayez.",
"inactiveTitle": "Le stockage s'affiche comme inactif après redémarrage",
"inactiveBody": "Vérifiez <code>findmnt &lt;mount-path&gt;</code> — si le montage est manquant, quelque chose dans <code>/etc/fstab</code> a échoué. <code>dmesg | tail</code> pointe habituellement à la raison (inadéquation UUID, corruption du système de fichiers, <code>nofail</code> a abandonné la réessayer). Un <code>mount -a</code> réactive habituellement le stockage une fois la cause réglée."
},
"related": {
"heading": "Autres",
"items": [
{
"href": "/docs/disk-manager/format-disk",
"label": "Gestionnaire de disques : formater / effacer un disque physique",
"tail": "— alternative de bas niveau lorsque vous voulez simplement préparer un disque sans l'enregistrer comme stockage Proxmox."
},
{
"href": "/docs/storage-share/host-iscsi",
"label": "Ajouter la cible iSCSI comme stockage Proxmox",
"tail": " — équivalent réseau lorsque le périphérique bloc se trouve sur une autre machine."
},
{
"href": "/docs/storage-share/host-local-shared",
"label": "Ajouter un répertoire partagé sur l'hôte",
"tail": " — prépare un répertoire sur l’hôte pour les bind mounts LXC, sans l’enregistrer comme stockage Proxmox."
}
]
}
}
@@ -0,0 +1,103 @@
{
"meta": {
"title": "Hôte : ajouter un répertoire partagé | Documentation ProxMenux",
"description": "Créez un répertoire hôte prêt pour les bind mounts LXC, avec des permissions adaptées aux conteneurs privilégiés et non privilégiés. Sticky bit, rwx pour tous et ACL par défaut pour l’héritage.",
"ogTitle": "Hôte : ajouter un répertoire partagé | Documentation ProxMenux",
"ogDescription": "Préparer un répertoire hôte pour les bind mounts LXC avec des permissions compatibles avec des CT privilégiés et non privilégiés."
},
"header": {
"title": "Host : Ajouter un répertoire partagé sur Host",
"description": "Créer un répertoire hôte conçu pour être monté sur un ou plusieurs conteneurs LXC. ProxMenux applique un ensemble de permissions qui fonctionne à la fois pour les CT privilégiés et non privilégiés à la fois — pas de maux de tête UID décalés, pas de chowns par conteneur — et enregistre le répertoire afin que le gestionnaire de montage LXC puisse le récupérer plus tard.",
"section": "Stockage et partage · Hôte"
},
"intro": {
"title": "Ce que c'est (et n'est PAS)",
"body": "Cet outil n'enregistre <strong>pas</strong> quoi que ce soit dans Proxmox (pas de <code>pvesm add</code> ici). Il prépare simplement un répertoire sur l'hôte — <code>/mnt/shared</code>, par défaut — avec des autorisations que tout conteneur LXC peut lire et écrire, que le CT soit privilégié ou non. L'étape suivante habituelle consiste à le monter en liaison dans chaque CT avec le <mountLink>LXC Mount Manager</mountLink>."
},
"why": {
"heading": "Pourquoi un outil dédié à cette tâche",
"intro": "Lorsque vous liez un répertoire hôte dans un conteneur LXC, les permissions dépendent de :",
"items": [
"Si le CT est <strong>privilégié</strong> (UID 0 du CT = UID 0 de l’hôte) ou <strong>non privilégié</strong> (UID 0 du CT = UID 100000 de l’hôte — tout est décalé de +100000).",
"Le propriétaire du répertoire hôte (un fichier appartenant à l’UID 1000 sur l’hôte relève des permissions « autres » pour un CT non privilégié, car aucun utilisateur du CT ne correspond à cet UID hôte).",
"Indique si plusieurs CT partagent le même répertoire (différents CT peuvent avoir des plages UID différentes)."
],
"outro": "ProxMenux choisit ici une solution pratique : <strong>donner accès à tout le monde</strong> au niveau du système de fichiers, avec rwx pour tous, le sticky bit et des ACL pour l’héritage des permissions. Tout UID mappé peut lire et écrire ; aucun alignement des UID/GID n’est nécessaire."
},
"howRuns": {
"heading": "Comment fonctionne le script",
"body": "Le script n'a pas de menu principal — il exécute une seule action, <strong>Créer répertoire partagé</strong>. Phase 1 recueille le chemin cible; Phase 2 crée le répertoire et applique les permissions."
},
"bits": {
"heading": "Ce que chaque bit de permission fait",
"intro": "Le numéro <strong>1777</strong> n'est pas arbitraire — c'est le même mode que Linux utilise pour <code>/tmp</code>. Trois propriétés combinées:",
"headerBit": "Bit",
"headerEffect": "Effet",
"headerWhy": "Pourquoi c'est important ici",
"rows": [
{
"bit": "1 (sticky bit)",
"effect": "Seuls le propriétaire du fichier, celui du répertoire ou un processus suffisamment privilégié peuvent supprimer ou renommer le fichier.",
"why": "Limite la suppression des fichiers d’autres utilisateurs ayant des UID mappés différents. N’isole pas les CT partageant un UID mappé ou un accès root privilégié."
},
{
"bit": "777 (rwx-rwx-rwx)",
"effect": "Tout le monde peut lire, écrire et traverser.",
"why": "Les UIDs CT non privilégiés (100000+) apparaissent comme des \"autres\" de l'hôte, de sorte que world-rwx leur donne accès."
},
{
"bit": "ACL (par défaut)",
"effect": "Hérité sur chaque fichier / sous-dir nouvellement créé.",
"why": "Le nouveau contenu hérite des ACL par défaut sans réexécuter le script. Les applications peuvent toutefois demander des modes restrictifs ou modifier les permissions ensuite."
}
],
"privTitle": "Les CT privilégiés voient la même chose, juste sans le changement",
"privBody": "Pour un CT privilégié, UID 0 dans le CT est UID 0 sur l'hôte, de sorte que <code>root</code> à l'intérieur du CT peut lire / écrire le répertoire hôte directement. Le <code>1777</code> est toujours bien — cela signifie simplement que les utilisateurs non root à l'intérieur du CT peuvent également utiliser le répertoire. Les mêmes autorisations couvrent les deux cas."
},
"where": {
"heading": "Où mettre le répertoire partagé",
"intro": "Le localisateur offre quatre options :",
"opt1Title": "1. Créer un nouveau dossier dans /mnt",
"opt1Body": "Le choix habituel. Le ProxMenux suggère automatiquement la première dénomination libre (<code>shared</code>, <code>shared2</code>, <code>shared3</code>, ...). Il suffit de confirmer ou de taper un nom différent.",
"opt2Title": "2. Saisissez le chemin personnalisé",
"opt2Body": "Pour les répertoires hors <code>/mnt</code>. Tout chemin absolu fonctionne (par exemple : <code>/srv/media</code>, <code>/data/family</code>). Le script applique les mêmes permissions.",
"opt3Title": "3. Afficher les dossiers existants dans /mnt",
"opt3Body": "Diagnostic en lecture seule : liste chaque répertoire sous <code>/mnt</code> avec ses permissions, son propriétaire et son espace disponible. Utile avant de créer un nouveau pour éviter les collisions de noms.",
"opt4Title": "4. Annuler",
"opt4Body": "Quitte sans rien créer, comme la touche <kbd>Esc</kbd>.",
"tipTitle": "Où vit /mnt ?",
"tipBody": "Par défaut, <code>/mnt</code> se trouve sur le système de fichiers racine Proxmox. Si vous voulez le répertoire partagé sur un disque différent (un disque de données, un pool ZFS), montez ce disque sous <code>/mnt/&lt;name&gt;</code> d'abord (Disk Manager ou <diskLink>Ajouter le disque local comme stockage Proxmox</diskLink>), puis créez le répertoire partagé comme sous-dossier à l'intérieur — ou choisissez \"Entrer le chemin personnalisé\" ici et pointez sur le disque monté."
},
"manual": {
"heading": "Équivalent manuel",
"body": "Tout le flux peut être rejoué à la main:"
},
"next": {
"heading": "Étape suivante : bind mount dans les conteneurs",
"body": "La création du répertoire ne fait que le préparer — aucun conteneur ne le voit encore. Pour le rendre visible à l'intérieur d'un ou plusieurs LXC, utilisez le <mountLink>LXC Mount Manager</mountLink> pour lier le montage de <code>/mnt/&lt;name&gt;</code> dans les CT. Étant donné que les autorisations sont déjà ouvertes, Mount Manager <strong>ne proposera pas</strong> de les modifier : le répertoire est prêt à être utilisé tel quel."
},
"troubleshoot": {
"heading": "Dépannage",
"mkdirTitle": "\"Failed to create directory\"",
"mkdirBody": "Habituellement un problème de système de fichiers: <code>/mnt</code> est sur un système de fichiers en lecture seule, le chemin contient un composant qui n'est pas un répertoire (par exemple, vous avez tapé <code>/etc/passwd/sub</code>), ou le disque est plein. Vérifiez avec <code>df -h /mnt</code> et <code>mount | grep /mnt</code>.",
"writeTitle": "Conteneur ne peut pas écrire malgré les autorisations ouvertes",
"writeBody": "Vérifiez que le CT utilise bien le bind mount (<code>pct config &lt;ctid&gt; | grep ^mp</code>). À l'intérieur du CT, exécutez <code>touch /mnt/data/test-$(date +%s)</code> — si cela échoue avec la permission refusée, le montage peut être sur un système de fichiers hôte qui n'honore pas les ACL (certaines anciennes <code>ext3</code> ou <code>vfat</code> montures). Déplacez le répertoire partagé vers un support ext4 / xfs / btrfs / zfs.",
"aclTitle": "ACL commande silencieusement indisponible",
"aclBody": "Sur une installation Proxmox minimale <code>setfacl</code> / <code>getfacl</code> peuvent ne pas être installés. Le script tombe gracieusement (contrôle <code>command -v setfacl</code>) et n'applique que les permissions POSIX — ce qui est souvent suffisant, mais les nouveaux fichiers n'hériteront pas automatiquement du profil permissif. Installez <code>acl</code> avec <code>apt-get install -y acl</code> et réexécutez le script dans le répertoire."
},
"related": {
"heading": "Autres",
"items": [
{
"href": "/docs/storage-share/lxc-mount-points",
"label": "Gestionnaire de montage LXC",
"tail": "— l'étape suivante naturelle: lier ce répertoire dans un ou plusieurs conteneurs."
},
{
"href": "/docs/storage-share/host-local-disk",
"label": "Ajouter le disque local comme stockage Proxmox",
"tailRich": "— si vous voulez le répertoire partagé sur un disque dédié, préparez le disque d'abord, montez-le sous <code>/mnt</code>, puis créez le sous-dossier partagé ici."
}
]
}
}
@@ -0,0 +1,174 @@
{
"meta": {
"title": "Hôte : monter un partage NFS | Documentation ProxMenux",
"description": "Montez une exportation externe de NFS sur l'hôte Proxmox — soit sous forme de stockage Proxmox (pvesm add nfs), soit sous forme de montage fstab (NON visible dans Datacenter > Storage), ou les deux. La méthode fstab est idéale pour lier le partage dans les conteneurs LXC sans l'exposer comme stockage Proxmox.",
"ogTitle": "Hôte : monter un partage NFS | Documentation ProxMenux",
"ogDescription": "Montez un export NFS externe sur l’hôte Proxmox via pvesm, fstab ou les deux. La méthode fstab convient aux bind mounts LXC."
},
"header": {
"title": "Hôte : monter un partage NFS sur l’hôte",
"description": "Montez une exportation externe de NFS (à partir d'un NAS, d'un autre serveur, d’un partage homelab...) sur l'hôte Proxmox. Choisissez une ou les deux méthodes : enregistrez-la en tant que stockage Proxmox (visible dans Datacenter > Storage) et/ou ajoutez un montage simple /etc/fstab sur un chemin que vous choisissez (utile pour lier le partage dans des conteneurs LXC sans l'exposer comme stockage Proxmox).",
"section": "Stockage et partage · Hôte"
},
"intro": {
"title": "Ce que ça fait",
"body": "ProxMenux propose deux méthodes de montage pour toute exportation de NFS : <strong>(1) Stockage Proxmox</strong> via <code>pvesm add nfs</code> — le partage apparaît dans Datacenter > Stockage et Proxmox gère le montage à <code>/mnt/pve/&lt;id&gt;</code>; <strong>(2) Montage fstab sur l’hôte</strong> sur un chemin que vous choisissez — persistant via <code>/etc/fstab</code>, NON visible comme stockage Proxmox, idéal pour le montage au niveau des conteneurs LXC (l'UI Proxmox reste propre). Vous pouvez exécuter une méthode, l'autre, ou les deux."
},
"opening": {
"heading": "Ouverture de l'outil",
"body": "Dans le menu principal de ProxMenux, ouvrez <strong>Storage &amp; Share Manager → Mount NFS Share on Host</strong>. Le sous-menu comporte quatre options :",
"imageAlt": "Menu NFS Host Manager — Monter / Afficher / Supprimer / Tester la connectivité"
},
"howRuns": {
"heading": "Comment fonctionne le script",
"body": "Le flux a deux phases avec une séparation claire entre \"découvrir, valider et choisir\" et \"en fait monter / écrire config\". Après avoir sélectionné une exportation, vous choisissez les méthodes de montage via une liste de contrôle; le reste des dialogues ne demandent que des paramètres pour les méthodes que vous avez sélectionnées. Jusqu'à la confirmation finale, ni <code>/etc/pve/storage.cfg</code> ni <code>/etc/fstab</code> ne sont touchés."
},
"modes": {
"heading": "Choix de la méthode de montage (une ou deux options)",
"intro": "Après avoir sélectionné et validé l'exportation, ProxMenux affiche une liste de contrôle avec les deux méthodes de montage. Vous pouvez marquer l'un ou l'autre, ou les deux. Si vous appuyez sur OK sans marquer quoi que ce soit, la boîte de dialogue réapparaît jusqu'à ce que vous choisissiez au moins une option ou appuyez sur Annuler pour quitter le flux.",
"imageAlt": "Liste de contrôle des méthodes de montage avec options pvesm et fstab",
"headerMethod": "Méthode",
"headerMount": "Chemin de montage",
"headerUi": "Visible dans Datacenter > Stockage",
"headerUseCase": "Cas d'utilisation typique",
"rows": [
{
"method": "<strong>Comme stockage Proxmox (pvesm)</strong>",
"mountRich": "<code>/mnt/pve/&lt;storage-id&gt;</code> (géré par Proxmox)",
"ui": "Oui",
"useCase": "VM images de disque, sauvegardes, ISOs, modèles LXC — tout ce qui doit apparaître dans l'interface utilisateur Proxmox."
},
{
"method": "<strong>Uniquement le fstab de l'hôte</strong>",
"mountRich": "<code>/mnt/&lt;path&gt;</code> (vous choisissez le chemin)",
"ui": "Non",
"useCaseRich": "Rendre le partage accessible dans un ou plusieurs LXC par bind mount <em>sans</em> l’enregistrer comme stockage Proxmox. Garde l’interface Datacenter claire."
},
{
"method": "<strong>Les deux</strong>",
"mount": "Les deux chemins ci-dessus (deux points de montage du même export NFS)",
"ui": "Oui",
"useCase": "Intégration à l’interface et chemin stable séparé sur l’hôte avec permissions ouvertes pour les bind mounts LXC."
}
],
"bothTitle": "\"Les deux\" crée deux supports indépendants NFS",
"bothBody": "Les deux méthodes sont exécutées séparément : pvesm monte sur <code>/mnt/pve/&lt;id&gt;</code> et fstab sur <code>/mnt/&lt;path&gt;</code>. Cela fournit un montage géré par Proxmox avec ses options par défaut et un montage hôte séparé pour les bind mounts LXC. Deux points de montage ne garantissent pas deux connexions TCP ; le client NFS peut réutiliser les connexions de transport."
},
"pvesmBranch": {
"heading": "Méthode A — En tant que stockage Proxmox (pvesm)",
"intro": "Si <em>Comme stockage Proxmox</em> est marqué, ProxMenux exécute le flux pvesm d'origine:",
"items": [
"<strong>Storage ID</strong> — ce que Proxmox appellera ce stockage. La valeur par défaut est <code>nfs-&lt;server-ip-with-dashes&gt;</code>. Seules les lettres, chiffres, <code>-</code> et <code>_</code> sont acceptés.",
"<strong>Types de contenu</strong> — Proxmox relie les catégories de contenu aux volumes de stockage; choisissez ce que ce NFS peut contenir:"
],
"headerType": "Type de contenu",
"headerAllows": "Ce qu'il permet",
"rows": [
{
"type": "import",
"allowsRich": "Importations d'images de disque (sélectionnées par défaut). Nécessaire pour <em>Importer l'image disque vers VM</em>."
},
{
"type": "backup",
"allowsRich": "Fichiers de sauvegarde VM et CT (<code>vzdump</code>)."
},
{
"type": "iso",
"allows": "Installation des images ISO."
},
{
"type": "vztmpl",
"allows": "Modèles LXC."
},
{
"type": "images",
"allows": "Images disque des VM en cours d’utilisation (ce NFS sert alors au stockage des disques VM)."
},
{
"type": "rootdir",
"allows": "Systèmes de fichiers racine LXC (rare pour NFS – lire la note ci-dessous)."
},
{
"type": "snippets",
"allows": "Scripts de hook et snippets cloud-init."
}
],
"warnTitle": "images et rootdir sur NFS",
"warnBody": "Sélectionner <code>images</code> permet de stocker les disques VM sur NFS. Les performances dépendent du réseau, du serveur et de la charge ; une panne peut bloquer les E/S dépendant du montage. <code>rootdir</code> place les systèmes de fichiers racine LXC sur NFS, où les conteneurs non privilégiés peuvent rencontrer des limites de mappage UID, d’overlay et de propriété. Évaluez ces besoins avant d’y placer <code>images</code> / <code>rootdir</code> ; NFS convient aussi à <code>backup</code> / <code>iso</code> / <code>vztmpl</code>.",
"result": "Le résultat est <code>pvesm add nfs &lt;id&gt; --server &lt;srv&gt; --export &lt;path&gt; --content &lt;csv&gt;</code> et Proxmox se monte automatiquement à <code>/mnt/pve/&lt;id&gt;</code>."
},
"fstabBranch": {
"heading": "Méthode B — Montage fstab de l'hôte uniquement",
"intro": "Si <em>En tant que montage hôte fstab seulement</em> est marqué, ProxMenux demande un chemin de montage hôte et des options persistantes, puis monte et écrit l'entrée à <code>/etc/fstab</code>:",
"items": [
"<strong>Chemin de montage sur l’hôte</strong> — par défaut <code>/mnt/&lt;export-basename&gt;</code>. Ça doit être un chemin absolu. Si quelque chose y est déjà monté, ou si une entrée fstab existe pour le même chemin, ProxMenux vous avertit et vous propose de la remplacer.",
"<strong>Options de montage</strong> — <em>Lecture/écriture</em> (par défaut: <code>rw,hard,nofail,_netdev,rsize=131072,wsize=131072,timeo=600,retrans=2</code>), <em>Lecture seule</em>, <em>Personnalisé</em> (saisissez vos propres options)."
],
"appliesIntro": "Une fois que vous avez confirmé, le script :",
"applies": [
"<code>mkdir -p</code> le chemin de montage.",
"<code>mount -t nfs -o &lt;opts&gt; &lt;srv&gt;:&lt;export&gt; &lt;path&gt;</code>.",
"Écrit une entrée d'une ligne à <code>/etc/fstab</code>: <code>&lt;srv&gt;:&lt;export&gt; &lt;path&gt; nfs &lt;opts&gt; 0 0</code>.",
"Exécute <code>systemctl daemon-reload</code> donc systemd prend la nouvelle entrée fstab.",
"Tente <code>chmod 1777</code> et <code>setfacl o::rwx</code> sur le point de montage, sans signaler l’échec éventuel. Ne réussit que si le serveur NFS le permet ; beaucoup d’exports NAS permettent déjà l’écriture à tous les utilisateurs."
],
"lxcTitle": "Utilisation du montage fstab d'un LXC",
"lxcBody": "Le script affiche une commande <code>pct set</code> pour un bind mount, par exemple <code>pct set &lt;ctid&gt; -mp0 /mnt/&lt;path&gt;,mp=/mnt/&lt;ct-path&gt;,shared=1,backup=0</code>. Vous pouvez aussi utiliser le <mountLink>LXC Mount Manager</mountLink>, qui détecte les montages fstab. <strong>Rien n’est modifié dans le conteneur</strong>. L’accès depuis un CT non privilégié dépend des permissions serveur pour ses UID/GID mappés. Le script tente seulement des changements de permissions depuis l’hôte ; il ne garantit ni export accessible en écriture ni réglages par défaut des fabricants. En cas d’échec, consultez Dépannage.",
"noUiTitle": "Le montage fstab n'est PAS un stockage Proxmox",
"noUiBody": "Le support fstab hôte est invisible à l'interface web Proxmox — par conception. Il n'apparaît pas dans <em>Datacenter > Storage</em>, vous ne pouvez pas le sélectionner dans le créateur VM / CT et les tâches de sauvegarde Proxmox ne peuvent pas le cibler. C'est simplement un chemin du système de fichiers hôte. Si vous voulez aussi intégrer l'interface utilisateur, marquez les méthodes <em>les deux</em> dans le sélecteur."
},
"manual": {
"heading": "Équivalent manuel",
"pvesmIntro": "Méthode A (pvesm) :",
"fstabIntro": "Méthode B (fstab) :"
},
"view": {
"heading": "Affichage configuré NFS stockages",
"body": "Liste toutes les entrées NFS dans Proxmox (<code>pvesm status | awk ''$2 == \"nfs\"''</code>) avec serveur, exportation, types de contenu, chemin de montage et statut en direct. <strong>Note:</strong> cette vue affiche uniquement les stockages enregistrés par pvesm — les montages uniquement par fstab ne sont pas listés ici. Vérifiez ceux avec <code>findmnt -t nfs</code> ou <code>grep nfs /etc/fstab</code>."
},
"remove": {
"heading": "Supprimer le stockage NFS",
"body": "Exécute <code>pvesm remove &lt;storage-id&gt;</code> après une confirmation qui affiche le serveur / export / contenu. Seul l'enregistrement côté Proxmox est supprimé — <strong>le serveur NFS distant lui-même n'est jamais touché</strong>, aucun fichier n'est supprimé. Pour supprimer un montage uniquement fstab, modifiez <code>/etc/fstab</code> à la main et exécutez <code>umount &lt;path&gt;</code>.",
"warnTitle": "Sauvegarder les dépendances d'abord",
"warnBody": "Si les VM, les CT ou les tâches de sauvegarde renvoient encore à ce stockage (par ID), l'enlever les laisse pointer vers un magasin disparu. Proxmox va signaler l'erreur mais pas nettoyer. Déplacez ou supprimez ces références d'abord, puis supprimez le stockage."
},
"test": {
"heading": "Tester la connectivité NFS",
"body": "Exécute une passe diagnostique sur chaque stockage NFS enregistré dans Proxmox : vérifie que <code>showmount</code> est disponible, que <code>rpcbind</code> est en cours d'exécution, pinge chaque serveur, sonde le port 2049, appelle <code>showmount -e</code>, et enfin rapporte la propre vue de Proxmox (<code>pvesm status</code>). Bon premier arrêt quand un stockage affiche comme <em>inactive</em> dans l'interface utilisateur Proxmox."
},
"troubleshoot": {
"heading": "Dépannage",
"noServersTitle": "\"Aucun serveur NFS trouvé sur le réseau\"",
"noServersBody": "Auto-découverte utilise <code>nmap -p 2049 --open &lt;subnet&gt;/24</code>. Le serveur peut ne pas répondre si : il est sur un sous-réseau VLAN /, ses pare-feu bloquent les sondes nmap (beaucoup font) ou le port 2049 est intentionnellement fermé sur cette interface. Utilisez l'option <em>Manual</em> avec l'IP ou le nom d'hôte du serveur.",
"portTitle": "« Le port NFS (2049) est inaccessible »",
"portBody": "Ping a réussi, mais <code>nc -z -w 3 &lt;server&gt; 2049</code> a échoué. Vérifiez que le service NFS fonctionne sur le serveur (<code>systemctl status nfs-server</code> sous Linux, Panneau de configuration → Services de fichiers sur Synology, plugin NFS sur OMV / TrueNAS), et que le pare-feu permet 2049 depuis l'hôte Proxmox.",
"showmountTitle": "« Impossible de se connecter » depuis showmount",
"showmountBody": "Le serveur a refusé la requête de la liste d'exportation. Causes communes : le serveur fait respecter les CLA du client (votre IP Proxmox n'est pas sur la liste autorisée), <code>rpcbind</code> ne fonctionne pas sur le serveur, ou le serveur n'expose que NFSv4 avec <code>showmount</code> désactivé. Le chemin d'exportation peut encore être ajouté manuellement si vous le connaissez.",
"inactiveTitle": "Le stockage est inactif dans l'UI Proxmox",
"inactiveBody": "Lancez d’abord <em>Tester la connectivité NFS</em> : il vérifie que le serveur répond au ping, que le port 2049 est ouvert et que la liste des exports (<code>showmount -e</code>) est disponible. Si la connexion fonctionne mais que le stockage reste inactif, consultez <code>journalctl -u pvestatd</code> et la configuration serveur/export. Rétablissez d’abord connexion ou permissions. <code>pvesm set &lt;id&gt; --disable 0</code> active un stockage désactivé ; ce n’est pas une réparation générale de NFS.",
"lxcNoWriteTitle": "Le montage fstab fonctionne mais le LXC non privilégié ne peut pas écrire à travers un montage de liaison",
"lxcNoWriteBody": "L’accès NFS dépend des propriétaires, ACL et réglages de squash du serveur. Les options CIFS <code>uid=</code> et <code>file_mode=</code> ne s’appliquent <strong>pas</strong> à NFS. Avec le mappage LXC par défaut, root dans le CT devient l’UID 100000 de l’hôte, pas l’UID distant 0. Autorisez l’UID/GID réellement mappé ou l’identité anonyme du serveur. <code>no_root_squash</code> concerne seulement l’UID distant 0 et ne résout pas tous les cas d’UID 100000. Le script tente <code>chmod 1777</code> sans pouvoir contourner les permissions serveur.",
"fstabBootTitle": "fstab mount ne vient pas après le redémarrage",
"fstabBootBody": "Le script ajoute <code>nofail,_netdev</code> de sorte qu'une part manquante au démarrage ne bloque pas le démarrage. Si le montage n'arrive jamais : confirmez que le réseau est accessible (<code>ping &lt;server&gt;</code>), vérifiez <code>journalctl -u remote-fs.target</code>, et vérifiez que l'entrée est valide avec <code>mount -fav | grep nfs</code>. <code>mount -a</code> après le démarrage monte tout ce qui manque actuellement."
},
"related": {
"heading": "Autres",
"items": [
{
"href": "/docs/storage-share/host-samba",
"label": "Samba / CIFS comme stockage Proxmox",
"tail": "— même schéma de flux (méthode A pvesm + méthode B fstab) pour les partages SMB/CIFS."
},
{
"href": "/docs/storage-share/lxc-mount-points",
"label": "Gestionnaire de montage LXC",
"tailRich": "— lier le chemin <code>/mnt/&lt;path&gt;</code> dans un ou plusieurs conteneurs."
},
{
"href": "/docs/storage-share/lxc-nfs-client",
"label": "Client NFS dans LXC",
"tail": "— alternative: monter NFS directement de l'intérieur d'un conteneur privilégié (sans passer par l’hôte)."
}
]
}
}
@@ -0,0 +1,172 @@
{
"meta": {
"title": "Hôte : monter un partage Samba | Documentation ProxMenux",
"description": "Monter un partage externe de Samba / CIFS sur l'hôte Proxmox — soit sous forme de stockage Proxmox (pvesm add cifs), soit sous forme de montage fstab d'hôte uni avec uid/gid/file_mode ouvert (NON visible dans Datacenter > Storage), ou les deux. La méthode fstab ouvre les permissions afin qu'un montage non privilégié LXC liant le chemin puisse lire/écrire sans aucun changement à l'intérieur du conteneur.",
"ogTitle": "Hôte : monter un partage Samba | Documentation ProxMenux",
"ogDescription": "Montez un partage Samba / CIFS externe sur l’hôte Proxmox via pvesm, fstab avec permissions ouvertes pour les bind mounts LXC, ou les deux."
},
"header": {
"title": "Hôte : monter un partage Samba sur l’hôte",
"description": "Monter un partage externe de Samba (SMB / CIFS) — depuis un NAS, une boîte Windows, une exportation de TrueNAS SMB — sur l'hôte Proxmox. Choisissez une ou les deux méthodes : enregistrez-la en tant que stockage Proxmox (visible dans Datacenter > Storage) et/ou ajoutez un montage simple /etc/fstab sur un chemin que vous choisissez, avec ouvert uid/gid/file_mode afin que les LXC non privilégiés puissent fixer et écrire sans aucun changement à l'intérieur du conteneur.",
"section": "Stockage et partage · Hôte"
},
"intro": {
"title": "Ce que ça fait",
"body": "ProxMenux propose deux méthodes pour un partage Samba : <strong>(1) Stockage Proxmox</strong> via <code>pvesm add cifs</code>, visible dans Datacenter > Storage et monté sur <code>/mnt/pve/&lt;id&gt;</code>. Le mot de passe est conservé en clair dans <code>/etc/pve/priv/storage/&lt;id&gt;.pw</code>, protégé par le répertoire privé accessible uniquement à root : il s’agit d’un contrôle d’accès, pas d’un chiffrement. <strong>(2) Montage fstab de l’hôte</strong> à un chemin choisi, persistant via <code>/etc/fstab</code> avec <code>uid=0,gid=0,file_mode=0777,dir_mode=0777</code> pour permettre l’écriture depuis les montages liés des LXC non privilégiés. Les identifiants se trouvent dans un fichier réservé à root sous <code>/etc/samba/credentials/</code>, jamais directement dans <code>fstab</code>. Vous pouvez utiliser l’une des méthodes ou les deux."
},
"opening": {
"heading": "Ouverture de l'outil",
"body": "Dans le menu principal de ProxMenux, ouvrez <strong>Storage &amp; Share Manager → Mount Samba Share on Host</strong>. Le sous-menu comporte quatre options :",
"imageAlt": "Menu Samba Host Manager — Monter / Afficher / Supprimer / Tester la connectivité"
},
"howRuns": {
"heading": "Comment fonctionne le script",
"body": "Le flux a deux phases. Phase 1: découvrez le serveur, validez les identifiants, choisissez le partage, puis choisissez les méthodes de montage via une liste de contrôle. Phase 2 : seules les méthodes que vous avez marquées sont exécutées. Les identifiants sont nécessaires dès le départ parce que <code>smbclient</code> a besoin de ceux-ci pour lister les partages. Jusqu'à la confirmation finale, ni <code>/etc/pve/storage.cfg</code> ni <code>/etc/fstab</code> ne sont touchés."
},
"modes": {
"heading": "Choix de la méthode de montage (une ou deux options)",
"intro": "Après avoir sélectionné le partage et validé les identifiants, ProxMenux affiche une liste de contrôle avec les deux méthodes de montage. Vous pouvez marquer l'un ou l'autre, ou les deux. Si vous appuyez sur OK sans marquer quoi que ce soit, la boîte de dialogue réapparaît jusqu'à ce que vous choisissiez au moins une option ou appuyez sur Annuler pour quitter le flux.",
"headerMethod": "Méthode",
"headerMount": "Chemin de montage",
"headerUi": "Visible dans Datacenter > Stockage",
"headerUseCase": "Cas d'utilisation typique",
"rows": [
{
"method": "<strong>Comme stockage Proxmox (pvesm)</strong>",
"mountRich": "<code>/mnt/pve/&lt;storage-id&gt;</code> (géré par Proxmox)",
"ui": "Oui",
"useCase": "Sauvegardes, ISOs, modèles LXC — tout ce qui doit apparaître dans l'interface utilisateur Proxmox. Les disques en direct VM sont techniquement pris en charge mais découragés sur CIFS (blocage sémantique)."
},
{
"method": "<strong>Uniquement le fstab de l'hôte</strong>",
"mountRich": "<code>/mnt/&lt;path&gt;</code> avec uid/gid/file_mode ouverts",
"ui": "Non",
"useCaseRich": "Montez le partage dans des LXC par bind mount <em>sans</em> enregistrer de stockage Proxmox. Les permissions locales ouvertes facilitent l’accès des CT non privilégiés, mais le serveur SMB doit toujours autoriser l’utilisateur authentifié à écrire."
},
{
"method": "<strong>Les deux</strong>",
"mount": "Les deux chemins ci-dessus (deux points de montage du même export CIFS)",
"ui": "Oui",
"useCase": "Vous voulez l'intégration de l'interface utilisateur ET un chemin stable côté hôte avec des permissions ouvertes pour les montants de liaison LXC. Le montage pvesm utilise les valeurs par défaut de Proxmox; le montage fstab applique séparément l'uid/gid/file_mode."
}
],
"bothTitle": "« Les deux » crée deux points de montage CIFS",
"bothBody": "pvesm monte sur <code>/mnt/pve/&lt;id&gt;</code> avec les options Proxmox par défaut. fstab monte sur <code>/mnt/&lt;path&gt;</code> avec <code>uid=0,gid=0,file_mode=0777,dir_mode=0777</code> pour l’accès local par bind mounts LXC. Le serveur SMB applique toujours les permissions de l’utilisateur du montage. Deux points de montage ne garantissent pas deux connexions TCP distinctes."
},
"pvesmBranch": {
"heading": "Méthode A — En tant que stockage Proxmox (pvesm)",
"intro": "Si <em>Comme stockage Proxmox</em> est marqué, ProxMenux exécute le flux pvesm d'origine:",
"items": [
"<strong>Storage ID</strong> — par défaut <code>cifs-&lt;server-ip-with-dashes&gt;</code>. Seulement lettres, chiffres, <code>-</code> et <code>_</code>.",
"<strong>Types de contenu</strong> — ce sélecteur ProxMenux propose <strong>6</strong> choix. Il omet <code>rootdir</code> par rapport à NFS ; c’est un choix du script, pas une interdiction des systèmes de fichiers racine LXC dans toutes les versions du backend CIFS Proxmox :"
],
"headerType": "Type de contenu",
"headerAllows": "Ce qu'il permet",
"rows": [
{
"type": "import",
"allows": "Importations d'images de disque (sélectionnées par défaut)."
},
{
"type": "backup",
"allowsRich": "Fichiers de sauvegarde VM et CT (<code>vzdump</code>)."
},
{
"type": "iso",
"allows": "Installation des images ISO."
},
{
"type": "vztmpl",
"allows": "Modèles LXC."
},
{
"type": "images",
"allowsRich": "Images disque des VM en cours d’utilisation — <strong>avertissement dans le dialogue</strong>, voir ci-dessous."
},
{
"type": "snippets",
"allows": "Scripts de hook et snippets cloud-init."
}
],
"warnTitle": "Live VM disques sur CIFS",
"warnBody": "Sélectionner <code>images</code> déclenche un avertissement ProxMenux : CIFS/SMB peut poser des problèmes de verrouillage lors des opérations sur disques VM. Le script recommande NFS mais permet de continuer. Sauvegardes et ISO sont des usages courants de CIFS. Évaluez verrouillage, instantanés, migration et charge avant d’utiliser CIFS pour <code>images</code>.",
"credsTitle": "Où pvesm stocke les identifiants",
"credsBody": "Le mot de passe n’est pas écrit dans <code>/etc/pve/storage.cfg</code>. Proxmox écrit les identifiants en clair dans <code>/etc/pve/priv/storage/&lt;storage-id&gt;.pw</code>, dans la zone privée du système de fichiers du cluster, lisible uniquement par <code>root</code> (mode <code>0600</code>) ; ils sont protégés par les droits d’accès, pas par un chiffrement. Après un changement de mot de passe serveur, utilisez <code>pvesm set &lt;id&gt; --password &lt;new&gt;</code> ou supprimez puis ajoutez le stockage via ProxMenux."
},
"fstabBranch": {
"heading": "Méthode B — Montage fstab de l'hôte uniquement",
"intro": "Si <em>Montage fstab sur l’hôte uniquement</em> est sélectionné, ProxMenux demande le chemin et les options persistantes, crée un fichier d’identifiants réservé à root en mode utilisateur, puis monte le partage et écrit l’entrée dans <code>/etc/fstab</code> :",
"items": [
"<strong>Chemin de montage sur l’hôte</strong> — par défaut <code>/mnt/&lt;share-name&gt;</code>. Ça doit être un chemin absolu. Si quelque chose y est déjà monté, ou si une entrée fstab existe, ProxMenux propose de la remplacer.",
"<strong>Options de montage</strong> — <em>Lecture/écriture</em> (par défaut: <code>rw,uid=0,gid=0,file_mode=0777,dir_mode=0777,iocharset=utf8,nofail,_netdev</code>), <em>Lecture seule</em> (<code>file_mode=0555,dir_mode=0555</code>), <em>Personnalisé</em> (saisissez vos options). Le script recommande des uid/gid/file_mode ouverts pour les écritures via bind mounts LXC."
],
"credsTitle": "Fichier d’identifiants (mode utilisateur)",
"credsBody": "En mode utilisateur, ProxMenux crée un fichier d’identifiants réservé à root dans <code>/etc/samba/credentials/&lt;server&gt;_&lt;share&gt;.cred</code> (mode <code>0600</code>) avec des lignes <code>username=</code> et <code>password=</code>. L’entrée fstab le référence par l’option <code>credentials=</code> : le mot de passe en clair ne figure pas dans <code>/etc/fstab</code>. En mode invité, l’option <code>guest</code> remplace ce fichier, qui n’est pas créé.",
"appliesIntro": "Une fois que vous avez confirmé, le script :",
"applies": [
"<code>mkdir -p</code> le chemin de montage.",
"<code>mount -t cifs -o &lt;opts&gt;,credentials=&lt;file&gt;</code> (ou <code>guest</code>) <code>//&lt;srv&gt;/&lt;share&gt; &lt;path&gt;</code>.",
"Écrit une entrée d'une ligne à <code>/etc/fstab</code>: <code>//&lt;srv&gt;/&lt;share&gt; &lt;path&gt; cifs &lt;opts&gt; 0 0</code>.",
"Exécute <code>systemctl daemon-reload</code> donc systemd prend la nouvelle entrée fstab."
],
"lxcTitle": "Utilisation du montage fstab d'un LXC non privilégié",
"lxcBody": "Les options CIFS <code>uid=0,gid=0,file_mode=0777,dir_mode=0777</code> ouvrent les permissions locales pour les bind mounts LXC. Les ACL serveur et la sémantique Unix/POSIX négociée peuvent encore limiter l’accès. <strong>Rien n’est modifié dans le conteneur</strong> : ni <code>chown</code> dans le CT, ni groupes, ni édition de <code>/etc/lxc</code>. La ligne <code>mp</code> est gérée dans la configuration Proxmox du CT. Utilisez la commande <code>pct set</code> affichée ou le <mountLink>LXC Mount Manager</mountLink>.",
"noUiTitle": "Le montage fstab n'est PAS un stockage Proxmox",
"noUiBody": "Le support fstab hôte est invisible à l'interface web Proxmox — par conception. Il n'apparaît pas dans <em>Datacenter > Storage</em>, vous ne pouvez pas le sélectionner dans le créateur VM / CT et les tâches de sauvegarde Proxmox ne peuvent pas le cibler. C'est simplement un chemin du système de fichiers hôte. Si vous voulez aussi intégrer l'interface utilisateur, marquez les méthodes <em>les deux</em> dans le sélecteur."
},
"manual": {
"heading": "Équivalent manuel",
"pvesmIntro": "Méthode A (pvesm) :",
"fstabUserIntro": "Méthode B (fstab, auth utilisateur) — fichier d'identification + montage:",
"fstabGuestIntro": "Méthode B (fstab, guest auth) — pas de dossier d'identification:"
},
"view": {
"heading": "Voir les stockages CIFS et montages de l’hôte",
"body": "Affiche les stockages CIFS enregistrés (<code>pvesm status | awk ''$2 == \"cifs\"''</code>) avec serveur, partage, contenu, utilisateur ou <em>Invité</em>, chemin et état. Les mots de passe ne sont <strong>jamais affichés</strong>. <strong>Note :</strong> une seconde section liste les montages fstab de l’hôte, leurs options, le chemin du fichier d’identifiants et leur état actif/inactif. Vérification manuelle avec <code>findmnt -t cifs</code> ou <code>grep cifs /etc/fstab</code>."
},
"remove": {
"heading": "Supprimer un stockage CIFS ou un montage hôte",
"body": "Le sélecteur propose les stockages pvesm et les montages fstab de l’hôte. Pour pvesm, il exécute <code>pvesm remove &lt;storage-id&gt;</code> et Proxmox retire les identifiants associés. Pour fstab, il tente <code>umount &lt;path&gt;</code>, retire l’entrée de <code>/etc/fstab</code> et les identifiants sous <code>/etc/samba/credentials/</code>, puis le répertoire vide si possible. Un échec du démontage exige un démontage manuel ou un redémarrage. <strong>Le serveur Samba distant et ses fichiers restent inchangés</strong>.",
"warnTitle": "Sauvegarder les dépendances d'abord",
"warnBody": "VMs, CTs ou tâches de sauvegarde qui renvoient à ce stockage par ID échoueront après la suppression. Déplacer / laisser tomber ces références avant de supprimer le stockage."
},
"test": {
"heading": "Tester la connectivité Samba",
"body": "Diagnostic de chaque stockage CIFS enregistré dans Proxmox : vérifie la présence de <code>smbclient</code>, teste ping et les ports 445/139, tente de lister les partages en invité et affiche l’état selon Proxmox (<code>pvesm status</code>). « Authentification requise » lors du test invité signifie que le serveur réserve les partages aux utilisateurs authentifiés, ce qui est normal pour la plupart des NAS."
},
"troubleshoot": {
"heading": "Dépannage",
"noServersTitle": "\"Aucun serveur Samba trouvé sur le réseau\"",
"noServersBody": "Auto-découverte utilise <code>nmap -p 139,445</code>. Le serveur peut être sur un sous-réseau différent, pare-feu, ou seulement accessible par hostname (mDNS / WINS). Utilisez l'option <em>Manual</em> avec l'IP ou le nom d'hôte à la place.",
"noSharesTitle": "« Aucun partage accessible trouvé »",
"noSharesBody": "<code>smbclient -L</code> n'a rien retourné pour ces références. Causes : l'utilisateur n'a pas la permission de lister des partages (essayez avec les identifiants d'administrateur une fois, ou entrez le nom du partage manuellement), le serveur a désactivé la visibilité du partage, ou les identifiants sont erronés. Le script vous permet de saisir le nom du partage à la main dans ce cas.",
"denyTitle": "Le montage Proxmox échoue avec NT_STATUS_ACCESS_DENIED",
"denyBody": "Les identifiants pvesm stockés sont hors de synchronisation avec le serveur Samba (mot de passe modifié, compte désactivé, domaine / groupe de travail incorrect). Rentrer les identifiants avec <code>pvesm set &lt;id&gt; --username &lt;u&gt; --password &lt;p&gt;</code> ou supprimer et réajouter de ProxMenux. Si le serveur est dans un domaine AD, ajoutez <code>--domain &lt;DOMAIN&gt;</code> à l'appel <code>pvesm set</code>.",
"sleepTitle": "\"l'hôte est en panne\" ou le statut de stockage est inactif la nuit",
"sleepBody": "Certains appareils NAS mettent SMB à dormir agressivement. <code>pvestatd</code> voit alors le stockage comme inactif jusqu'à ce que le premier accès réveille le NAS. Si c'est cosmétique, rien n'est cassé. Si cela provoque des défaillances de sauvegarde, désactivez la déconnexion au ralenti de SMB sur le NAS ou planifiez des sauvegardes à l'extérieur de la fenêtre de veille.",
"lxcNoWriteTitle": "Le bind mount du LXC non privilégié ne permet pas d’écrire dans le chemin fstab",
"lxcNoWriteBody": "Vérifiez les options voulues avec <code>findmnt /mnt/&lt;path&gt;</code>, par exemple <code>uid=0,gid=0,file_mode=0777,dir_mode=0777</code>. Des permissions locales insuffisantes peuvent bloquer les UID LXC mappés. Réappliquez le profil RW ou adaptez les options personnalisées. Vérifiez aussi les droits serveur de l’utilisateur SMB et si les extensions Unix/POSIX fournissent les modes serveur ; les modes locaux ouverts ne contournent pas les ACL serveur.",
"fstabBootTitle": "fstab mount ne vient pas après le redémarrage",
"fstabBootBody": "Le script ajoute <code>nofail,_netdev</code> de sorte qu'un partage manquant au démarrage ne bloque pas le démarrage. Si le montage n'arrive jamais : confirmez que le réseau est accessible (<code>ping &lt;server&gt;</code>), vérifiez <code>journalctl -u remote-fs.target</code>, vérifiez que le fichier d'identification existe toujours (<code>ls -l /etc/samba/credentials/</code>) et est lisible, et essayez <code>mount -a</code> manuellement."
},
"related": {
"heading": "Autres",
"items": [
{
"href": "/docs/storage-share/host-nfs",
"label": "Partage NFS comme stockage Proxmox",
"tail": "— page soeur avec le même schéma de flux (méthode A pvesm + méthode B fstab) et compromis côte à côte."
},
{
"href": "/docs/storage-share/lxc-mount-points",
"label": "Gestionnaire de montage LXC",
"tailRich": "— lier le chemin <code>/mnt/&lt;path&gt;</code> dans un ou plusieurs conteneurs."
},
{
"href": "/docs/storage-share/lxc-samba-client",
"label": "Client Samba en LXC",
"tail": "— alternative: monter Samba directement de l'intérieur d'un conteneur privilégié (sans passer par l’hôte)."
}
]
}
}
@@ -0,0 +1,135 @@
{
"meta": {
"title": "NFS, Samba, iSCSI et points de montage LXC dans Proxmox — Stockage et partage | ProxMenux",
"description": "Intégrez le stockage externe et local dans Proxmox VE et partagez des dossiers entre l’hôte et les conteneurs LXC. Ajoutez des partages NFS, Samba (CIFS) et des cibles iSCSI comme stockage Proxmox, configurez les bind mounts LXC avec Mount Manager et exécutez des clients et serveurs NFS ou Samba dans les conteneurs.",
"ogTitle": "Proxmox NFS, Samba, iSCSI et LXC Points de montage — Stockage et partage",
"ogDescription": "Intégrez le stockage externe / local dans Proxmox VE — NFS, Samba, enregistrement iSCSI plus les bind mounts LXC et le partage de réseau.",
"twitterTitle": "Proxmox NFS, Samba, iSCSI | ProxMenux",
"twitterDescription": "Ajouter NFS / Samba / iSCSI comme stockage Proxmox et partager des dossiers entre hôte et LXC."
},
"header": {
"title": "Gestionnaire de stockage et de partage",
"description": "Intégrez le stockage externe ou local dans Proxmox VE et partagez des dossiers entre l’hôte et les conteneurs LXC. Trois groupes d’outils : intégration du stockage de l’hôte (enregistrement dans Proxmox), LXC Mount Manager (bind mounts avec gestion pratique des permissions) et partage réseau LXC (procédures client et serveur NFS ou Samba pour des besoins précis).",
"section": "Stockage et partage"
},
"intro": {
"title": "Ce menu sert à",
"body": "Le gestionnaire de disques agit au niveau des <em>disques physiques individuels</em>. Storage &amp; Share Manager agit au niveau supérieur : il <strong>enregistre les pools de stockage et les partages réseau dans Proxmox</strong> (pour que l’interface et l’outil de création de VM puissent les utiliser) et <strong>configure le partage de fichiers entre l’hôte et vos conteneurs</strong>."
},
"opening": {
"heading": "Ouverture du menu",
"body": "Dans le menu principal de ProxMenux, sélectionnez <strong>Storage &amp; Share Manager</strong>. Vous verrez ceci :",
"imageAlt": "Menu Storage & Share Manager avec blocs HOST et LXC"
},
"groups": {
"heading": "Trois groupes d'outils",
"intro": "Le menu se divise en trois groupes. <strong>Intégration du stockage de l’hôte</strong> enregistre le stockage externe ou local dans Proxmox. Le <strong>LXC Mount Manager</strong> est l’outil principal pour partager des dossiers avec les conteneurs : une procédure de bind mount qui gère la correspondance des UID non privilégiés côté hôte. <strong>Partage réseau LXC</strong> couvre quatre scénarios supplémentaires dans lesquels un conteneur doit directement <em>utiliser</em> ou <em>exposer</em> des partages NFS ou Samba.",
"hostTitle": "Stockage de l'hôte",
"hostBody": "Enregistrer le stockage externe et local dans Proxmox via <code>pvesm add …</code>. Une fois enregistré, le stockage apparaît dans l'interface utilisateur Proxmox et est disponible pour les créateurs VM et CT.",
"hostItems": [
"NFS / Samba / iSCSI externes → stockage Proxmox",
"Disque local → Répertoire Proxmox ou stockage ZFS",
"Répertoire local partagé (pour les bind mounts entre CT)"
],
"lxcMountTitle": "Gestionnaire de montage LXC",
"lxcMountBody": "L’outil principal de partage LXC. Il monte les répertoires de l’hôte dans les conteneurs par bind mount via <code>pct set -mpN</code> et gère les particularités des permissions des CT non privilégiés, sans créer de groupe ni d’utilisateur dans le conteneur.",
"lxcMountItems": [
"Fonctionne avec des CT privilégiés et non privilégiés",
"Propose <code>o+rwx</code> sur le répertoire hôte pour les UID non privilégiés",
"Correction des montages CIFS / NFS existants si nécessaire"
],
"lxcNetTitle": "Partage de réseau LXC",
"lxcNetBody": "Quatre procédures supplémentaires pour les conteneurs qui doivent utiliser ou exposer directement des partages NFS ou Samba. Toutes exigent un conteneur <strong>privilégié</strong>.",
"lxcNetItems": [
"<strong>Client</strong> NFS / Samba (utiliser des partages externes)",
"NFS / Samba <strong>serveur</strong> (exposer les dossiers CT)"
]
},
"host": {
"heading": "Intégration du stockage de l'hôte",
"intro": "Enregistrer le stockage dans Proxmox. Chaque option appelle <code>pvesm add …</code> sous le capot, de sorte que le stockage apparaît dans <strong>Datacenter → Storage</strong> et devient disponible pour les créateurs VM / CT.",
"options": [
{
"href": "/docs/storage-share/host-nfs",
"icon": "Network",
"title": "Ajouter un partage NFS comme stockage Proxmox",
"description": "Enregistrez un export NFS externe comme stockage Proxmox avec pvesm add nfs. Proxmox gère le montage, sans ajout dans fstab."
},
{
"href": "/docs/storage-share/host-samba",
"icon": "Share2",
"title": "Ajouter un partage Samba comme stockage Proxmox",
"description": "Enregistrez un partage Samba ou CIFS externe comme stockage Proxmox avec pvesm add cifs. Proxmox gère le montage et les identifiants."
},
{
"href": "/docs/storage-share/host-iscsi",
"icon": "Database",
"title": "Ajouter la cible iSCSI comme stockage Proxmox",
"description": "Connectez-vous à une cible externe iSCSI et enregistrez-la en tant que stockage Proxmox (périphérique bloc) pour les images de disque VM."
},
{
"href": "/docs/storage-share/host-local-disk",
"icon": "HardDrive",
"title": "Ajouter le disque local comme stockage Proxmox",
"description": "Formatez un disque local SATA / SAS / NVMe et enregistrez-le comme stockage de type répertoire ou pool ZFS dans Proxmox."
},
{
"href": "/docs/storage-share/host-local-shared",
"icon": "FolderOpen",
"title": "Ajouter un répertoire partagé sur Host",
"description": "Créer un répertoire hôte destiné à être monté sur plusieurs CT. Pas un stockage Proxmox — purement une ressource côté hôte pour les bind mounts LXC."
}
]
},
"lxcMount": {
"heading": "Gestionnaire de montage LXC",
"intro": "L'outil principal pour le partage des dossiers entre l'hôte Proxmox et les conteneurs LXC. Il utilise <code>pct set -mpN</code> pour relier un répertoire hôte dans le conteneur, et gère les quirks de permission des CT non privilégiés du côté hôte (aucun groupe ou utilisateur ne sont créés à l'intérieur du conteneur).",
"card": {
"title": "Points de montage LXC (hôte ↔ CT)",
"description": "Bind-mount n'importe quel répertoire hôte dans un conteneur LXC via pct set -mpN. Fonctionne avec des CT privilégiés et non privilégiés; offre chmod o+rwx / ACLs sur le répertoire hôte et corrige les montages CIFS / NFS existants au besoin."
}
},
"lxcNet": {
"heading": "Partage de réseau LXC",
"intro": "Utilisez ces procédures quand le conteneur doit <em>être</em> un point d’accès NFS ou Samba : utiliser un partage externe (client) ou exposer ses propres dossiers (serveur). Pour la plupart des partages de fichiers (bind mounts hôte ↔ CT), le <mountLink>LXC Mount Manager</mountLink> est plus simple et ne nécessite pas de conteneurs privilégiés.",
"options": [
{
"href": "/docs/storage-share/lxc-nfs-client",
"icon": "Download",
"title": "Client NFS dans LXC",
"description": "Montez des partages NFS externes depuis un conteneur LXC privilégié. Détection automatique, persistance dans /etc/fstab et démontages propres pris en charge."
},
{
"href": "/docs/storage-share/lxc-samba-client",
"icon": "Download",
"title": "Client Samba en LXC",
"description": "Montez des partages Samba / CIFS depuis un conteneur LXC privilégié. Identifiants stockés de manière protégée et détection automatique disponible."
},
{
"href": "/docs/storage-share/lxc-nfs-server",
"icon": "Upload",
"title": "Serveur NFS dans LXC",
"description": "Exporter des dossiers sur NFS à partir d'un conteneur LXC privilégié."
},
{
"href": "/docs/storage-share/lxc-samba-server",
"icon": "Upload",
"title": "Serveur Samba en LXC",
"description": "Exposer les dossiers sur SMB / CIFS de l'intérieur d'un conteneur privilégié LXC."
}
]
},
"privReq": {
"title": "Exigences concernant les conteneurs privilégiés",
"body": "Les quatre procédures de <strong>partage réseau LXC</strong> ci-dessus exigent un conteneur <strong>privilégié</strong>. Les scripts imposent ce mode pris en charge avant de configurer les services et outils de montage (<code>nfs-kernel-server</code>, <code>smbd</code>, <code>mount.nfs</code>, <code>mount.cifs</code>). Pour partager des fichiers entre l’hôte et un CT non privilégié, utilisez le <mountLink>LXC Mount Manager</mountLink> : il réalise les bind mounts et ajuste les permissions côté hôte pour permettre la lecture et l’écriture sans configurer ces services ou outils dans le conteneur."
},
"unprivExplain": {
"title": "Comment ProxMenux gère les autorisations de CT non privilégiées",
"body": "Les conteneurs LXC non privilégiés décalent leurs UID de <strong>+100000</strong> sur l’hôte (UID 0 du conteneur = UID 100000 de l’hôte, UID 1000 du conteneur = UID 101000 de l’hôte, …). Un fichier créé par un utilisateur du conteneur apparaît donc comme appartenant aux <em>autres</em> sur l’hôte, sans utilisateur ni groupe hôte ordinaire correspondant. LXC Mount Manager propose une solution pratique : plutôt que d’aligner les UID/GID entre hôte et CT, il propose <code>chmod o+rwx</code> et les ACL correspondantes sur le répertoire hôte pour que tout UID mappé puisse lire et écrire. Pour CIFS, il remonte avec <code>uid=0,gid=0,file_mode=0777,dir_mode=0777</code> ; pour NFS, il configure un répertoire accessible en écriture à tous avec sticky bit et, si le serveur applique root squash, indique la correction à effectuer côté serveur."
},
"scripts": {
"heading": "Scripts concernés",
"intro": "Chaque page se connecte au script qui conduit son flux. Le fichier ci-dessous est un helper partagé qui n'est pas documenté comme sa propre page mais est utilisé par plusieurs flux de partage de réseau LXC:",
"itemTail": "— validation CT, sélection de points de montage, contrôle privilégié et helpers de configuration de groupe universels partagés sur les flux client/serveur LXC."
}
}
@@ -0,0 +1,174 @@
{
"meta": {
"title": "Points de montage LXC (hôte ↔ conteneur) | Documentation ProxMenux",
"description": "Le gestionnaire de montages LXC rend tout répertoire de l’hôte accessible dans un ou plusieurs conteneurs LXC par bind mount via pct set -mpN. Il gère les particularités des permissions des conteneurs non privilégiés, corrige les montages CIFS / NFS sur l’hôte et ne modifie rien dans le conteneur.",
"ogTitle": "Points de montage LXC (hôte ↔ conteneur) | Documentation ProxMenux",
"ogDescription": "Montez les répertoires de l’hôte dans les conteneurs LXC par bind mount. Gestion pratique du mappage UID non privilégié et correction des accès CIFS / NFS sur l’hôte."
},
"header": {
"title": "Points de montage LXC (hôte ↔ conteneur)",
"description": "L'outil principal pour le partage des dossiers entre l'hôte Proxmox et les conteneurs LXC. Bind-mount n'importe quel répertoire hôte dans un ou plusieurs conteneurs en utilisant la syntaxe native pct set -mpN de Proxmox. Le point fort : il résout les maux de tête d'autorisation des conteneurs non privilégiés du côté hôte – il ne modifie jamais rien à l'intérieur du conteneur.",
"section": "Stockage et partage · LXC"
},
"intro": {
"title": "Ce que ça fait",
"body": "Prenez un répertoire qui vit sur l'hôte Proxmox (un dossier local, un NAS partagé, un stockage géré par Proxmox...) et faites-le apparaître à l'intérieur d'un conteneur LXC sur un chemin que vous choisissez, avec des permissions qui fonctionnent même pour des conteneurs non privilégiés — sans rien toucher à l'intérieur du conteneur."
},
"bigPicture": {
"heading": "Comment ça marche (la grande image)",
"intro": "Un bind mount demande au noyau de rendre le répertoire <code>X</code> de l’hôte également accessible au chemin <code>Y</code> du conteneur. Aucune copie, synchronisation ou transmission réseau : les deux côtés voient les <em>mêmes fichiers</em> en même temps.",
"sourceLabel": "Hôte Proxmox",
"sourceDetail": "/mnt/data\n(votre dossier)",
"targetLabel": "Conteneur LXC",
"targetDetail": "/mnt/data\n(apparaît ici)",
"arrowLabel": "bind mount",
"outro": "Le chemin de l'hôte à gauche et le chemin du conteneur à droite peuvent être différents — par exemple, <code>/mnt/nas-films</code> sur l'hôte peut devenir <code>/media/films</code> à l'intérieur du conteneur. Le script ajoute l'entrée à la configuration du conteneur (<code>/etc/pve/lxc/&lt;ctid&gt;.conf</code>) en utilisant le prochain index libre <code>mpN</code>, avec deux paramètres de sécurité par défaut:",
"items": [
"<code>shared=1</code> — indique à Proxmox que les données sont partagées et ne doivent pas être migrées avec le CT. Ce drapeau ne réplique rien : le même chemin et les mêmes données doivent déjà être disponibles sur le nœud cible.",
"<code>backup=0</code> — exclut le montage de liaison des sauvegardes <code>vzdump</code> (les données vivent sur l'hôte, vous les sauvegardez séparément)."
]
},
"perms": {
"heading": "Gestion des autorisations — la partie smart",
"intro": "Les bind mounts sont faciles en principe. La partie dure est permissions : un conteneur <strong>non privilégié</strong> LXC déplace chaque UID par <strong>+100000</strong>, donc un fichier créé à l'intérieur du conteneur par l'utilisateur 1000 apparaît sur l'hôte sous le nom d'UID 101000 — un UID que personne ne possède sur l'hôte. Pour que cela fonctionne sans aligner les UIDs sur les hôtes et les conteneurs, ProxMenux applique le bon \"ouvrir les permissions\" sur le côté <em>hôte</em>, selon le type de répertoire que vous avez choisi:",
"headerType": "Type de répertoire hôte",
"headerAction": "Ce que le script offre à faire",
"localType": "Dossier local",
"localTypeSub": "Par exemple /mnt/data",
"localActionRich": "<code>chmod o+rwx</code> + <code>setfacl o::rwx</code> dans le répertoire hôte. Seulement offert si le CT n'est pas privilégié et que les autorisations actuelles sont insuffisantes.",
"cifsType": "CIFS monté / SMB",
"cifsTypeSub": "Par exemple /mnt/pve/cifs-…",
"cifsActionRich": "Remonter avec <code>uid=0, gid=0, file_mode=0777, dir_mode=0777</code> afin que le CT (tout UID) puisse lire et écrire le partage. <code>/etc/fstab</code> est mis à jour.",
"nfsType": "NFS monté",
"nfsTypeSub": "Par exemple /mnt/pve/nfs-…",
"nfsActionRich": "<code>chmod 1777</code> + <code>setfacl o::rwx</code> sur le support NFS. Impossible de surcharger le squashing côté serveur — si même l'hôte root ne peut pas écrire, vous êtes guidé pour corriger l'exportation sur le serveur NFS.",
"privTitle": "Les conteneurs privilégiés n'ont pas besoin de ça",
"privBody": "Pour les conteneurs privilégiés, UID 0 dans le CT est UID 0 sur l'hôte — root à l’intérieur du CT peut lire et écrire le répertoire hôte directement sans aucun tour de permission. Le script détecte cela et saute l'étape \"ouvrir les permissions\" entièrement.",
"noCtTitle": "Le script ne modifie jamais rien à l'intérieur du conteneur",
"noCtBody": "Toutes les modifications d'autorisation se produisent sur le système de fichiers <strong>host</strong>. Pas de chowns <code>pct exec</code>, pas de groupes créés dans le CT, pas de fstab à l'intérieur du conteneur. Si vous réutilisez le répertoire relié dans un autre CT plus tard, les mêmes permissions s'appliquent automatiquement — pas de configuration par conteneur."
},
"writes": {
"heading": "Ce que ProxMenux écrit — et ce qu'il ne fait pas",
"intro": "Une confusion fréquente lors du montage de la liaison dans un CT non privilégié: les gens supposent que ProxMenux doit écrire des entrées <code>lxc.idmap</code> dans <code>/etc/pve/lxc/&lt;CTID&gt;.conf</code>. <strong>Il ne le fait pas.</strong> Une seule ligne est annexée à ce fichier — le montage de liaison lui-même:",
"outro": "La ligne de sortie que vous voyez à la fin de l'exécution, <em>\"Conteneur non privilégié — Offset UID: 100000\"</em>, est purement informative — elle vous indique simplement que le CT utilise la cartographie non privilégiée par défaut de Proxmox (root dans CT = UID 100000 sur l'hôte). Le script ne configure rien autour.",
"twoWaysHeading": "Les deux façons de faire fonctionner les permissions — et pourquoi ProxMenux en choisit une",
"headerApproach": "Approche",
"headerChanges": "Ce que ça change",
"headerWhen": "Quand ça va",
"hostType": "Permissions côté hôte",
"hostTypeSub": "(ce que ce script fait)",
"hostChangesRich": "<code>chmod o+rwx</code> + <code>setfacl o::rwx</code> dans le répertoire hôte. Les UIDs cartographiés du CT (100000+) tombent dans le seau \"autres\", donc ouvrir le <em>autres</em> suffit.",
"hostWhen": "Accès à dossier partagé générique depuis n'importe quel CT. Plusieurs CT partageant le même répertoire hôte. Simple et réutilisable.",
"idmapTypeRich": "<code>lxc.idmap</code>",
"idmapTypeSub": "(non utilisé par ce script)",
"idmapChangesRich": "Carte UID/GID personnalisée dans <code>/etc/pve/lxc/&lt;CTID&gt;.conf</code> plus les entrées correspondantes <code>/etc/subuid</code> + <code>/etc/subgid</code> sur l'hôte. Le CT doit être redémarré sur chaque changement.",
"idmapWhenRich": "Vous avez besoin d'un UID <em>spécifique</em> à l'intérieur du CT pour cartographier un UID <em>spécifique</em> sur l'hôte (p. ex. <code>media:1000</code> dans le CT doit posséder des fichiers comme <code>media:1000</code> sur l'hôte de sorte que NFS ne squash). Une configuration plus rigide, normalement ne vaut que pour ce scénario exact.",
"idmapTipTitle": "Lorsque vous avez réellement besoin de lxc.idmap",
"idmapTipBody": "Utilisez le mappage manuel si les fichiers écrits dans le CT doivent avoir un UID/GID numérique précis sur l’hôte, par exemple pour partager le propriétaire avec un utilisateur de l’hôte. Il ne contourne pas <code>all_squash</code> de NFS : le serveur décide toujours de l’identité anonyme et des permissions. Ajoutez au besoin des entrées <code>lxc.idmap</code> manuellement. La ligne de bind mount en est indépendante."
},
"opening": {
"heading": "Ouverture de l'outil",
"body": "Dans le menu principal de ProxMenux, ouvrez <strong>Storage &amp; Share Manager → Configure LXC Mount Points (Host ↔ Container)</strong>. Le sous-menu comporte trois options :",
"imageAlt": "Menu LXC Mount Manager — Ajouter / Afficher / Supprimer"
},
"addFlow": {
"heading": "Ajouter un montage — procédure complète",
"intro": "La vue technique, pour savoir exactement ce que fait chaque boîte de dialogue :"
},
"sources": {
"heading": "Ce que vous pouvez choisir comme répertoire hôte",
"intro": "Le sélectionneur de répertoire hôte est le plus complet de la section Stockage &amp; Share. Il scanne quatre sources et présente une liste dédoublée :",
"headerSource": "Source",
"headerWhere": "D'où ça vient",
"headerLabel": "Étiquette dans le menu",
"rows": [
{
"source": "Montages en réseau actifs",
"whereRich": "Partages CIFS / NFS actuellement montés, lus dans <code>/proc/mounts</code>.",
"labelRich": "<code>NFS [used/size]</code> ou <code>CIFS/SMB [used/size]</code>"
},
{
"source": "Montages fstab inactifs",
"whereRich": "Défini dans <code>/etc/fstab</code> mais pas actuellement monté.",
"labelRich": "<code>fstab(off)-NFS</code> / <code>fstab(off)-CIFS/SMB</code>"
},
{
"source": "Répertoires locaux",
"whereRich": "Les répertoires Sub sous <code>/mnt</code> qui ne sont pas des montages réseau.",
"labelRich": "<code>Local [size]</code>"
},
{
"source": "Stockages Proxmox",
"whereRich": "Voies de stockage sous <code>/mnt/pve/*</code> (NFS / CIFS enregistrées via <code>pvesm</code>).",
"labelRich": "<code>PVE-NFS</code> / <code>PVE-CIFS/SMB</code> / <code>Proxmox-Storage</code>"
},
{
"source": "Entrée manuelle",
"where": "N'importe quoi d'autre — tapez le chemin absolu vous-même.",
"labelRich": "<em>Saisir le chemin manuellement</em>"
}
],
"tipTitle": "Les chemins internes Proxmox sont filtrés",
"tipBody": "Le sélecteur saute explicitement les chemins Proxmox internes (<code>/mnt/pve/local</code>, <code>/mnt/pve/local-lvm</code>, <code>/mnt/pve/backup</code>, ...) — ceux-ci sont réservés aux internes Proxmox et vous ne devriez pas les fixer. Seuls les stockages ajoutés par l'utilisateur apparaissent."
},
"manual": {
"heading": "Équivalent manuel",
"privIntro": "Pour un conteneur privilégié — le cas le plus simple, pas de tours de permission:",
"unprivLocalIntro": "Pour un conteneur non privilégié avec un répertoire d'hôte local — ouvrir les permissions sur l'hôte d'abord:",
"unprivCifsIntro": "Pour un conteneur non privilégié avec un partage CIFS déjà montée sur l'hôte:"
},
"view": {
"heading": "Afficher les points de montage",
"body": "Liste toutes les entrées <code>mpN</code> sur chaque conteneur de cet hôte Proxmox, regroupées par CT id et montrant le chemin hôte → chemin conteneur plus toutes les options supplémentaires. En lecture seule — utile comme vérification de cohérence avant d'ajouter ou de supprimer quoi que ce soit."
},
"remove": {
"heading": "Supprimer un point de montage",
"body": "Choisissez le contenant, choisissez l'entrée <code>mpN</code>, confirmez. Le script lance <code>pct set --delete mpN</code> pour supprimer l'entrée de la configuration CT et propose de redémarrer le conteneur s'il est en cours d'exécution. Le répertoire hôte et son contenu sont <strong>non touché</strong> — vous pouvez rajouter le montage plus tard (ou attacher le même répertoire à un autre CT).",
"warnTitle": "Les conteneurs en cours d’exécution doivent redémarrer pour appliquer les changements",
"warnBody": "L'ajout et la suppression de points de montage ne deviennent visibles à l'intérieur du conteneur qu'après un redémarrage. Le script offre un <code>pct reboot</code> en un clic à la fin de chaque opération ; vous pouvez décliner et redémarrer manuellement plus tard."
},
"troubleshoot": {
"heading": "Dépannage",
"noMountTitle": "Mont apparaît en pct config mais pas dans le conteneur",
"noMountBody": "Les bind mounts ne sont attachés que lorsque le conteneur démarre. Si vous avez ajouté le montage pendant que le CT était en cours d'exécution, redémarrez-le (<code>pct reboot &lt;ctid&gt;</code>). Si elle est déjà redémarrée et manquante, vérifiez que <code>pct config &lt;ctid&gt;</code> confirme que l'entrée existe et que le chemin hôte contient un répertoire.",
"noWriteTitle": "Le conteneur peut voir le répertoire mais ne peut pas écrire",
"noWriteBody": "Presque toujours un problème de permissions. Pour les conteneurs non privilégiés, lancez à nouveau la correction de l'autorisation du script — les ACL du répertoire hôte peuvent avoir été réinitialisés par un autre outil (rsync, restauration de sauvegarde, manuel <code>chmod</code>). Pour CIFS, double-vérifiez les options de montage sur l'hôte : <code>findmnt /mnt/pve/cifs-…</code>, recherchez les valeurs <code>uid=</code> / <code>gid=</code> / <code>file_mode=</code>.",
"alreadyTitle": "\"Ce chemin est déjà utilisé comme point de montage dans ce conteneur\"",
"alreadyBody": "Vous avez choisi le même chemin de conteneur qui est déjà connecté à un autre répertoire hôte. Soit choisir un chemin de conteneur différent, soit enlever le point de montage existant en premier.",
"nfsTitle": "L'accès NFS est bloqué même après l'application de la correction hôte",
"nfsIntro": "Votre serveur NFS est un squashing root ou toutes les connexions. Le script peut détecter cela (il essaie d'écrire un fichier de test à partir de l'hôte) et affiche des conseils côté serveur. Deux corrections communes côté serveur pour l'exportation:",
"nfsItems": [
"<code>no_root_squash</code> — les CT privilégiés peuvent écrire directement.",
"<code>all_squash,anonuid=65534,anongid=65534</code> — pour les CT non privilégiés."
],
"nfsOutro": "Ces changements se produisent sur le serveur NFS (TrueNAS, Synology, votre exportation personnalisée, ...), pas sur Proxmox.",
"fstabOffTitle": "Le montage des entrées \"fstab(off)\" ne fait rien",
"fstabOffBody": "Le sélecteur affiche les entrées <code>fstab(off)-</code> lorsqu'un montage réseau est défini dans fstab mais pas actuellement monté. Le script vous permet de lier le chemin, mais le répertoire sera vide jusqu'à ce que vous montez réellement le partage (<code>mount &lt;path&gt;</code> sur l'hôte). Montez-le d'abord, puis liez-le au CT."
},
"related": {
"heading": "Autres",
"items": [
{
"href": "/docs/storage-share/host-local-shared",
"label": "Ajouter un répertoire partagé sur l'hôte",
"tailRich": "— première étape typique: préparer un <code>/mnt/shared</code> sur l'hôte avant de le fixer dans un ou plusieurs CTs ici."
},
{
"href": "/docs/storage-share/host-nfs",
"label": "Ajouter un partage NFS comme stockage Proxmox",
"extraHref": "/docs/storage-share/host-samba",
"extraLabel": "Ajouter un partage Samba comme stockage Proxmox",
"joiner": " / ",
"tailRich": "— enregistrer d'abord un partage externe dans Proxmox, puis fixer son chemin <code>/mnt/pve/&lt;id&gt;</code> dans le CT ici."
},
{
"href": "/docs/storage-share/lxc-nfs-client",
"label": "Client NFS dans LXC",
"extraHref": "/docs/storage-share/lxc-samba-client",
"extraLabel": "Client Samba en LXC",
"joiner": " / ",
"tail": "— l'alternative lorsque vous voulez que le CT lui-même monte le partage (exige un conteneur privilégié)."
}
]
}
}
@@ -0,0 +1,128 @@
{
"meta": {
"title": "NFS client en LXC | ProxMenux Documentation",
"description": "Montez des partages NFS directement dans un conteneur LXC Proxmox avec ProxMenux. Installation automatique de nfs-common, découverte sur le LAN, montages persistants via /etc/fstab et paramètres de démarrage sûrs. Nécessite un conteneur privilégié.",
"ogTitle": "NFS client en LXC | ProxMenux Documentation",
"ogDescription": "Montez des partages NFS dans un conteneur LXC privilégié. Découverte automatique, persistance dans /etc/fstab et paramètres de démarrage sûrs."
},
"header": {
"title": "Client NFS dans LXC",
"description": "Montez des partages NFS directement dans un conteneur LXC Proxmox. Le conteneur devient un véritable client NFS : il communique avec le serveur par le réseau, exécute mount.nfs et écrit dans /etc/fstab. ProxMenux installe nfs-common, aide à trouver les serveurs et exports et applique des paramètres de démarrage sûrs.",
"section": "Stockage et partage · LXC"
},
"privReq": {
"title": "Conteneur privilégié requis",
"body": "Le client du noyau <code>mount.nfs</code> a besoin de capacités (<code>SYS_ADMIN</code> au minimum) que les conteneurs non privilégiés LXC n'exposent pas. Le script force cela — il vous demande de choisir un CT et <strong>s’arrête s'il n'est pas privilégié</strong>. Si vous avez besoin du partage à l'intérieur d'un CT non privilégié, montez-la d'abord sur l'hôte Proxmox (avec <hostNfsLink>NFS en tant que stockage Proxmox</hostNfsLink>) et montez-la par bind mount dans le CT avec le <mountLink>LXC Mount Manager</mountLink>."
},
"what": {
"heading": "Ce que ça fait",
"body": "Contrairement au gestionnaire de montage LXC — ce qui fait que le CT voit quelque chose <em>via</em> l'hôte Proxmox — ce script donne au conteneur son <strong>propre client NFS</strong>: il parle NFS sur le réseau, monte des partages directement du serveur NFS et stocke le montage dans le <code>/etc/fstab</code> du conteneur. L'hôte Proxmox n'est pas dans le chemin de données.",
"diagramServerLabel": "Serveur NFS",
"diagramServerDetail": "/export/data",
"diagramHostLabel": "Hôte Proxmox",
"diagramHostDetail": "(seulement un\npont réseau)",
"diagramCtLabel": "LXC (privilégié)",
"diagramCtDetail": "/mnt/data\nmount.nfs dans le CT",
"diagramArrow": "NFS",
"twoWaysTitle": "Deux façons de donner un accès CT NFS — choisissez une",
"twoWaysBind": "<strong>Montage par host</strong> (<mountLink>LXC Mount Manager</mountLink>) : l'hôte monte le NFS une fois, chaque CT reçoit le même chemin par bind mount. Fonctionne avec des CT non privilégiés. Recommandé lorsque plusieurs CT ont besoin de le même partage.",
"twoWaysDirect": "<strong>Montage NFS direct dans le CT</strong> (cette page) : le CT monte NFS lui-même. Exige un CT privilégié. Utile si le CT doit gérer sa propre connexion et ses identifiants ou si chaque CT utilise un serveur différent."
},
"opening": {
"heading": "Ouverture de l'outil",
"body": "Dans le menu principal de ProxMenux, ouvrez <strong>Storage &amp; Share Manager → Configurer le client NFS dans LXC (privilégié uniquement)</strong>. Choisissez d’abord <strong>le CT cible</strong> ; ProxMenux le démarre s’il est arrêté et abandonne s’il n’est pas privilégié. Le sous-menu suivant s’affiche ensuite :",
"imageAlt": "Menu NFS Client Manager — Montage / Vue / Démonter / Tester la connectivité"
},
"howRuns": {
"heading": "Comment fonctionne le script (mount flow)"
},
"fstabFlags": {
"heading": "Pourquoi ces drapeaux fstab",
"intro": "Pour les montages permanents, le script ajoute trois drapeaux au-delà des options standard NFS : <code>_netdev,x-systemd.automount,noauto</code>. Chacun résout un vrai problème de démarrage :",
"headerFlag": "Drapeau",
"headerEffect": "Ce qu'il fait",
"rows": [
{
"flag": "_netdev",
"effect": "Indique au système d’initialisation que ce montage nécessite le réseau. Le démarrage n’attend pas ce montage avant que le réseau soit disponible."
},
{
"flag": "x-systemd.automount",
"effectRich": "Crée une unité de montage automatique systemd : le montage n'arrive que la première fois que quelque chose accède à <code>/mnt/&lt;path&gt;</code>. Le serveur NFS inaccessible au démarrage ne bloque pas le CT."
},
{
"flag": "noauto",
"effect": "Évite le montage immédiat au démarrage. Avec l’unité automount ci-dessus, le montage n’a lieu qu’au premier accès."
}
],
"netEffectTitle": "Effet net",
"netEffectBody": "Le système de fichiers NFS est monté au <em>premier accès</em> plutôt qu’immédiatement au démarrage. Si le serveur est hors ligne, cet accès peut attendre ou échouer et affecter les services qui dépendent du chemin. Automount réduit la dépendance au démarrage, sans garantir que tous les services du CT restent épargnés."
},
"manual": {
"heading": "Équivalent manuel",
"body": "Répliquez l'ensemble du flux à la main — chaque commande exécute <strong> à l'intérieur du CT</strong> via <code>pct exec &lt;ctid&gt; --</code> ou directement via <code>pct enter &lt;ctid&gt;</code>:"
},
"view": {
"heading": "Afficher les montages actuels",
"body": "Liste tous les points de montage NFS actifs à l'intérieur du CT (<code>mount | grep nfs</code>) plus toutes les lignes NFS du CT du <code>/etc/fstab</code>. Pour chaque entrée fstab, l'état de montage en direct est affiché — utile pour repérer les montages permanents qui ne sont pas apparus au démarrage."
},
"unmount": {
"heading": "Démonter le partage NFS",
"body": "Combine les montages live et les entrées fstab dans une seule liste, vous permet d'en choisir une et <strong>supprime la ligne correspondante de <code>/etc/fstab</code></strong>. Le script <em>n'exécute pas</em> <code>umount</code> sur le montage en direct ; à la place, il vous indique qu'un redémarrage CT est nécessaire pour que le démontage prenne effet.",
"warnTitle": "Le script supprime les entrées fstab, pas les montages en direct",
"warnBody": "C'est un choix de conception délibéré : <code>umount</code> sur une monture occupée échoue avec \"appareil occupé\" quand quelque chose à l'intérieur du CT l'utilise encore. La suppression de l'entrée fstab garantit que le montage disparaît proprement lors du prochain démarrage CT. Si vous voulez que le montage soit parti <em>maintenant</em> et vous êtes sûr que rien ne l'utilise, exécutez <code>pct exec &lt;ctid&gt; -- umount /mnt/&lt;path&gt;</code> à la main après la fin du script."
},
"test": {
"heading": "Tester la connectivité NFS",
"body": "Pass diagnostique à l'intérieur du CT: confirme que le <code>nfs-common</code> est installé, <code>rpcbind</code> est en cours d'exécution, liste les montages NFS, puis itération sur chaque serveur NFS référencé dans fstab et vérifie ping → port 2049 → <code>showmount -e</code>. Bon premier arrêt quand une monture permanente n'arrive pas."
},
"troubleshoot": {
"heading": "Dépannage",
"privTitle": "Conteneur privilégié requis (le script s’arrête)",
"privBody": "Le CT sélectionné n'est pas privilégié. Le client du noyau NFS a besoin de la capacité <code>SYS_ADMIN</code> que les CT non privilégiés n'exposent pas. Soit convertir le CT en privilège (la conversion du gestionnaire de disque &amp; est documentée dans le disque <importLink>Importer en LXC</importLink> page) soit utiliser le chemin alternatif décrit dans l'avertissement en haut de cette page.",
"aptTitle": "apt-get install nfs-common fails",
"aptIntro": "Le script suppose une famille Debian CT (<code>apt-get</code>). Si le CT tourne Alpine / Arch / Rocky / Alma, l'étape d'installation échoue silencieusement. Installez le client NFS à la main pour cette distribution :",
"aptItems": [
"Alpine: <code>apk add nfs-utils</code>",
"Arch: <code>pacman -S nfs-utils</code>",
"Rocky / Alma: <code>dnf install nfs-utils</code>"
],
"aptOutro": "Ensuite, lancez le script ProxMenux — l'étape d'installation saute lorsque les outils sont déjà présents.",
"portTitle": "\"NFS port (2049) is not accessible\"",
"portBody": "Ping a réussi, mais <code>nc -z &lt;server&gt; 2049</code> a échoué de l'intérieur du CT. Vérifiez que le service NFS fonctionne sur le serveur, que le pare-feu permet 2049 à partir du réseau de CT et que le CT a en fait une route réseau valide (essayez <code>pct exec &lt;ctid&gt; -- ip route</code>).",
"bootTitle": "Le montage permanent réussit mais ne vient pas au démarrage",
"bootBody": "Presque toujours : le réseau n'est pas prêt lorsque le CT monte (les drapeaux du script <code>_netdev,x-systemd.automount,noauto</code> corrigent cela – rajouter le montage via le script si vous avez écrit la ligne fstab à la main sans ces derniers), le serveur est inaccessible au démarrage (le montage automatique attend le premier accès, c'est normal), ou le DNS n'est pas résolu au démarrage (utiliser l'IP du serveur, pas son nom d'hôte).",
"squashTitle": "Serveur squashes root, aucun accès d'écriture à partir de l'intérieur CT",
"squashIntro": "L'exportation de NFS utilise <code>root_squash</code> (par défaut) et le CT écrit comme racine. Deux options :",
"squashItems": [
"Côté serveur : changez l'exportation en <code>no_root_squash</code> (seulement si vous faites confiance au CT).",
"Côté CT : écrivez avec un utilisateur non root accepté par le serveur ou ajustez le propriétaire du partage avec chown."
],
"squashOutro": "ProxMenux ne peut pas corriger cela — c'est la politique du serveur."
},
"related": {
"heading": "Autres",
"items": [
{
"href": "/docs/storage-share/lxc-mount-points",
"label": "Points de montage LXC (hôte ↔ conteneur)",
"tail": "— l'alternative pour les CT non privilégiés: monter sur l'hôte, lier dans CT."
},
{
"href": "/docs/storage-share/lxc-samba-client",
"label": "Client Samba en LXC",
"tail": " — page associée avec la même approche pour les partages SMB / CIFS."
},
{
"href": "/docs/storage-share/lxc-nfs-server",
"label": "Serveur NFS dans LXC",
"tailRich": "— l'inverse: exposer les dossiers <em>de</em> un CT sur NFS."
},
{
"href": "/docs/storage-share/host-nfs",
"label": "Partage NFS comme stockage Proxmox",
"tail": " — enregistrer le partage dans Proxmox lui-même plutôt que dans un seul CT."
}
]
}
}
@@ -0,0 +1,159 @@
{
"meta": {
"title": "NFS serveur dans LXC | ProxMenux Documentation",
"description": "Partagez des dossiers via NFS depuis un conteneur LXC Proxmox avec ProxMenux. Installation automatique de nfs-kernel-server, groupe commun sharedfiles, configuration de /etc/exports, ACL réseau et désinstallation complète. Nécessite un conteneur privilégié.",
"ogTitle": "NFS serveur dans LXC | ProxMenux Documentation",
"ogDescription": "Exécutez un serveur NFS dans un LXC privilégié avec le groupe commun sharedfiles, des ACL réseau et une désinstallation complète."
},
"header": {
"title": "Serveur NFS dans LXC",
"description": "Exécutez un serveur NFS du noyau dans un conteneur LXC Proxmox et exposez des dossiers aux autres machines du réseau. ProxMenux installe nfs-kernel-server, configure le groupe commun sharedfiles pour faciliter le partage entre plusieurs CT privilégiés, gère /etc/exports et propose une désinstallation complète.",
"section": "Stockage et partage · LXC"
},
"privReq": {
"title": "Conteneur privilégié requis",
"body": "<code>nfs-kernel-server</code> doit monter le système de fichiers du noyau <code>nfsd</code> sur <code>/proc/fs/nfsd</code>. Cela exige <code>CAP_SYS_ADMIN</code> dans l’espace de noms du noyau hôte, pas seulement dans celui des utilisateurs du conteneur. Les LXC non privilégiés n’ont pas cette capacité : <code>rpc.nfsd: Unable to access /proc/fs/nfsd errno 2 (No such file or directory)</code> ; systemd signale un échec de dépendance pour <code>nfs-server.service</code>. Le script exige donc un CT privilégié et <strong>s’arrête si le CT n’est pas privilégié</strong>. Une autre possibilité consiste à placer le serveur NFS dans une VM."
},
"what": {
"heading": "Ce que ça fait",
"body": "C’est l’inverse de la page <em>client NFS</em> : le CT devient un <strong>serveur NFS</strong> et expose son propre dossier à d’autres CT, à l’hôte Proxmox, à des VM ou à des machines physiques.",
"diagramServerLabel": "LXC (privilégié) — Serveur NFS",
"diagramServerDetail": "/mnt/data\n(dossier exposé)\n\nchown root:sharedfiles\nchmod 2775 (SGID)\n\nnfs-kernel-server\n+ rpcbind en cours d’exécution",
"diagramClientLabel": "Tout client sur le réseau",
"diagramClientDetail": "un autre CT, l'hôte,\nun VM, une machine physique...",
"diagramArrow": "Exportation NFS"
},
"shared": {
"heading": "Le groupe commun « sharedfiles »",
"body": "Avant d'exporter le dossier, ProxMenux crée un groupe appelé <code>sharedfiles</code> avec <strong>GID 101000</strong> à l'intérieur du conteneur, y ajoute chaque utilisateur régulier, puis définit le répertoire d'exportation à <code>root:sharedfiles</code> avec le mode <code>2775</code>. Le <code>2</code> à l'avant est le bit SGID — chaque fichier ou dossier créé à l'intérieur hérite automatiquement du groupe <code>sharedfiles</code>.",
"gidTitle": "Pourquoi GID 101000 spécifiquement",
"gidBody": "Avec le mappage LXC par défaut (+100000), le GID 101000 de l’hôte apparaît comme GID <strong>1000</strong> dans un CT non privilégié. Ce serveur utilise un CT <strong>privilégié</strong>, sans décalage. Deux CT privilégiés utilisant <code>sharedfiles</code> avec le GID 101000 partagent donc le même identifiant numérique de groupe.",
"remapTitle": "La création héritée des utilisateurs « remap_* » est ignorée pour les CT privilégiés",
"remapBody": "L’ancienne branche pour les CT non privilégiés créerait des utilisateurs <code>remap_&lt;uid&gt;</code> avec l’UID <code>&lt;uid&gt; + 100000</code>, tous dans <code>sharedfiles</code>, pour les utilisateurs ordinaires et les UID courants (33, 1000, 1001, 1002). Ce décalage de <code>+100000</code> ne s’applique pas aux CT <strong>privilégiés</strong> exigés ici ; le script ignore donc cette branche. L’absence de comptes <code>remap_*</code> dans <code>getent passwd</code> est normale et n’indique pas une erreur."
},
"defaults": {
"heading": "Options d'exportation par défaut — lire cette première",
"warnTitle": "Les options par défaut incluent no_root_squash",
"warnBody": "ProxMenux utilise par défaut <code>rw,sync,no_subtree_check,'<'strong'>'no_root_squash'<'/strong'>'</code>. <strong>Tout utilisateur root d’un client peut écrire comme root sur l’export.</strong> Réservez cette option à un réseau local de confiance. Si le CT est accessible depuis un réseau non fiable (VPS ou VLAN non fiable), <strong>remplacez l’option par <code>root_squash</code></strong> dans le dialogue des options personnalisées."
},
"opening": {
"heading": "Ouverture de l'outil",
"body": "Dans le menu principal, ouvrez <strong>Storage & Share Manager → Configure NFS Server in LXC</strong>. Seuls les CT privilégiés sont proposés. Choisissez le CT cible ; le script le démarre s’il est arrêté et refuse les CT non privilégiés. Le menu comporte cinq options.",
"imageAlt": "Menu NFS Server Manager — Créer / Afficher / Supprimer / Statut / Désinstaller"
},
"howRuns": {
"heading": "Comment fonctionne le script (Créer le flux)"
},
"network": {
"heading": "Réseau ACL — qui peut monter le partage",
"intro": "<code>/etc/exports</code> détermine quels clients peuvent monter l’export. Le dialogue propose trois modes :",
"headerMode": "Mode",
"headerValue": "Valeur écrite pour /etc/exports",
"headerWhen": "Quand le choisir",
"rows": [
{
"mode": "Réseau local",
"value": "192.168.0.0/16",
"whenRich": "Pour les réseaux domestiques ou de petite entreprise habituels. Couvre toutes les adresses <code>192.168.*.*</code>."
},
{
"mode": "Sous-réseau personnalisé",
"value": "votre CIDR (par exemple 10.0.0.0/24)",
"when": "Lorsque votre LAN n'est pas dans 192.168.x.x ou que vous voulez une portée plus étroite."
},
{
"mode": "Un seul hôte",
"value": "votre IP (par exemple 10.0.0.42)",
"when": "Seule une machine précise peut monter l’export. Option la plus restrictive."
}
]
},
"options": {
"heading": "Options d'exportation expliquées",
"headerOption": "Option",
"headerEffect": "Ce qu'il fait",
"rows": [
{
"option": "rw / ro",
"effect": "Autoriser les clients à lire et écrire, ou à lire uniquement."
},
{
"option": "sync",
"effectRich": "Ne répond aux écritures qu’une fois les données sur disque. Plus sûr que <code>async</code>, au prix d’un débit réduit."
},
{
"option": "no_subtree_check",
"effect": "Évite de vérifier à chaque requête que le fichier appartient encore au sous-arbre exporté. Plus rapide et évite les problèmes si des fichiers sont renommés pendant l’opération."
},
{
"option": "no_root_squash",
"effectRich": "<strong>Faire confiance à root sur le client.</strong> Un client monté par root écrit comme root sur le serveur. Convient aux LAN de confiance, par exemple pour préserver les propriétaires lors des sauvegardes. Remplacez cette option par <code>root_squash</code> si vous ne faites pas entièrement confiance à chaque machine autorisée par l’ACL réseau."
}
]
},
"manual": {
"heading": "Équivalent manuel",
"body": "Reproduisez toute la procédure manuellement. Chaque commande s’exécute <strong>dans le CT</strong> via <code>pct exec &lt;ctid&gt; --</code> ou <code>pct enter &lt;ctid&gt;</code> :"
},
"view": {
"heading": "Voir les exportations actuelles",
"body": "Affiche <code>/etc/exports</code> depuis le CT en ignorant commentaires et lignes vides, puis présente chaque export avec son ACL réseau et ses options. Utile pour vérifier les dossiers exposés avant de communiquer l’IP du CT."
},
"delete": {
"heading": "Supprimer une exportation",
"body": "Liste chaque ligne dans <code>/etc/exports</code> pour la sélection, supprime la ligne choisie (<code>sed -i</code>), exécute <code>exportfs -ra</code> et redémarre <code>nfs-kernel-server</code>. Le dossier lui-même et son contenu restent intacts."
},
"status": {
"heading": "Vérifier l'état NFS",
"body": "Pass diagnostique : confirme que <code>nfs-kernel-server</code> et <code>rpcbind</code> sont installés et actifs, imprime la sortie <code>exportfs -v</code>, liste les sessions NFS actives (<code>showmount -a</code>) et les connexions client actuelles."
},
"uninstall": {
"heading": "Désinstaller le serveur NFS",
"body": "Nettoyage complet après confirmation : arrête et désactive <code>nfs-kernel-server</code> et <code>rpcbind</code>, vide <code>/etc/exports</code>, supprime les paquets NFS avec <code>apt-get purge</code>, retire le groupe <code>sharedfiles</code> et les utilisateurs <code>remap_*</code>, puis termine les processus restants. Les <strong>dossiers exportés eux-mêmes ne sont pas supprimés</strong> ; seules la configuration NFS et les paquets le sont.",
"warnTitle": "Le script s'arrête à la ligne d'exportation, pas aux données",
"warnBody": "<em>Supprimer un export</em> et <em>Désinstaller le serveur NFS</em> retirent la configuration d’export. Les données du dossier sont conservées. Pour les supprimer aussi, utilisez explicitement <code>rm -rf</code> après la fin du script et sauvegardez-les d’abord si quelqu’un peut encore en avoir besoin."
},
"troubleshoot": {
"heading": "Dépannage",
"privTitle": "Conteneur privilégié requis (le script s’arrête)",
"privBody": "Le CT sélectionné n'est pas privilégié. <code>nfs-kernel-server</code> ne peut pas démarrer là parce que le montage <code>/proc/fs/nfsd</code> nécessite <code>CAP_SYS_ADMIN</code> dans l'espace nominatif du noyau hôte, et le module <code>nfsd</code> n'est pas non plus exposé à l'espace nominatif du conteneur (<code>modprobe nfsd</code> de l'intérieur renvoie <code>FATAL: Module nfsd not found</code>). Si vous contournez le contrôle, vous verrez <code>rpc.nfsd: Unable to access /proc/fs/nfsd errno 2 (No such file or directory)</code> dans le journal et aucun port NFS n'ouvrira jamais. Les seules options utilisables sont : convertir le CT en privilégié, ou déplacer le serveur NFS vers une VM.",
"aptTitle": "Échec de apt-get install",
"aptIntro": "Le script suppose une famille Debian CT. Sur Alpine / Arch / Rocky / Alma, installez les paquets du serveur NFS à la main:",
"aptItems": [
"Alpine: <code>apk add nfs-utils</code>",
"Arch: <code>pacman -S nfs-utils</code>",
"Rocky / Alma: <code>dnf install nfs-utils</code>"
],
"aptOutro": "Relancez ensuite le script ProxMenux ; l’installation est ignorée si les outils sont déjà présents.",
"aclTitle": "Le client ne peut pas monter : 'accès refusé par le serveur'",
"aclBody": "L’IP du client n’est pas autorisée par l’ACL réseau. Recréez l’export avec un sous-réseau plus large ou ajoutez l’IP exacte du client. Attention : via un routeur NAT, le client peut apparaître avec l’IP WAN du routeur au lieu de son IP LAN. Vérifiez sur le serveur avec <code>tcpdump -n port 2049</code>.",
"ownTitle": "Les fichiers écrits par le client apparaissent avec une propriété bizarre sur le serveur",
"ownIntro": "Deux possibilités :",
"ownItems": [
"Avec <code>no_root_squash</code> (par défaut), le client root écrit comme root sur le serveur. Les fichiers sont détenus par <code>root:sharedfiles</code> grâce au SGID du dossier.",
"Les utilisateurs non-racines de clients écrivent comme leur propre UID/GID. Si leur UID n'existe pas sur le serveur, les fichiers apparaissent avec des nombres bruts (par exemple : <code>1234:1234</code>). Utilisez également le groupe <code>sharedfiles</code> sur le client, ou alignez les UID sur les systèmes qui partagent des fichiers."
],
"noShowTitle": "Serveur accessible mais showmount ne renvoie rien",
"noShowBody": "Après avoir édité <code>/etc/exports</code>, vous devez recharger la table d'exportation avec <code>exportfs -ra</code> et redémarrer <code>nfs-kernel-server</code> — le script fait les deux, mais si vous avez édité le fichier à la main, faites-le vous-même. Confirmez également le pare-feu sur le CT (et sur l'hôte Proxmox) permet TCP/UDP 2049 et le port rpcbind (111)."
},
"related": {
"heading": "Autres",
"items": [
{
"href": "/docs/storage-share/lxc-nfs-client",
"label": "Client NFS dans LXC",
"tail": " — l’inverse : monter des partages NFS externes dans un CT."
},
{
"href": "/docs/storage-share/lxc-samba-server",
"label": "Serveur Samba en LXC",
"tail": "— page soeur, même motif avec SMB / CIFS au lieu de NFS."
},
{
"href": "/docs/storage-share/host-nfs",
"label": "Partage NFS comme stockage Proxmox",
"tailRich": " — une fois que le CT expose un export, enregistrez ce partage NFS dans Proxmox pour le voir sous <em>Datacenter → Storage</em>."
}
]
}
}
@@ -0,0 +1,155 @@
{
"meta": {
"title": "Client Samba en LXC | ProxMenux Documentation",
"description": "Montez des partages Samba / CIFS dans un conteneur LXC Proxmox avec ProxMenux. Installation automatique de cifs-utils et smbclient, découverte des serveurs, stockage protégé des identifiants et montages persistants via /etc/fstab. Nécessite un conteneur privilégié.",
"ogTitle": "Client Samba en LXC | ProxMenux Documentation",
"ogDescription": "Montez des partages Samba / CIFS dans un conteneur LXC privilégié. Découverte automatique, fichier d’identifiants protégé et persistance dans /etc/fstab."
},
"header": {
"title": "Client Samba en LXC",
"description": "Le montage Samba (SMB / CIFS) se fait directement à l'intérieur d'un conteneur Proxmox LXC. Le conteneur devient un vrai client CIFS — parle au serveur Samba sur le réseau, exécute mount.cifs, stocke les identifiants en toute sécurité, et écrit à /etc/fstab. ProxMenux installe cifs-utils + smbclient pour vous et valide les identifiants sur le serveur avant le montage.",
"section": "Stockage et partage · LXC"
},
"privReq": {
"title": "Conteneur privilégié requis",
"body": "Le client du noyau <code>mount.cifs</code> a besoin de capacités (<code>SYS_ADMIN</code> au minimum) que les conteneurs non privilégiés LXC n'exposent pas. Le script force cela — il vous demande de choisir un CT et <strong>s’arrête s'il n'est pas privilégié</strong>. Si vous avez besoin du partage à l'intérieur d'un CT non privilégié, montez-la d'abord sur l'hôte Proxmox (avec <hostSambaLink>Samba / CIFS en tant que stockage Proxmox</hostSambaLink>) et montez-la par bind mount dans le CT avec le <mountLink>LXC Mount Manager</mountLink>."
},
"what": {
"heading": "Ce que ça fait",
"body": "Le conteneur parle CIFS sur le réseau et monte le partage lui-même. L'hôte Proxmox n'est que le pont réseau — il ne voit ni ne gère le montage.",
"diagramServerLabel": "Serveur Samba",
"diagramServerDetail": "//srv/share",
"diagramHostLabel": "Hôte Proxmox",
"diagramHostDetail": "(seulement un\npont réseau)",
"diagramCtLabel": "LXC (privilégié)",
"diagramCtDetail": "/mnt/share\nmount.cifs à l'intérieur de CT",
"diagramArrow": "CIFS",
"twoWaysTitle": "Deux façons de donner un CT une part de Samba — choisissez une",
"twoWaysBind": "<strong>Montage par host</strong> (<mountLink>LXC Mount Manager</mountLink>) : l'hôte monte le CIFS une fois, chaque CT reçoit le même chemin par bind mount. Fonctionne avec des CT non privilégiés. Recommandé lorsque plusieurs CT ont besoin de le même partage.",
"twoWaysDirect": "<strong>Montage CIFS direct dans le CT</strong> (cette page) : le CT monte CIFS lui-même. Exige un CT privilégié. Utile si chaque CT doit gérer ses identifiants ou accéder à un serveur différent."
},
"opening": {
"heading": "Ouverture de l'outil",
"body": "Dans le menu principal de ProxMenux, ouvrez <strong>Storage &amp; Share Manager → Configurer le client Samba dans LXC (privilégié uniquement)</strong>. Choisissez d’abord <strong>le CT cible</strong> ; ProxMenux le démarre s’il est arrêté et abandonne s’il n’est pas privilégié. Le sous-menu suivant s’affiche ensuite :",
"imageAlt": "Menu Samba Client Manager — Montage / Affichage / Démontage / Test de connectivité"
},
"howRuns": {
"heading": "Comment fonctionne le script (mount flow)"
},
"creds": {
"heading": "Où vit le mot de passe",
"body": "ProxMenux <strong>ne place pas le mot de passe dans la commande de montage</strong> ni dans <code>/etc/fstab</code>. Il crée un fichier d’identifiants dans le CT. Ce fichier contient les identifiants en clair, protégés par des permissions réservées à root ; il n’est pas chiffré :",
"whyTitle": "Pourquoi un fichier séparé plutôt que fstab",
"whyBody": "Le module CIFS accepte les options <code>username=</code> / <code>password=</code> en ligne dans fstab, mais quiconque peut lire <code>/etc/fstab</code> voit le mot de passe en clair. Mettre des identifiants dans un fichier root-only et pointer fstab dessus (<code>credentials=</code>) maintient le mot de passe hors de config lisible dans le monde."
},
"options": {
"heading": "Options de montage expliquées",
"headerOption": "Option",
"headerEffect": "Ce qu'il fait",
"rows": [
{
"option": "rw / ro",
"effect": "Mode lecture-écriture ou lecture seule pour l'ensemble du montage."
},
{
"option": "file_mode=0664",
"effect": "Permissions présentées pour les fichiers via CIFS. Par défaut, le propriétaire et le groupe peuvent écrire, les autres lire."
},
{
"option": "dir_mode=0775",
"effect": "Autorisations signalées pour les répertoires. Par défaut, le propriétaire+groupe entre et crée, d'autres traversent."
},
{
"option": "iocharset=utf8",
"effect": "Impose UTF-8 pour les noms de fichiers transmis par le réseau. Évite les caractères illisibles dans les noms non ASCII."
},
{
"option": "credentials=file",
"effect": "Lisez le nom d'utilisateur / mot de passe du fichier (ajouté automatiquement pour l'auth utilisateur)."
},
{
"option": "guest",
"effect": "Authentifier en tant qu'invité, aucune identification requise (ajoutée automatiquement lorsque l'invité est choisi)."
},
{
"option": "_netdev",
"effect": "Indique que le système d'initialisation de ce montage a besoin du réseau. Boot ne bloque pas l'attente."
},
{
"option": "x-systemd.automount",
"effect": "Montage paresseux : ne monte que sur le premier accès. Le serveur CIFS inaccessible au démarrage ne bloque pas le CT."
},
{
"option": "noauto",
"effect": "Évite le montage immédiat au démarrage. Avec l’unité automount, le montage n’a lieu qu’au premier accès."
}
],
"netEffectTitle": "Effet net des drapeaux fstab",
"netEffectBody": "Le système de fichiers CIFS est monté au <em>premier accès</em> plutôt qu’immédiatement au démarrage. Si le serveur est hors ligne, cet accès peut attendre ou échouer et affecter les services qui dépendent du chemin. Automount réduit la dépendance au démarrage, sans garantir que tous les services du CT restent épargnés."
},
"manual": {
"heading": "Équivalent manuel",
"body": "Répliquez l'ensemble du flux à la main — chaque commande exécute <strong> à l'intérieur du CT</strong> via <code>pct exec &lt;ctid&gt; --</code> ou directement via <code>pct enter &lt;ctid&gt;</code>:",
"guestIntro": "Variante d'invité — aucun fichier d'identification nécessaire:"
},
"view": {
"heading": "Afficher les montages actuels",
"body": "Liste tous les points de montage CIFS actifs à l'intérieur du CT (<code>mount -t cifs</code>) plus toutes les lignes CIFS du CT <code>/etc/fstab</code>. Pour chaque entrée fstab, l'état de montage en direct est affiché — utile pour repérer les montages permanents qui ne sont pas apparus au démarrage."
},
"unmount": {
"heading": "Démonter le partage Samba",
"body": "Combine les montages live et les entrées fstab dans une seule liste, vous permet de choisir une, et <strong> retire la ligne correspondante de <code>/etc/fstab</code></strong> plus le fichier d'identification correspondant. Le script n'exécute pas <code>umount</code> sur le montage en direct — il vous indique plutôt qu'un redémarrage CT est nécessaire pour que le démontage prenne effet.",
"warnTitle": "Le script supprime les entrées fstab, pas les montages en direct",
"warnBody": "Même conception que le client NFS : <code>umount</code> sur une monture occupée échoue avec \"dispositif occupé\". La suppression de l'entrée fstab garantit que le montage disparaît proprement lors du prochain démarrage CT. Si vous voulez que le montage soit parti <em>maintenant</em>, exécutez <code>pct exec &lt;ctid&gt; -- umount /mnt/&lt;path&gt;</code> à la main après la fin du script."
},
"test": {
"heading": "Tester la connectivité Samba",
"body": "Diagnostic dans le CT : vérifie que <code>cifs-utils</code> est installé, liste les montages CIFS actifs puis teste, pour chaque serveur de fstab, ping → ports 139/445 → liste des partages en invité. « Authentification requise » lors du test invité est normal si le serveur ne propose pas de partage public."
},
"troubleshoot": {
"heading": "Dépannage",
"privTitle": "Conteneur privilégié requis (le script s’arrête)",
"privBody": "Le CT sélectionné n'est pas privilégié. Le client du noyau CIFS a besoin de la capacité <code>SYS_ADMIN</code> que les CT non privilégiés n'exposent pas. Convertissez le CT en privilégié, ou utilisez le chemin alternatif décrit dans l'avertissement en haut de cette page.",
"aptTitle": "apt-get install fails",
"aptIntro": "Le script suppose une famille Debian CT (<code>apt-get</code>). Sur Alpine / Arch / Rocky / Alma, installez le client CIFS à la main:",
"aptItems": [
"Alpine: <code>apk add cifs-utils samba-client</code>",
"Arch: <code>pacman -S cifs-utils smbclient</code>",
"Rocky / Alma: <code>dnf install cifs-utils samba-client</code>"
],
"aptOutro": "Ensuite, lancez le script ProxMenux — l'étape d'installation saute lorsque les outils sont déjà présents.",
"guestFallbackTitle": "\"Le serveur vous a connecté en tant qu'invité au lieu de l'utilisateur spécifié\"",
"guestFallbackBody": "La validation active du script a attrapé un vrai problème d'auth. Le serveur a accepté la connexion mais l'a rétrogradée à invité parce que les identifiants sont erronés. Causes communes : faute de frappe dans le nom d'utilisateur / mot de passe, l'utilisateur n'existe pas sur le serveur, l'utilisateur est verrouillé, ou le groupe de travail / domaine est mal adapté. Réexécutez soigneusement le flux et entrez les identifiants (le mot de passe est caché dans la boîte de dialogue).",
"denyTitle": "\"NT_STATUS_ACCESS_DENIED\" lors du montage",
"denyBody": "Les identifiants sont valides mais le partage refuse l’accès. Vérifiez côté serveur les permissions de l’utilisateur pour ce partage précis : la validation confirme la connexion, pas les ACL de chaque partage. Vérifiez aussi si le serveur exige une version SMB particulière ; ajoutez <code>vers=3.0</code> (ou <code>2.1</code>, <code>2.0</code>) aux options de montage.",
"utf8Title": "Noms de fichiers UTF-8 / non ASCII mal affichés",
"utf8Body": "Les options par défaut incluent <code>iocharset=utf8</code>, mais certaines configurations de serveur signalent une page de code inattendue. Si les noms de fichiers avec des accents / symboles semblent mal, essayez également <code>nounix</code> (certains serveurs Linux Samba en ont besoin lorsque le client est également Linux) ou placez le côté serveur sur <code>unix extensions = no</code>.",
"bootTitle": "Le montage permanent réussit mais ne vient pas au démarrage",
"bootBody": "Presque toujours : le réseau n'est pas prêt lorsque le CT monte (les drapeaux du script <code>_netdev,x-systemd.automount,noauto</code> corrigent cela), le serveur est inaccessible au démarrage (le montage automatique attend le premier accès — c'est normal) ou le DNS n'est pas résolu au démarrage (utiliser l'IP du serveur, pas son nom d'hôte)."
},
"related": {
"heading": "Autres",
"items": [
{
"href": "/docs/storage-share/lxc-mount-points",
"label": "Points de montage LXC (hôte ↔ conteneur)",
"tail": "— l'alternative pour les CT non privilégiés: monter sur l'hôte, lier dans CT."
},
{
"href": "/docs/storage-share/lxc-nfs-client",
"label": "Client NFS dans LXC",
"tail": " — page associée avec la même approche pour les partages NFS."
},
{
"href": "/docs/storage-share/lxc-samba-server",
"label": "Serveur Samba en LXC",
"tailRich": "— l'inverse: exposer les dossiers <em>de</em> un CT sur Samba."
},
{
"href": "/docs/storage-share/host-samba",
"label": "Samba / CIFS comme stockage Proxmox",
"tail": " — enregistrer le partage dans Proxmox lui-même plutôt que dans un seul CT."
}
]
}
}
@@ -0,0 +1,132 @@
{
"meta": {
"title": "Serveur Samba en LXC | ProxMenux Documentation",
"description": "Exécutez un serveur Samba (SMB / CIFS) dans un conteneur LXC Proxmox avec ProxMenux. Installation automatique de samba, gestion de /etc/samba/smb.conf, des utilisateurs smbpasswd et du groupe sharedfiles pour les dossiers montés par bind mount. Nécessite un conteneur privilégié.",
"ogTitle": "Serveur Samba en LXC | ProxMenux Documentation",
"ogDescription": "Exposez des dossiers via SMB/CIFS depuis un LXC privilégié. Installation automatique, utilisateur smbpasswd et permissions adaptées aux bind mounts."
},
"header": {
"title": "Serveur Samba en LXC",
"description": "Exécutez un serveur Samba (SMB / CIFS) à l'intérieur d'un conteneur Proxmox LXC et exposez des dossiers aux clients Windows / macOS / Linux sur le réseau. ProxMenux installe samba, crée un utilisateur Samba avec smbpasswd, gère /etc/samba/smb.conf et applique des permissions adaptées aux bind mounts lorsque le dossier partagé vient de l'hôte.",
"section": "Stockage et partage · LXC"
},
"privReq": {
"title": "Conteneur privilégié requis",
"body": "Samba prend l’identité de l’utilisateur qui se connecte avec <code>setgroups()</code> sur chaque connexion arborescente (le moment où un client ouvre un partage). Dans un LXC non privilégié, le noyau rejette ce syscall parce que l'espace de nom d'utilisateur du conteneur est créé avec <code>setgroups=deny</code> — et <code>smbd</code> répond en arrêtant le processus de travail avec <code>PANIC: sys_setgroups failed</code>. Le résultat est que <code>smbd</code> démarre et lie les ports 139/445, mais chaque connexion client échoue avec <code>NT_STATUS_CONNECTION_DISCONNECTED</code>. Le script impose un CT privilégié pour cette raison et <strong>s’arrête si le CT n’est pas privilégié</strong>. Il n'y a pas de correctif propre du côté serveur; utilisez un CT privilégié ou lancez Samba à l'intérieur d’une VM."
},
"what": {
"heading": "Ce que ça fait",
"body": "Le conteneur devient un serveur SMB/CIFS : il exécute <code>smbd</code>, expose un dossier via <code>/etc/samba/smb.conf</code> et accepte les connexions clientes sur les ports <code>139</code> / <code>445</code>. Les clients voient le partage à <code>\\\\&lt;ct-ip&gt;\\&lt;share-name&gt;</code> dans Windows Explorer, <code>smb://&lt;ct-ip&gt;/&lt;share-name&gt;</code> dans macOS Finder, ou via <code>mount.cifs</code> sur Linux.",
"diagramServerLabel": "LXC (privilégié) — Serveur Samba",
"diagramServerDetail": "/mnt/data\n(dossier exposé)\n\nsmbd + nmbd en cours d’exécution\n\nUtilisateur: <username>\n(via smbpasswd)\n\nGroupe imposé:\nsharedfiles",
"diagramClientLabel": "Tout client sur le réseau",
"diagramClientDetail": "Windows: \\\\<ip>\\<share>\nmacOS: smb://<ip>/<share>\nLinux: mount.cifs",
"diagramArrow": "SMB / CIFS"
},
"perms": {
"heading": "Deux chemins d'autorisation selon le type de dossier",
"body": "Avant d'ajouter la part à <code>smb.conf</code>, le script vérifie si le dossier choisi est un montage <strong>bind de l'hôte</strong> ou un dossier local normal <strong> à l'intérieur du CT</strong> — et applique des droits de propriété différents en conséquence:",
"headerType": "Type de dossier",
"headerAction": "Ce que fait le script",
"bindType": "Bind-mount de l'hôte",
"bindTypeSubRich": "détecté par la sortie <code>mount</code>",
"bindActionRich": "Crée le groupe <code>sharedfiles</code> (par défaut GID 999, dynamique si pris), y ajoute l'utilisateur Samba, puis <code>chown root:sharedfiles</code> + <code>chmod 2775</code> (SGID — nouveaux fichiers héritent du groupe). Si l'utilisateur ne peut toujours pas écrire, applique <code>setfacl -m u:&lt;user&gt;:rwx</code>.",
"localType": "Dossier local à l'intérieur de CT",
"localTypeSub": "aucun montage de liaison détecté",
"localActionRich": "Propriété standard: <code>chown -R &lt;user&gt;:&lt;user&gt;</code> + <code>chmod -R 755</code>. Aucun groupe partagé n'est nécessaire car aucun autre CT n'écrit dans ce dossier. Retourne à <code>setfacl</code> si l'accès à l'écriture est toujours manquant.",
"gidTitle": "GID pour 'sharedfiles' diffère du flux du serveur NFS",
"gidBody": "Le script serveur Samba utilise GID <strong>999</strong> pour <code>sharedfiles</code>, tandis que le flux du serveur <nfsLink>NFS</nfsLink> utilise GID <strong>101000</strong>. Si vous exécutez les deux serveurs dans le même CT et que vous voulez un seul groupe partagé dans les deux protocoles, modifiez l'un d'eux pour correspondre à l'autre après l'installation (p. ex. <code>groupmod -g 101000 sharedfiles</code>) et ré-appliquer la propriété sur les dossiers touchés. C'est une incohérence connue dans les scripts actuels."
},
"opening": {
"heading": "Ouverture de l'outil",
"body": "Dans le menu principal, ouvrez <strong>Storage & Share Manager → Configure Samba Server in LXC</strong>. Seuls les CT privilégiés sont proposés. Choisissez le CT cible ; le script le démarre s’il est arrêté et refuse les CT non privilégiés. Le menu comporte cinq options.",
"imageAlt": "Menu Samba Server Manager — Créer / Afficher / Supprimer / Statut / Désinstaller"
},
"howRuns": {
"heading": "Comment fonctionne le script (Créer le flux)"
},
"modes": {
"heading": "Les trois modes de partage",
"intro": "Chaque mode écrit une stanza différente à <code>smb.conf</code>. Tous les trois comprennent le <code>valid users = &lt;username&gt;</code> (pas d'anonymat), le <code>force group = sharedfiles</code> (ainsi les nouveaux fichiers appartiennent au groupe partagé) et le <code>veto files = /lost+found/</code> (le cache des clients).",
"headerMode": "Mode",
"headerBlock": "Bloc écrit en smb.conf",
"rwMode": "Lecture et écriture",
"roMode": "Lecture seule",
"customMode": "Personnalisé",
"customBodyRich": "Vous tapez vos propres directives dans une boîte en texte libre. Le ProxMenux les enveloppe toujours dans un bloc <code>[share]</code> avec les <code>path</code>, <code>valid users</code>, <code>force group</code> et <code>veto files</code>."
},
"manual": {
"heading": "Équivalent manuel",
"body": "Reproduisez toute la procédure manuellement. Chaque commande s’exécute <strong>dans le CT</strong> via <code>pct exec &lt;ctid&gt; --</code> ou <code>pct enter &lt;ctid&gt;</code> :"
},
"connect": {
"heading": "Connexion des clients",
"headerOs": "Système d'exploitation du client",
"headerHow": "Comment se connecter",
"windowsOs": "Windows",
"windowsHowRich": "Explorateur de fichiers → barre d’adresse : <code>\\\\&lt;ct-ip&gt;\\&lt;share-name&gt;</code>. Ou <em>Connecter un lecteur réseau</em> → cocher « Se connecter à l’aide d’informations d’identification différentes ».",
"macosOs": "macOS",
"macosHowRich": "Finder → <em>Aller → Se connecter au serveur...</em> → <code>smb://&lt;ct-ip&gt;/&lt;share-name&gt;</code>. Ou <code>mount_smbfs //user@&lt;ct-ip&gt;/&lt;share&gt; /mountpoint</code>.",
"linuxOs": "Linux",
"linuxHowRich": "<code>mount -t cifs //&lt;ct-ip&gt;/&lt;share&gt; /mnt/x -o username=&lt;u&gt;,password=&lt;p&gt;,iocharset=utf8</code>. Ou utilisez le client <clientLink>Samba dans la page LXC</clientLink> si le client est un autre client Proxmox CT."
},
"view": {
"heading": "Voir les partages actuels",
"body": "Analyse <code>/etc/samba/smb.conf</code> à l'intérieur du CT et liste tous les blocs <code>[share]</code> (en ignorant <code>[global]</code>, <code>[homes]</code>, <code>[printers]</code>) avec son chemin. Utile comme un inventaire rapide."
},
"delete": {
"heading": "Supprimer un partage",
"body": "Permet de choisir un partage par nom, supprime le bloc de <code>smb.conf</code> (<code>sed</code> supprime de <code>[share]</code> jusqu'à la prochaine ligne blanche), et redémarre <code>smbd</code>. Le dossier lui-même et son contenu restent intacts."
},
"status": {
"heading": "Vérifier l'état de Samba",
"body": "Indique si <code>smbd</code> et <code>nmbd</code> sont installés et actifs, liste les utilisateurs de Samba (<code>pdbedit -L</code>) et imprime les sessions actives (<code>smbstatus</code>)."
},
"uninstall": {
"heading": "Désinstaller le serveur Samba",
"body": "Nettoyage complet après confirmation : arrête et désactive <code>smbd</code> et <code>nmbd</code>, sauvegarde <code>smb.conf</code> dans <code>smb.conf.backup.YYYYMMDD_HHMMSS</code>, supprime les utilisateurs Samba avec <code>smbpasswd -x</code> et les paquets Samba avec <code>apt-get purge</code>. Les <strong>dossiers exportés eux-mêmes ne sont pas supprimés</strong>.",
"warnTitle": "Les dossiers survivent — sauvegarde des données séparément",
"warnBody": "<em>Supprimer un partage</em> et <em>Désinstaller le serveur Samba</em> retirent la configuration de partage. Les données des dossiers exportés sont conservées. Pour les supprimer aussi, utilisez explicitement <code>rm -rf</code> après la fin du script."
},
"troubleshoot": {
"heading": "Dépannage",
"privTitle": "Conteneur privilégié requis (le script s’arrête)",
"privBody": "Le CT sélectionné n'est pas privilégié et <code>smbd</code> ne peut pas y servir de fichiers. Si vous contournez le contrôle et configurez Samba à la main, <code>smbd</code> démarre et les ports s'ouvrent, mais la première connexion client panique avec <code>PANIC: sys_setgroups failed</code> dans <code>/var/log/samba/log.&lt;client&gt;</code> et le client voit <code>NT_STATUS_CONNECTION_DISCONNECTED</code>. La cause est l'espace de noms d'utilisateur non privilégié ayant <code>setgroups=deny</code>, qui bloque l’adoption de l’identité de l’utilisateur par Samba à chaque connexion. Ni le <code>features=keyctl=1</code> ni la suppression du <code>force user</code> / <code>force group</code> ne changent cela. Les seules options utilisables sont : convertir le CT en privilégié, ou déplacer Samba vers une VM.",
"aptTitle": "Échec de apt-get install",
"aptIntro": "Le script suppose une famille Debian CT. Sur Alpine / Arch / Rocky / Alma, installer Samba à la main:",
"aptItems": [
"Alpine: <code>apk add samba</code>",
"Arch: <code>pacman -S samba</code>",
"Rocky / Alma: <code>dnf install samba</code>"
],
"aptOutro": "Relancez ensuite le script ProxMenux ; l’installation est ignorée si les outils sont déjà présents.",
"noShareTitle": "Le client se connecte mais ne voit pas le partage",
"noShareBody": "Vérifiez que <code>browseable = yes</code> est défini dans le bloc de partage (par défaut pour les modes rw / ro; peut être manquant en mode personnalisé). Vérifiez également le pare-feu CT et le pare-feu hôte Proxmox permettent TCP 445 (SMB) et 139 (NetBIOS). Certains clients Windows nécessitent également une résolution de nom — essayez d'abord directement l'IP.",
"authTitle": "Défauts d'authentification (NT_STATUS_LOGON_FAILURE)",
"authBody": "Le mot de passe est incorrect (les mots de passe Samba sont <em>distincts</em> de ceux du système ; listez les utilisateurs Samba avec <code>pdbedit -L</code>) ou l’utilisateur ne figure pas dans <code>valid users</code> pour ce partage. Réinitialisez le mot de passe dans le CT avec <code>smbpasswd &lt;user&gt;</code>.",
"groupTitle": "Les fichiers écrits par le client apparaissent avec un mauvais groupe sur le serveur",
"groupBody": "Le script définit <code>force group = sharedfiles</code> dans le bloc de partage, de sorte que les nouveaux fichiers doivent être du groupe <code>sharedfiles</code>. S'ils ne le sont pas, le bit SGID du répertoire parent peut avoir été perdu (quelqu'un a exécuté <code>chmod</code> à la main). Réappliquer : <code>chmod 2775 /mnt/&lt;share&gt;</code>.",
"bothTitle": "Partage du même dossier sur NFS et Samba",
"bothBody": "Le ProxMenux utilise différents GID pour le <code>sharedfiles</code> dans chaque script (Samba: 999, NFS: 101000). Si vous servez le même dossier via les deux, choisissez un seul GID et alignez les deux. La correction la plus simple : après avoir exécuté les deux scripts, modifiez le GID plus petit :"
},
"related": {
"heading": "Autres",
"items": [
{
"href": "/docs/storage-share/lxc-samba-client",
"label": "Client Samba en LXC",
"tail": " — l’inverse : monter des partages Samba externes dans un CT."
},
{
"href": "/docs/storage-share/lxc-nfs-server",
"label": "Serveur NFS dans LXC",
"tail": "— page soeur, même motif avec NFS au lieu de CIFS."
},
{
"href": "/docs/storage-share/host-samba",
"label": "Samba / CIFS comme stockage Proxmox",
"tailRich": " — une fois que le CT expose un export, enregistrez ce partage Samba dans Proxmox pour le voir sous <em>Datacenter → Storage</em>."
}
]
}
}
+145
View File
@@ -0,0 +1,145 @@
{
"meta": {
"title": "Exporter une VM en OVA / OVF | Documentation ProxMenux",
"description": "Exportez une VM Proxmox vers une archive OVA portable ou un répertoire OVF avec le schéma DMTF standard. Disques VMDK au format streamOptimized et manifeste SHA1. Importable dans VMware ESXi / Workstation / Fusion, VirtualBox et à nouveau dans Proxmox.",
"ogTitle": "Exporter une VM en OVA / OVF | Documentation ProxMenux",
"ogDescription": "Convertissez une VM Proxmox en paquet OVA / OVF portable compatible avec VMware et VirtualBox."
},
"header": {
"title": "Exportation de VM vers OVA / OVF",
"description": "Convertit une VM Proxmox en paquet OVA portable (archive TAR unique) ou OVF (descripteur et fichiers VMDK) avec le schéma OVF standard de DMTF. Les disques sont convertis avec qemu-img en VMDK au format streamOptimized. Le résultat peut être importé dans VMware (ESXi / Workstation / Fusion), VirtualBox et à nouveau dans Proxmox avec l’outil d’importation.",
"section": "Utilitaires"
},
"intro": {
"title": "Ce que ça fait",
"body": "Lit la configuration d’une VM arrêtée, convertit chaque disque en VMDK au format streamOptimized, génère un descripteur OVF et un manifeste SHA1, puis regroupe le tout dans un fichier <code>.ova</code> unique ou un répertoire <code>-ovf</code>. La VM source n’est jamais modifiée."
},
"picker": {
"heading": "Sélecteur de VM",
"body": "Au lancement, le script affiche toutes les VM de <code>qm list</code> avec leur VMID, leur nom et leur état. Choisissez celle à exporter :",
"imgAlt": "Boîte de dialogue de sélection de la VM à exporter, avec la liste de toutes les VM"
},
"stopped": {
"heading": "La VM doit être arrêtée",
"intro": "Une image disque cohérente nécessite une VM arrêtée. Si la VM sélectionnée est en cours d’exécution, ProxMenux propose de l’arrêter :",
"items": [
"Arrêt normal via <code>qm shutdown $VMID --timeout 120</code> (attend 2 minutes l’arrêt ACPI du système invité).",
"Si le délai expire, propose un arrêt forcé : <code>qm stop $VMID</code> (équivalent à une coupure d’alimentation).",
"Si vous refusez les deux, l’export est annulé et aucune donnée n’est modifiée."
],
"warnTitle": "L’arrêt forcé équivaut à une coupure d’alimentation",
"warnBody": "<code>qm stop</code> équivaut à débrancher l’alimentation. Le système invité peut nécessiter une réparation du système de fichiers au prochain démarrage. Privilégiez l’arrêt normal et réservez l’arrêt forcé aux systèmes invités qui ne répondent plus."
},
"format": {
"heading": "Sélecteur de format : OVA vs OVF",
"headerFormat": "Format",
"headerOutput": "Sortie",
"headerPros": "Avantages",
"headerCons": "Inconvénients",
"rows": [
{
"format": "OVA",
"output": "name-vmid-ts.ova",
"pros": "Un seul fichier autonome, facile à déplacer, à transférer par sftp ou à joindre à un ticket.",
"cons": "Nécessite ~220 % de la taille virtuelle du disque (espace supplémentaire pour l’archive TAR pendant sa création)."
},
{
"format": "OVF",
"output": "name-vmid-ts-ovf/",
"pros": "~120 % de la taille virtuelle du disque. Plus facile à examiner, car le descripteur est en XML texte. Modifiable avant l’import.",
"cons": "Plusieurs fichiers, à transférer tous ensemble."
}
]
},
"destination": {
"heading": "Répertoire de destination",
"body": "Choisissez un chemin prédéfini (<code>/var/lib/vz/dump</code>, <code>/var/lib/vz/template/iso</code>) ou saisissez un chemin personnalisé. Le script vérifie que le répertoire est accessible en écriture et avertit si l’espace libre semble insuffisant avant de commencer.",
"calloutTitle": "Estimation de l’espace libre nécessaire",
"calloutBody": "Pour exporter en OVF une VM dont les disques totalisent 100 Go virtuels, prévoyez ~120 Go libres ; pour OVA, ~220 Go. L’espace réellement utilisé peut être inférieur pour des disques presque vides. L’archive OVA est créée en TAR non compressé alors que les fichiers VMDK temporaires sont encore présents : prévoyez donc de la place pour les deux. Si l’espace manque pendant l’export, le gestionnaire EXIT nettoie le répertoire temporaire et vous devez recommencer."
},
"package": {
"heading": "Ce qui finit dans le paquet",
"intro": "Pour une OVA / OVF nommée <code>myvm-100-2026-04-26_18-30-15</code>:",
"code": "# OVA mode (single .ova file is a TAR of):\nmyvm-100-2026-04-26_18-30-15.ovf # XML descriptor (DMTF OVF 1.0 + RASD + VSSD)\nmyvm-100-2026-04-26_18-30-15.mf # SHA1 manifest\nmyvm-100-2026-04-26_18-30-15-disk0.vmdk\nmyvm-100-2026-04-26_18-30-15-disk1.vmdk\n...\n\n# OVF mode (a directory):\nmyvm-100-2026-04-26_18-30-15-ovf/\n├── myvm-100-2026-04-26_18-30-15.ovf\n├── myvm-100-2026-04-26_18-30-15.mf\n├── myvm-100-2026-04-26_18-30-15-disk0.vmdk\n└── myvm-100-2026-04-26_18-30-15-disk1.vmdk"
},
"exported": {
"heading": "Ce qui est exporté",
"items": [
"<strong>Disques :</strong> toutes les entrées <code>scsi*</code>, <code>sata*</code>, <code>virtio*</code> et <code>ide*</code> de la configuration de la VM, converties en VMDK au format streamOptimized.",
"<strong>Nombre de vCPU</strong> (RASD ResourceType 3) et <strong>mémoire</strong> en MiB (ResourceType 4).",
"<strong>Nombre de cartes réseau</strong> (ResourceType 10 : uniquement le nombre, sans le pont ni le modèle).",
"<strong>Nom de la VM</strong> et indication du type de système d’exploitation."
],
"notTitle": "Ce qui n'est pas exporté",
"notItems": [
"Montages CD-ROM / ISO (volontairement exclus).",
"Lecteurs cloud-init (volontairement exclus).",
"Pont et modèle précis de carte réseau (seul le nombre est conservé).",
"Choix BIOS / UEFI, à configurer à nouveau lors de l’import.",
"Configuration du passthrough PCI.",
"Snapshots — seul l'état actuel est capturé.",
"Options de niveau VM (NUMA, pages géantes, hotplug, ...)."
]
},
"conversion": {
"heading": "Conversion du disque",
"intro": "Chaque disque est converti avec :",
"code": "qemu-img convert -p -O vmdk -o subformat=streamOptimized \\\n \"$source_path\" \\\n \"$work_dir/<base_name>-disk<N>.vmdk\"",
"outro": "<code>streamOptimized</code> est le format VMware lisible en une seule passe, pris en charge par ESXi 6.7+, VMware Workstation, VirtualBox et Proxmox lui-même. C’est le sous-format VMDK le plus largement compatible, adapté à la portabilité. En contrepartie, il ne permet pas l’accès aléatoire et ne peut donc pas être monté directement sans conversion."
},
"manifest": {
"heading": "Manifeste SHA1",
"intro": "Chaque paquet contient un fichier <code>.mf</code> avec les empreintes SHA1 du descripteur OVF et de chaque VMDK :",
"code": "SHA1(myvm-100-2026-04-26_18-30-15.ovf)= 3a7bd3e2360a3d29eea436fcfb7e44c735d117c9\nSHA1(myvm-100-2026-04-26_18-30-15-disk0.vmdk)= b7e23ec29af22b0b4e41da31e868d57226121c84\nSHA1(myvm-100-2026-04-26_18-30-15-disk1.vmdk)= a87ff679a2f3e71d9181a67b7542122c",
"outro": "Facultatif dans la spécification OVF et ignoré par de nombreux outils, le manifeste permet toutefois de vérifier que le paquet a été transféré intact. Vérifiez-le manuellement avec <code>sha1sum -c file.mf</code>."
},
"import": {
"heading": "Importation du résultat",
"intro": "Le paquet exporté peut être importé dans :",
"items": [
{
"href": "/docs/utils/import-vm",
"preRich": "<strong>Proxmox</strong> — utilisez l’outil correspondant ",
"linkLabel": "Importer une VM depuis OVA / OVF",
"tailRich": "."
},
{
"tailRich": "<strong>VMware ESXi</strong> — Datacenter → Deploy OVF Template ; sélectionnez le fichier .ova ou .ovf."
},
{
"tailRich": "<strong>VMware Workstation / Fusion</strong> — File → Open ; sélectionnez le fichier .ova ou .ovf."
},
{
"tailRich": "<strong>VirtualBox</strong> — File → Import Appliance ; sélectionnez le fichier .ova ou .ovf."
}
]
},
"troubleshoot": {
"heading": "Dépannage",
"noSpaceTitle": "qemu-img convert échoue en cours de conversion avec \"No space left on device\"",
"noSpaceBody": "Le répertoire de destination n’a plus d’espace libre. Le gestionnaire EXIT nettoie automatiquement le répertoire temporaire. Choisissez une destination avec davantage d’espace libre (voir l’estimation ci-dessus) et relancez l’export.",
"unsupportedHwTitle": "L’export se termine, mais VMware refuse l’import : \"Unsupported hardware family\"",
"unsupportedHwBody": "Certaines versions d’ESXi rejettent les descripteurs OVF qui déclarent une famille matérielle inconnue. Ouvrez le .ovf dans un éditeur de texte, ou extrayez d’abord le .ova, repérez <code>&lt;vssd:VirtualSystemType&gt;</code> et choisissez une valeur acceptée par ESXi, par exemple <code>vmx-13</code> pour ESXi 6.5+. Pour contourner rapidement le problème, essayez VirtualBox, qui est plus permissif.",
"nicTitle": "La VM importée utilise une carte réseau ou un contrôleur SCSI différent",
"nicBody": "L’OVF conserve le nombre de cartes réseau, pas leur modèle d’origine. Vérifiez les paramètres réseau de la VM importée dans l’hyperviseur de destination. L’export déclare un contrôleur SCSI lsilogic pour la compatibilité VMware. Lors d’un retour dans Proxmox avec ProxMenux, la VM est créée avec un contrôleur LSI et des cartes e1000 ; passez ensuite à <code>VirtIO SCSI</code> et VirtIO si le système invité possède les pilotes adaptés.",
"runningTitle": "La VM était en cours d’exécution et j’ai refusé de l’arrêter : export annulé",
"runningBody": "Le script ne peut pas produire une image cohérente pendant l’écriture sur les disques. Acceptez la demande d’arrêt la prochaine fois, ou arrêtez d’abord la VM manuellement (<code>qm shutdown $VMID</code>), puis relancez l’export.",
"slowTitle": "La conversion du disque est lente",
"slowBody": "<code>qemu-img convert</code> utilise un seul thread et lit la source à pleine vitesse. Pour un disque de 100 Go sur un disque dur mécanique, comptez 15 à 30 minutes. Un transfert de NVMe à NVMe est 5 à 10 fois plus rapide. Les disques d’une VM sont convertis l’un après l’autre ; la durée augmente linéairement avec la taille virtuelle totale."
},
"related": {
"heading": "Voir aussi",
"items": [
{
"href": "/docs/utils/import-vm",
"label": "Importer une VM depuis OVA / OVF",
"tail": " — l’outil complémentaire pour réimporter la VM."
},
{
"href": "/docs/utils",
"label": "Présentation des utilitaires",
"tail": " — retour à la présentation de la section."
}
]
}
}
+218
View File
@@ -0,0 +1,218 @@
{
"meta": {
"title": "Importer une VM depuis OVA / OVF | Documentation ProxMenux",
"description": "Importez une VM VMware ESXi / Workstation / Fusion / VirtualBox / ProxMenux dans Proxmox VE. Extrait automatiquement OVA, analyse les métadonnées OVF, crée la VM et importe chaque disque au format natif du stockage (qcow2 / raw).",
"ogTitle": "Importer une VM depuis OVA / OVF | Documentation ProxMenux",
"ogDescription": "Importez dans Proxmox des VM exportées depuis VMware, VirtualBox ou ProxMenux. Les disques sont convertis automatiquement au format natif du stockage."
},
"header": {
"title": "Importer une VM depuis OVA / OVF",
"description": "Importe un paquet OVA / OVF dans Proxmox VE : extrait les archives OVA, lit le descripteur OVF pour obtenir le nombre de vCPU, la mémoire, le nombre de cartes réseau et les références des disques, puis crée la VM et importe chaque disque avec qm importdisk vers le stockage choisi. Compatible avec les exports VMware (ESXi / Workstation / Fusion), VirtualBox et ProxMenux.",
"section": "Utilitaires"
},
"intro": {
"title": "Ce que ça fait",
"body": "Crée une VM complète dans Proxmox depuis un paquet portable. Après l’import, elle est prête à démarrer. Quelques vérifications et réglages du modèle réseau, du firmware et du type de système sont recommandés pour les performances et la compatibilité."
},
"picker": {
"heading": "Sélection de fichiers",
"intro": "Au lancement, le script propose deux répertoires prédéfinis ou un chemin manuel :",
"items": [
"<code>/var/lib/vz/dump</code> — le répertoire de sauvegarde par défaut Proxmox vzdump.",
"<code>/var/lib/vz/template/iso</code> — utile si vous y avez transféré l’OVA par sftp.",
"Chemin manuel — pour les fichiers OVA / OVF n'importe où ailleurs sur l'hôte."
],
"outro": "Il énumère ensuite chaque fichier <code>.ova</code> et <code>.ovf</code> dans le répertoire choisi.",
"imageAlt": "Dialogue de sélection du fichier de VM à importer"
},
"flow": {
"heading": "Comment fonctionne l'importation",
"nodes": [
{
"label": "Entrée OVA / OVF",
"detail": ".ova → tar xf vers\n /tmp/.proxmenux-import-*\n.ovf → utiliser sur place",
"variant": "source"
},
{
"label": "Analyse et dialogues",
"detail": "AWK lit OVF\n(nom, vCPU, RAM, NIC,\nles disques). Choix de l'utilisateur\nVMID / stockage / pont",
"variant": "bridge"
},
{
"label": "qm create + importdisk",
"detail": "qm create $VMID\nqm importdisk\n(VMDK → format du stockage)\nqm set --scsiN",
"variant": "target"
}
]
},
"ovf": {
"heading": "Analyse OVF",
"intro": "Un analyseur <strong>gawk</strong> lit le descripteur OVF et retire les métadonnées VM. L'analyseur utilise la forme d'argument 3 de <code>match()</code> spécifique à gawk (mawk, le <code>awk</code> par défaut sur Debian / Proxmox, ne le supporte pas). Lors de la première importation, le script auto-installe gawk via la paire canonique <code>ensure_repositories</code> + <code>install_single_package</code> s'il manque; les importations subséquentes commencent instantanément. Champs extraits:",
"headerField": "Champ",
"headerSource": "Source en OVF",
"headerDefault": "Par défaut si manquant",
"rows": [
{
"field": "Nom VM",
"source": "<Name> (première correspondance)",
"default": "imported-vm"
},
{
"field": "Nombre de vCPU",
"source": "RASD ResourceType 3 → VirtualQuantity",
"default": "1"
},
{
"field": "Mémoire (MiB)",
"source": "RASD ResourceType 4 → VirtualQuantity",
"default": "1024"
},
{
"field": "Nombre de NIC",
"source": "Nombre de ResourceType 10",
"default": "1"
},
{
"field": "Type de système d’exploitation",
"source": "/Linux/ ou /Windows/ dans la description",
"default": "other"
},
{
"field": "Références des disques",
"source": "attributs href se terminant par .vmdk / .qcow2 / .img / .raw",
"default": "aucun (importation avortée)"
}
]
},
"memWarn": {
"title": "Ambiguité de l'unité de mémoire",
"body": "L’analyseur convertit les unités mémoire reconnues en <strong>MiB</strong>, notamment les octets, KiB, MiB, GiB et les libellés textuels pris en charge. Les unités absentes ou inconnues sont <em>traitées comme des MiB</em>. Après l’import, comparez <code>qm config $VMID | grep memory</code> à la RAM documentée de la VM source et corrigez-la si nécessaire avec <code>qm set $VMID --memory &lt;MiB&gt;</code>."
},
"dialog": {
"heading": "Étapes des dialogues d’importation",
"items": [
"<strong>VMID</strong> — propose le prochain identifiant disponible (<code>pvesh get /cluster/nextid</code>).",
"<strong>Nom de la VM</strong> — reprend le nom lu dans l’OVF ; vous pouvez le modifier.",
"<strong>Stockage de destination</strong> — liste des stockages acceptant le contenu <code>images</code>, obtenue par <code>pvesm status -content images</code>.",
"<strong>Pont réseau</strong> — liste des ponts issue de <code>ip link show type bridge</code>. Un pont unique est choisi automatiquement ; la valeur par défaut est <code>vmbr0</code>.",
"<strong>Confirmation</strong> — boîte de dialogue sommaire avec VMID, nom, vCPU, mémoire, NIC, stockage, pont et la liste des disques à importer. Annuler ici = rien ne change."
]
},
"create": {
"heading": "Création de VM",
"intro": "Après confirmation, le script s'exécute :",
"code": "qm create $VMID \\\n --name \"$NAME\" \\\n --memory $MEMORY \\\n --cores $VCPU \\\n --ostype $OSTYPE \\\n --scsihw lsi \\\n --net0 e1000,bridge=$BRIDGE\n\n# For each additional NIC:\nqm set $VMID --netN e1000,bridge=$BRIDGE",
"outro": "Le contrôleur SCSI par défaut est <code>lsi</code> (LSI Logic) pour la compatibilité VMDK. NICs par défaut à <code>e1000</code> (compatibilité universelle) sur le pont choisi."
},
"diskLoop": {
"heading": "Boucle d'importation de disque",
"intro": "Pour chaque référence disque dans l'OVF:",
"items": [
"<code>qm importdisk $VMID $disk_path $STORAGE</code> — importe le disque dans un format accepté par le stockage de destination et crée une entrée <code>unusedN:</code> dans la configuration de la VM.",
"Le script recherche avec grep la référence <code>unusedN</code> qui vient d’être créée dans la configuration.",
"<code>qm set $VMID --scsiN $unused_disk</code> — fixe le disque comme <code>scsi0</code>, <code>scsi1</code>, ...",
"<code>qm set $VMID --delete unusedN</code> — efface le marqueur maintenant inutilisé."
],
"outro": "Le démarrage est réglé sur le premier disque SCSI : <code>qm set $VMID --boot c --bootdisk scsi0</code>."
},
"postImport": {
"heading": "Réglages recommandés après l’import",
"intro": "L’import utilise des réglages largement compatibles pour favoriser un premier démarrage réussi. Après l’avoir confirmé, choisissez des réglages plus performants depuis l’interface Proxmox ou la CLI :",
"headerSetting": "Réglage",
"headerDefault": "Par défaut après l'importation",
"headerRecommended": "Recommandé si le système invité le prend en charge",
"rows": [
{
"setting": "Modèle NIC",
"default": "e1000",
"recommended": "VirtIO (bien plus rapide, nécessite un pilote dans le système invité)"
},
{
"setting": "Contrôleur SCSI",
"default": "LSI",
"recommended": "VirtIO SCSI single (Linux récent ou Windows avec pilotes VirtIO)"
},
{
"setting": "Micrologiciel (BIOS / UEFI)",
"default": "Par défaut Proxmox (BIOS)",
"recommended": "Reprendre le firmware de la VM source ; un mauvais choix empêche le démarrage"
},
{
"setting": "QEMU agent invité",
"default": "Désactivé",
"recommendedRich": "Activer et installer <code>qemu-guest-agent</code> dans le système invité (meilleures sauvegardes, remontée des IP)"
},
{
"setting": "Type de système d’exploitation",
"default": "l26 / win10 / other (heuristique)",
"recommended": "Vérifier par rapport à l'OS client réel"
},
{
"setting": "Affichage",
"default": "Par défaut",
"recommended": "VirtIO-GPU ou SPICE (meilleure performance de la console)"
}
]
},
"fwWarn": {
"title": "Erreur de firmware = pas de démarrage",
"body": "Si la source VM était UEFI mais Proxmox la crée comme BIOS (ou vice-versa), l'invité ne trouvera pas de disque amorçable. Vérifiez les paramètres OVF ou VM d'origine pour <em>FirmwareType / firmware</em> et définissez la même chose dans Proxmox: <code>qm set $VMID --bios ovmf</code> pour UEFI; par défaut, <code>seabios</code> pour BIOS."
},
"notImported": {
"heading": "Ce qui n'est pas importé",
"items": [
"<strong>Ponts réseau précis</strong> — seul le nombre de cartes est conservé. Toutes utilisent le pont choisi lors de l’import.",
"<strong>Modèle NIC</strong> — par défaut pour e1000.",
"<strong>Type de firmware BIOS / UEFI</strong> — utilise la valeur Proxmox par défaut, BIOS.",
"<strong>Configuration du passthrough PCI</strong>.",
"<strong>TPM</strong> (vTPM).",
"Lecteurs <strong>cloud-init</strong>.",
"<strong>Snapshots</strong> — seul l'état actuel.",
"<strong>USB / série / dispositifs parallèles</strong> déclaré dans l'OVF.",
"<strong>VM tags / notes / options de démarrage</strong>."
]
},
"troubleshoot": {
"heading": "Dépannage",
"orphanTitle": "La VM est créée, mais l’import des disques échoue et laisse une VM partielle",
"orphanIntro": "Si l’import échoue, le script propose de supprimer la VM partielle et ses disques importés. Si vous avez refusé ou si la suppression automatique a échoué, examinez la VM et supprimez-la manuellement avec :",
"orphanCode": "qm destroy $VMID --destroy-unreferenced-disks 1",
"orphanOutro": "Ensuite, corrigez la cause sous-jacente (probablement l'espace disque sur le stockage cible) et réimportez.",
"memTitle": "La VM importée dispose de 8 Mo de RAM, ou de 8 To",
"memIntro": "L’analyseur convertit les AllocationUnits reconnues en MiB. Les unités absentes ou inconnues sont traitées comme des MiB. Examinez l’OVF et comparez la mémoire importée à celle de la VM source. Corrigez-la si nécessaire :",
"memCode": "qm set $VMID --memory 8192 # 8 GiB",
"bootTitle": "La VM importée ne démarre pas : \"No bootable device\"",
"bootIntro": "Cause fréquente : un mauvais choix BIOS / UEFI. La VM source utilisait UEFI, mais Proxmox l’a créée avec BIOS. Choisissez le firmware correspondant :",
"bootCode": "qm set $VMID --bios ovmf # UEFI\n# also add an EFI disk for the EFI vars:\nqm set $VMID --efidisk0 $STORAGE:1,format=qcow2,efitype=4m,pre-enrolled-keys=1",
"bootOutro": "Autre cause fréquente : l’ordre de démarrage vise scsi0 alors que le système est sur scsi1. Modifiez l’ordre dans l’onglet Options de la VM.",
"bsodTitle": "Une VM Windows exportée de VMware affiche un écran bleu au premier démarrage",
"bsodBody": "Windows est sensible au changement de contrôleur de disque. Installez les pilotes VirtIO <em>avant</em> l’export depuis VMware, ou conservez le contrôleur <code>lsi</code> par défaut. Passez à VirtIO SCSI seulement après un démarrage réussi et l’installation des pilotes VirtIO dans Windows.",
"zeroTitle": "L’analyseur OVF indique 0 disque",
"zeroBody": "L’OVF peut utiliser des références de disque inconnues de l’analyseur. Ouvrez-le et cherchez pour chaque disque une entrée <code>&lt;File ovf:href=\"...vmdk\" ...&gt;</code>. Si le disque est réellement VMDK, mais porte une extension inhabituelle comme <code>.dat</code>, renommez-le en <code>.vmdk</code> et actualisez la référence OVF. Le renommage ne convertit pas le format.",
"awkTitle": "awk: erreur de syntaxe à ou près , — l'analyseur échoue sur chaque OVA / OVF",
"awkIntro": "L’analyseur OVF utilise la syntaxe gawk de <code>match()</code> à trois arguments, absente de mawk, le <code>awk</code> par défaut sur Debian / Proxmox. Les versions récentes installent gawk automatiquement au premier usage via <code>ensure_repositories</code> + <code>install_single_package</code>. Avec une ancienne copie, installez-le manuellement :",
"awkCode": "apt-get install -y gawk",
"awkOutro": "Relancez ensuite l’import.",
"netTitle": "Réseau ne fonctionnant pas après le premier démarrage",
"netBody": "Le système invité peut ne pas avoir les pilotes du modèle réseau e1000, ou le pont choisi peut être incorrect. Dans l’onglet Hardware de la VM, changez Network Device → Model. Vérifiez aussi <code>ip a</code> dans le système invité : l’interface peut avoir changé de nom, par exemple ens18 au lieu d’eth0, alors que sa configuration utilise encore l’ancien."
},
"files": {
"heading": "Fichiers concernés",
"code": "scripts/utilities/import_vm_ova_ovf.sh # this script\n/tmp/.proxmenux-import-*/ # temp extraction dir for OVA\n/etc/pve/nodes/<node>/qemu-server/<vmid>.conf # created by qm create\n<storage>/<vmid>/<vmid>-disk-<n>.<fmt> # disk images, format depends on storage"
},
"related": {
"heading": "Voir aussi",
"items": [
{
"href": "/docs/utils/export-vm",
"label": "Exportation de VM vers OVA / OVF",
"tail": " — l’outil complémentaire pour exporter la VM."
},
{
"href": "/docs/utils",
"label": "Présentation des utilitaires",
"tail": " — retour à la présentation de la section."
}
]
}
}
+115
View File
@@ -0,0 +1,115 @@
{
"meta": {
"title": "Utilitaires Proxmox — UUP Dump, migration de PVE 8 vers 9, export/import OVA | ProxMenux",
"description": "Utilitaires du quotidien pour Proxmox VE : créer des ISO Windows avec UUP Dump, installer une sélection d’outils CLI, mettre à jour le système Proxmox en toute sécurité, passer de PVE 8 à PVE 9, exporter des VM en OVA / OVF et importer des VM OVA / OVF depuis VMware ou VirtualBox.",
"ogTitle": "Utilitaires Proxmox — UUP Dump, migration de PVE 8 vers 9, export/import OVA",
"ogDescription": "Créez des ISO Windows, installez des outils CLI, lancez une mise à jour sûre, passez de PVE 8 à PVE 9 et exportez ou importez des VM OVA / OVF.",
"twitterTitle": "Utilitaires Proxmox | ProxMenux",
"twitterDescription": "Création d’ISO, outils CLI, mise à jour Proxmox, migration PVE 8→9 et portabilité des VM OVA / OVF."
},
"header": {
"title": "Utilitaires et outils",
"description": "Six outils complètent les tâches quotidiennes dans Proxmox VE : création d’ISO, maintenance du système et portabilité des VM. Chaque option est indépendante : choisissez celle qui vous convient ; rien n’est installé sans votre demande.",
"section": "Utilitaires"
},
"intro": {
"title": "À quoi sert ce menu",
"body": "Trois groupes d’outils indépendants mais souvent utiles : <strong>créer une ISO Windows</strong> avec UUP Dump, <strong>entretenir l’hôte Proxmox</strong> (outils CLI, mises à jour et changement de version majeure) et <strong>importer et exporter des VM</strong> dans Proxmox au format standard OVA / OVF."
},
"opening": {
"heading": "Ouverture du menu",
"body": "Dans le menu principal de ProxMenux, sélectionnez <strong>Utilities</strong>. Voici ce qui s’affiche :",
"imageAlt": "Menu des utilitaires avec UUP Dump, outils système, mise à jour, changement de version, export et import"
},
"groups": {
"heading": "Trois groupes d'outils",
"intro": "Les six outils se divisent en trois groupes indépendants. Cliquez sur une carte ci-dessous pour passer à la section correspondante.",
"iso": {
"title": "Création ISO",
"body": "Créez des ISO Windows officielles avec UUP Dump directement sur l’hôte Proxmox.",
"bullets": [
"Lien partagé UUP Dump → ISO amorçable",
"Dépendances installées automatiquement",
"Le résultat est enregistré dans le répertoire des modèles ISO de Proxmox"
]
},
"maintenance": {
"title": "Entretien du système",
"body": "Maintenez l’hôte en bon état : outils CLI, mises à jour régulières et passage à la version majeure suivante le moment venu.",
"bullets": [
"Installateur d’utilitaires système (25 outils CLI)",
"Mise à jour du système Proxmox (apt + dist-upgrade)",
"PVE 8 → PVE 9 mise à jour majeure"
]
},
"portability": {
"title": "Portabilité des VM",
"body": "Importez et exportez des VM dans Proxmox au format standard OVA / OVF.",
"bullets": [
"Exporter une VM Proxmox → OVA / OVF",
"Importer OVA / OVF → VM Proxmox",
"Compatible avec VMware et VirtualBox"
]
}
},
"upgradeWarn": {
"title": "La mise à jour PVE 8 → 9 est destructrice et non réversible",
"body": "Un changement de version majeure remplace sur place la base Debian (Bookworm → Trixie) et les composants Proxmox. Aucun retour arrière n’est prévu : vous devez disposer de <strong>sauvegardes vérifiées</strong> de chaque VM et CT et d’un <strong>accès console / IPMI / iKVM</strong> avant de commencer. C’est pourquoi l’outil refuse de s’exécuter depuis le terminal web Proxmox."
},
"isoSection": {
"heading": "Création ISO",
"body": "Créez une nouvelle ISO d’installation de Windows à jour directement sur l’hôte Proxmox. Le script automatise tout le processus UUP Dump : installation des dépendances (aria2c, cabextract, wimlib-imagex, …), téléchargement parallèle des fichiers de mise à jour avec aria2 et conversion en une ISO amorçable. Elle est enregistrée dans <code>/var/lib/vz/template/iso</code>, prête à être associée à une VM.",
"options": [
{
"title": "Créateur d’ISO UUP Dump",
"description": "Créez une ISO d’installation de Windows à jour depuis un lien partagé UUP Dump. Les dépendances, le téléchargement et la conversion sont entièrement automatisés ; l’ISO obtenue est enregistrée dans /var/lib/vz/template/iso, prête pour la création d’une VM.",
"href": "/docs/utils/UUp-Dump-ISO-Creator"
}
]
},
"maintenanceSection": {
"heading": "Entretien du système",
"body": "Trois outils couvrent les tâches quotidiennes et occasionnelles sur l’hôte. L’<strong>Installateur d’utilitaires système</strong> installe les outils CLI utiles après une nouvelle installation. La <strong>Mise à jour du système Proxmox</strong> assure l’entretien hebdomadaire ou mensuel. Le <strong>Passage de PVE 8 à PVE 9</strong> est le grand changement de chaque cycle de version majeure, avec des contrôles de sécurité supplémentaires car il n’est pas réversible.",
"options": [
{
"title": "Installateur des utilitaires système",
"description": "Sélecteur de 25 outils CLI choisis (htop, btop, iperf3, tmux, ...) avec sélection personnalisée ou groupes prédéfinis (base, développement, compression, multiplexeurs, analyse, réseau). Utilise le processus standard avec dépôt et commande de vérification.",
"href": "/docs/utils/system-utils"
},
{
"title": "Mise à jour du système Proxmox",
"description": "Vérification des dépôts + apt update + apt dist-upgrade, avec confirmation avant le redémarrage. Détecte la version majeure de PVE (8 ou 9), conserve les dépôts configurés et demande confirmation avant de faire passer un hôte sans abonnement au dépôt no-subscription, puis exécute autoremove.",
"href": "/docs/utils/system-update"
},
{
"title": "Mettre à niveau le PVE 8 vers le PVE 9",
"description": "Changement de version majeure (Debian Bookworm → Trixie + PVE 8 → 9). Vérifications préalables, migration des dépôts, mode automatisé ou interactif, validation après la migration et redémarrage. Refuse de s’exécuter depuis le terminal web.",
"href": "/docs/utils/upgrade-pve8-pve9"
}
]
},
"portabilitySection": {
"heading": "Portabilité VM (OVA / OVF)",
"body": "OVA et OVF sont des formats de paquetage entre hyperviseurs définis par la norme DMTF et pris en charge par VMware, VirtualBox et Proxmox. Les deux outils permettent un aller-retour : une VM exportée de Proxmox peut y être réimportée, et inversement. Utilisez-les pour migrer des charges depuis ESXi, créer une sauvegarde portable d’une VM ou partager une VM préparée avec un utilisateur de VirtualBox.",
"options": [
{
"title": "Exportation de VM vers OVA / OVF",
"description": "Convertissez une VM Proxmox en archive OVA portable ou en répertoire OVF. Schéma DMTF standard, manifeste SHA1 et disques VMDK au format streamOptimized. Importable dans VMware (ESXi / Workstation / Fusion), VirtualBox et à nouveau dans Proxmox.",
"href": "/docs/utils/export-vm"
},
{
"title": "Importer une VM depuis OVA / OVF",
"description": "Importez dans Proxmox une exportation VMware / VirtualBox / ProxMenux. L’outil extrait automatiquement l’archive OVA, analyse les métadonnées OVF, crée la VM et importe chaque disque au format natif du stockage.",
"href": "/docs/utils/import-vm"
}
]
},
"diskSpaceCallout": {
"title": "Une note sur l'espace disque pour l'exportation / l'importation",
"body": "Les deux outils convertissent les formats de disque : l’export utilise <code>qemu-img convert -O vmdk -o subformat=streamOptimized</code> et l’import utilise <code>qm importdisk</code> pour revenir au format natif du stockage (qcow2 / raw). Pour l’export, prévoyez <strong>~120 % de la taille virtuelle du disque</strong> pour OVF et <strong>~220 %</strong> pour OVA. L’archive OVA utilise un TAR non compressé et est créée alors que les fichiers VMDK temporaires sont encore présents. Vérifiez que le répertoire de destination dispose de suffisamment d’espace avant de commencer."
},
"fitsTogether": {
"heading": "Organisation du menu",
"body": "Chaque outil possède un script dédié dans <code>scripts/utilities/</code>. La mise à jour du système Proxmox appelle un seul script sécurisé dans <code>scripts/global/</code>, update-pve-safe.sh, qui détecte la version majeure et gère PVE 8 et PVE 9. Le passage PVE 8 → 9 propose deux actions supplémentaires dans son propre menu : une <em>Vérification avant migration</em> indépendante (exécute <code>pve8to9 --full</code>) et un <em>Guide de migration manuelle</em> en lecture seule (procédure en 17 étapes), pour contrôler le processus ou l’effectuer manuellement."
}
}
@@ -0,0 +1,168 @@
{
"meta": {
"title": "Mise à jour du système Proxmox | Documentation ProxMenux",
"description": "Met à jour les paquets dans la version majeure actuelle de Proxmox avec apt-get update et apt full-upgrade -y. Vérifie l’espace disque et les dépôts configurés, tente de récupérer les clés GPG, vérifie et répare les anciens en-têtes PV LVM, reconstruit les pilotes DKMS gérés si nécessaire, exécute autoremove/autoclean et propose un redémarrage lorsque nécessaire.",
"ogTitle": "Mise à jour du système Proxmox | Documentation ProxMenux",
"ogDescription": "apt full-upgrade avec vérification des dépôts, autoremove/autoclean et proposition de redémarrage si nécessaire."
},
"header": {
"title": "Mise à jour du système Proxmox",
"description": "Appelle un seul script d’exécution (<code>update-pve-safe.sh</code>) qui détecte la version majeure de Proxmox. Les dépôts configurés sont lus via l’API Proxmox et conservés ; un hôte sans abonnement utilisant uniquement Enterprise doit confirmer avant le passage à no-subscription. Le script met à jour les paquets et reconstruit les pilotes DKMS gérés par ProxMenux pour un noyau en attente de démarrage. Le script principal propose un redémarrage si le marqueur système existe ou si le dernier noyau installé diffère du noyau en cours. Le processus est aussi accessible depuis <em>Update Now</em> dans l’en-tête de ProxMenux Monitor lorsque des mises à jour sont détectées.",
"section": "Utilitaires"
},
"calloutWhat": {
"title": "Ce que ça fait",
"body": "Met l’hôte au dernier niveau de correctifs de sa version majeure actuelle. Il ne change <strong>pas</strong> de version majeure ; pour PVE 8 → PVE 9, consultez <link>Passer de PVE 8 à PVE 9</link>."
},
"official": {
"heading": "La recommandation officielle de Proxmox",
"intro": "Pour mettre à jour un hôte dans la même version majeure, Proxmox recommande d’exécuter :",
"code": "apt update && apt full-upgrade -y",
"outro": "Cette ligne est la commande officielle pour les versions actuelles de Proxmox. Il faut également vérifier que les dépôts sont propres, que les bons sont activés et que l’hôte reste dans un état cohérent après la mise à jour."
},
"onTop": {
"heading": "Ce que ProxMenux ajoute : vérifié dans le script",
"intro": "Utilise <strong>la même opération apt full-upgrade</strong>, avec vérification des dépôts, reconstruction DKMS et nettoyage après mise à jour. Les étapes suivantes correspondent à <code>scripts/utilities/proxmox_update.sh</code> et à son unique script d’exécution <code>scripts/global/update-pve-safe.sh</code> :",
"items": [
"<strong>Détecte la version majeure de PVE</strong> dans le script d’exécution (<code>pveversion | grep -oP ''pve-manager/\\K[0-9]+''</code>). Un seul script gère PVE 8 et PVE 9 ; les dépôts configurés sont conservés, sauf si un hôte sans abonnement accepte le changement proposé.",
"<strong>Conserve les dépôts configurés.</strong> <code>ensure_repositories</code> lit les dépôts via l’API Proxmox et vérifie l’abonnement. Avec un abonnement actif ou un dépôt no-subscription ou test déjà utilisé, rien ne change. Un hôte sans abonnement actif utilisant uniquement Enterprise doit confirmer le passage à no-subscription. Un refus arrête la mise à jour sans modifier les sources.",
"<strong>Exécute la mise à jour sans interaction</strong> avec <code>DEBIAN_FRONTEND=noninteractive</code> et <code>--force-confdef --force-confold</code>. Pour les fichiers de configuration dpkg, l’action par défaut est acceptée si elle existe ; sinon, le fichier actuel est conservé.",
"<strong>N’impose pas les utilitaires facultatifs.</strong> Le script n’installe pas de force <code>zfsutils-linux</code>, <code>chrony</code>, <code>ifupdown2</code> ou des paquets similaires. Une installation Proxmox qui a choisi de s’en passer conserve ce choix. Les paquets manquants sont signalés dans les processus d’installation supérieurs, pas lors de la mise à jour.",
"<strong>Vérification et réparation des métadonnées LVM.</strong> Détecte les anciens en-têtes PV et exécute vgck --updatemetadata et vgchange -ay sur les groupes de volumes concernés. Cela peut modifier les métadonnées LVM ; il ne s’agit pas d’une simple vérification avec avertissement.",
"<strong>Nettoye ensuite:</strong> <code>apt-get autoremove -y</code> + <code>apt-get autoclean -y</code>.",
"<strong>Reconstruction DKMS avant la proposition de redémarrage.</strong> Le script d’exécution appelle <code>pmx_rebuild_dkms_after_kernel</code> lorsqu’un noyau installé plus récent est en attente. Le script principal vérifie <code>/var/run/reboot-required</code> et utilise <code>dpkg-query</code> pour comparer le noyau indiqué par <code>uname -r</code> avec le dernier paquet <code>proxmox-kernel-*-pve-signed</code> / <code>pve-kernel-*-pve</code> installé. Le marqueur peut manquer sur les hôtes sans <code>needrestart</code> ; la comparaison des noyaux fonctionne tout de même."
]
},
"calloutOneSentence": {
"title": "En une phrase",
"body": "Met à jour les paquets de l’hôte, conserve les dépôts sauf changement accepté, vérifie les métadonnées LVM, reconstruit les pilotes DKMS gérés, nettoie avec autoremove/autoclean et propose un redémarrage si nécessaire."
},
"confirm": {
"heading": "Boîte de dialogue de confirmation",
"intro": "La sélection de l’option ouvre un résumé des actions prévues et demande une confirmation explicite :",
"imageAlt": "Boîte de dialogue de confirmation de mise à jour Proxmox avec vérification des dépôts, mise à jour des paquets et nettoyage"
},
"routes": {
"heading": "Comment le script principal délègue l’exécution",
"nodes": {
"source": {
"label": "proxmox_update.sh",
"detail": "pveversion |\ngrep -oP ''pve-manager/\\K[0-9]+''"
},
"bridge": {
"label": "Un seul script d’exécution",
"detail": "update-pve-safe.sh\n(détecte PVE 8 / 9\nen interne)"
},
"target": {
"label": "Après la mise à jour",
"detail": "apt-get autoremove\napt-get autoclean\nRedémarrage proposé si nécessaire"
}
}
},
"worker": {
"heading": "Ce que fait le script d’exécution",
"intro": "Un seul script (<code>scripts/global/update-pve-safe.sh</code>) gère PVE 8 (<code>bookworm</code>) et PVE 9 (<code>trixie</code>). Il détecte la version majeure et vérifie les dépôts existants sans réécrire les sources Debian de base. Les étapes sont les suivantes :",
"items": [
"<strong>Vérifications préalables.</strong> Vérifie qu’il reste au moins ~1 Go dans <code>/var/cache/apt/archives</code>. Sinon, le processus s’arrête immédiatement avec un message clair afin d’éviter un échec au milieu d’une opération apt.",
"<strong>Vérification des dépôts.</strong> <code>ensure_repositories</code> lit les dépôts et l’état de l’abonnement. Avec un dépôt Proxmox utilisable, rien ne change. Sur un hôte sans abonnement actif utilisant uniquement Enterprise, le passage à no-subscription doit être confirmé ; un refus arrête la mise à jour.",
"<strong>apt update avec récupération automatique GPG.</strong> En cas de <code>NO_PUBKEY</code> pour un dépôt, y compris tiers, le script importe la clé manquante et réessaie automatiquement avant de signaler un échec.",
"<strong>Mises à jour en attente et de sécurité.</strong> Indique combien de paquets vont changer et combien proviennent de la suite de sécurité, afin d’afficher des chiffres concrets dans le dialogue de confirmation.",
"<strong>Boîte de dialogue de confirmation.</strong> Après l’actualisation des listes de paquets, le script demande un oui explicite avant de mettre à jour les paquets.",
"<strong>apt full-upgrade.</strong> Utilise <code>DEBIAN_FRONTEND=noninteractive</code> et <code>--force-confdef --force-confold</code>. Dpkg suit son action par défaut pour les fichiers de configuration lorsqu’elle existe ; sinon, il conserve le fichier actuel.",
"<strong>Vérification LVM.</strong> <code>lvm_repair_check</code> actualise les métadonnées des groupes de volumes lorsque des disques transmis directement à des VM invitées (DSM, TrueNAS ou appliances de stockage) reviennent avec d’anciens en-têtes PV.",
"<strong>Reconstruction DKMS des pilotes gérés par ProxMenux.</strong> Lorsqu’un nouveau noyau est en attente de démarrage, <code>pmx_rebuild_dkms_after_kernel</code> lit les pilotes installés par ProxMenux dans <code>components_status.json</code> (actuellement <code>nvidia_driver</code> → module <code>nvidia</code> et <code>coral_driver</code> → module <code>gasket</code>), installe les en-têtes correspondants (<code>proxmox-headers-&lt;newkver&gt;</code> si disponible, sinon <code>pve-headers-&lt;newkver&gt;</code>) et exécute <code>dkms autoinstall -k &lt;newkver&gt;</code>. Si <code>dkms status</code> ne montre pas les modules construits pour le nouveau noyau, les installateurs sont relancés avec <code>--auto-reinstall</code>. Les échecs sont consignés sans interrompre la mise à jour, qui atteint tout de même la proposition de redémarrage.",
"<strong>Nettoyage final.</strong> <code>apt-get autoremove</code> + <code>apt-get autoclean</code> avant de rendre la main au script principal."
]
},
"post": {
"heading": "Nettoyage et redémarrage après mise à jour",
"intro": "Après la fin du script d’exécution, le script principal exécute :",
"code": "apt-get autoremove -y # drop unused dependencies pulled in by old packages\napt-get autoclean # drop downloaded .deb files no longer in the index",
"afterCode": "Le script principal vérifie aussi si un redémarrage est nécessaire. Chacun de ces signaux déclenche la proposition :",
"items": [
"<code>/var/run/reboot-required</code> existe : un paquet ou un outil système a indiqué qu’un redémarrage est nécessaire.",
"Le dernier paquet de noyau Proxmox installé diffère du noyau en cours, selon <code>dpkg-query</code> et uname -r."
],
"outro": "Si l’une des conditions est remplie, une boîte de dialogue whiptail demande <em>« Certains changements nécessitent un redémarrage. Voulez-vous redémarrer maintenant ? »</em>. Refusez pour continuer avec le noyau en cours jusqu’au redémarrage manuel, par exemple pendant une fenêtre de maintenance prévue."
},
"end": {
"heading": "Ce que vous voyez à la fin",
"intro": "À la fin du script d’exécution, le terminal affiche le résultat du nettoyage et, si nécessaire, la proposition de redémarrage :",
"imageAlt": "Résumé final de la mise à jour Proxmox avec résultat du nettoyage et proposition de redémarrage"
},
"calloutDeclineReboot": {
"title": "Reportez le redémarrage seulement pour une raison précise",
"body": "Installer un nouveau paquet <code>proxmox-kernel-*</code> ne remplace pas le noyau en cours avant le redémarrage. Le nouveau noyau et ses modules correspondants deviennent actifs au démarrage suivant. Prévoyez une fenêtre de maintenance adaptée et examinez auparavant les avertissements de compilation DKMS."
},
"noSub": {
"heading": "Traitement du dépôt Enterprise par le script",
"intro": "Proxmox active par défaut le dépôt Enterprise. Sans abonnement actif, ce dépôt renvoie 401 lors de <code>apt-get update</code>. Le script ne modifie les dépôts que dans ce cas et après confirmation, via l’API Proxmox utilisée par <em>Node → Updates → Repositories</em>. Voici les différents cas :",
"items": [
"Avec un <strong>abonnement actif</strong>, les dépôts sont conservés et Enterprise fournit les mises à jour.",
"Si le <strong>dépôt no-subscription ou test est déjà activé</strong>, les dépôts sont conservés, quelles que soient les autres sources configurées.",
"Avec <strong>aucun abonnement actif et uniquement le dépôt Enterprise</strong>, un dialogue propose le changement. Accepter désactive Enterprise, active no-subscription et actualise les listes de paquets. Le changement est consigné dans la vue <em>Changes</em> d’Audit & Report. Refuser arrête la mise à jour sans modifier les sources.",
"Les <strong>sources Ceph Enterprise</strong> présentes sont désactivées lors du même changement, sans choisir un autre canal Ceph. Sur un hôte utilisant Ceph, son canal se configure séparément.",
"Si <strong>aucun terminal ne permet de demander confirmation</strong>, aucune source n’est modifiée et la mise à jour s’arrête avec un message renvoyant à <em>Node → Updates → Repositories</em>."
],
"outro": "Les sources Debian et tous les autres fichiers de dépôts ne sont jamais modifiés par ce processus. Une entrée mêlant Enterprise à d’autres composants n’est pas changée : la mise à jour s’arrête et demande de séparer cette entrée depuis la vue des dépôts Proxmox."
},
"cluster": {
"heading": "Précautions pour les clusters",
"calloutTitle": "Sur les clusters : mettre à jour un noeud à la fois",
"calloutBody": "Dans un cluster Proxmox, exécutez cette option sur <strong>un nœud à la fois</strong> et attendez la fin du redémarrage avant de passer au suivant. Migrez d’abord les systèmes invités hors du nœud pour éviter une interruption de service dans le cluster. Des versions mineures différentes, comme 8.4.1 et 8.4.5, peuvent cohabiter pendant quelques heures ; des noyaux en cours différents peuvent entraîner un comportement inattendu pour les systèmes invités gérés par HA."
},
"doesnt": {
"heading": "Ce qu'il ne fait pas",
"items": [
"<strong>Changement de version majeure.</strong> Le passage 8 → 9 est une opération distincte ; voir <link>Passer de PVE 8 à PVE 9</link>.",
"<strong>Sauvegarde.</strong> Aucune capture d’état ni retour arrière. Les opérations apt ne sont pas transactionnelles. Conservez vos sauvegardes habituelles (PBS, vzdump, instantanés ZFS).",
"<strong>Mises à jour des conteneurs / VM.</strong> Seul l’hôte est mis à jour ; les systèmes invités restent inchangés.",
"<strong>Écriture dédiée de firmware.</strong> Cet outil ne sert pas à flasher le BIOS ou le firmware des appareils. Les paquets de firmware ou de microcode CPU déjà installés peuvent néanmoins être mis à jour par apt."
]
},
"troubleshooting": {
"heading": "Dépannage",
"items": [
{
"title": "apt update échoue avec 401 Unauthorized",
"body": "Le dépôt Enterprise est activé sans abonnement actif. Avant <code>apt-get update</code>, le script propose le passage à no-subscription. Si vous avez refusé, relancez la mise à jour et acceptez, ou désactivez Enterprise dans <em>Node → Updates → Repositories</em> et activez no-subscription."
},
{
"title": "dist-upgrade reste bloqué sur \"Configuring grub-pc\"",
"body": "Si une question interactive GRUB est visible, elle demande les appareils où installer le chargeur de démarrage. L’option <code>--force-confold</code> concerne les fichiers de configuration, pas ce choix d’appareils. Sélectionnez les disques de démarrage appropriés avec <kbd>Tab</kbd> + <kbd>Space</kbd>, puis OK. Vous pouvez configurer ce choix à l’avance avec <code>dpkg-reconfigure grub-pc</code>."
},
{
"title": "Le noyau a été mis à jour, mais les nouveaux modules d’un pilote externe manquent",
"body": "Pour les pilotes gérés (<code>nvidia_driver</code> et <code>coral_driver</code>), la fonction exécute <code>dkms autoinstall -k &lt;newkver&gt;</code> et peut relancer leurs installateurs avec <code>--auto-reinstall</code>. Vérifiez le résultat avec <code>dkms status</code>. La commande autoinstall peut aussi reconstruire d’autres modules DKMS enregistrés ; la relance des installateurs se limite aux entrées gérées de <code>components_status.json</code>. Examinez les modules tiers encore manquants et reconstruisez-les si nécessaire avec <code>dkms autoinstall</code>."
},
{
"title": "L'invite de redémarrage n'est pas apparue mais je suis sûr que le noyau a changé",
"body": "Les signaux sont alternatifs : <code>/var/run/reboot-required</code> ou une différence entre le noyau en cours et le dernier noyau Proxmox installé. Le script principal ne recherche pas les entrées linux-image dans le journal apt. Vérifiez la version en cours avec <code>uname -r</code> et les paquets de noyau installés avec <code>dpkg-query</code>. Prévoyez le redémarrage nécessaire ou exécutez <code>shutdown -r now</code> au moment voulu."
}
]
},
"files": {
"heading": "Fichiers concernés",
"code": "scripts/utilities/proxmox_update.sh # this script (wrapper)\nscripts/global/update-pve-safe.sh # single safe worker (PVE 8 + PVE 9)\nscripts/global/repository-functions.sh # ensure_repositories\nscripts/global/repository_policy.py # reads and switches repositories through the Proxmox API\nscripts/global/utils-install-functions.sh # pmx_rebuild_dkms_after_kernel\n/usr/local/share/proxmenux/components_status.json # ProxMenux-managed DKMS driver registry\n/etc/apt/sources.list.d/proxmox.sources # no-subscription source, written by Proxmox when the switch is accepted\n/var/run/reboot-required # read to decide on reboot prompt\n# Reboot fallback when needrestart isn't installed:\n# dpkg-query -W 'proxmox-kernel-*-pve-signed' 'pve-kernel-*-pve' vs. uname -r"
},
"related": {
"heading": "Voir aussi",
"items": [
{
"href": "/docs/utils/upgrade-pve8-pve9",
"label": "Mettre à niveau le PVE 8 vers le PVE 9",
"tail": "— pour la mise à niveau de la version majeure (outil différent, modèle de sécurité différent)."
},
{
"href": "/docs/utils/system-utils",
"label": "Installateur des utilitaires système",
"tail": " — pour installer des outils CLI utiles pendant les mises à jour (htop / btop / ncdu)."
},
{
"href": "/docs/utils",
"label": "Présentation des utilitaires",
"tail": " — retour à la présentation de la section."
}
]
}
}

Some files were not shown because too many files have changed in this diff Show More