9.2 KiB
Détection environnement Proxmox
Date: 2026-01-10 Version script: 1.5.0 Type: Feature
Problème
Les systèmes Proxmox VE sont basés sur Debian, donc la détection OS standard affiche simplement "debian" sans distinction entre :
- Un serveur Proxmox VE (hôte hyperviseur)
- Une VM hébergée sur Proxmox
- Un conteneur LXC Proxmox
- Un système Debian standard
Solution
Ajout d'une détection complète Proxmox dans le script bench.sh avec trois nouveaux indicateurs :
Nouveaux champs collectés
-
is_proxmox_host(boolean)truesi le système est un hôte Proxmox VEfalsesinon
-
is_proxmox_guest(boolean)truesi le système est une VM ou conteneur hébergé sur Proxmoxfalsesinon
-
proxmox_version(string)- Version de Proxmox VE (ex: "8.1.3")
- Uniquement pour les hôtes Proxmox
-
virtualization_type(string)- Type de virtualisation détecté :
kvm,qemu,lxc,none, etc.
- Type de virtualisation détecté :
Méthodes de détection
1. Détection hôte Proxmox
Le script vérifie si le système EST un serveur Proxmox :
# Méthode 1 : Commande pveversion
if command -v pveversion &>/dev/null; then
is_proxmox_host="true"
proxmox_version=$(pveversion 2>/dev/null | grep 'pve-manager' | awk '{print $2}')
fi
# Méthode 2 : Présence du dossier de config Proxmox
if [[ -d /etc/pve ]]; then
is_proxmox_host="true"
fi
Indicateurs :
- Commande
pveversiondisponible - Dossier
/etc/pveexiste (configuration cluster Proxmox)
2. Détection guest Proxmox
Le script détecte si le système tourne DANS une VM/conteneur Proxmox :
# Détection virtualisation
virtualization_type=$(systemd-detect-virt 2>/dev/null || echo "none")
# Si KVM/QEMU détecté
if [[ "$virtualization_type" == "kvm" || "$virtualization_type" == "qemu" ]]; then
# Vérifier QEMU Guest Agent (installé par défaut sur VM Proxmox)
if command -v qemu-ga &>/dev/null || systemctl is-active qemu-guest-agent &>/dev/null; then
is_proxmox_guest="true"
fi
# Vérifier DMI pour indicateurs Proxmox/QEMU
dmi_system=$(sudo dmidecode -t system 2>/dev/null | grep -i "manufacturer\|product")
if echo "$dmi_system" | grep -qi "qemu\|proxmox"; then
is_proxmox_guest="true"
fi
fi
# Si conteneur LXC détecté
if [[ "$virtualization_type" == "lxc" ]]; then
is_proxmox_guest="true" # Probablement un CT Proxmox
fi
Indicateurs :
- Type virtualisation :
kvm,qemu,lxc - Agent QEMU guest présent
- DMI system contient "QEMU" ou "Proxmox"
Affichage dans le script
Lors de l'exécution du benchmark, les informations Proxmox sont affichées :
✅ Collecte des informations système de base
Hostname: debian-vm
OS: debian 13 (trixie)
Kernel: 6.12.57+deb13-amd64
💠 VM/Conteneur Proxmox détecté (type: kvm)
Ou pour un hôte Proxmox :
Hostname: pve-host
OS: debian 12 (bookworm)
Kernel: 6.8.12-1-pve
🔷 Proxmox VE Host détecté (version: 8.1.3)
Structure JSON collectée
Le script génère un objet JSON virtualization dans SYSTEM_INFO :
{
"hostname": "debian-vm",
"os": {
"name": "debian",
"version": "13 (trixie)",
"kernel_version": "6.12.57+deb13-amd64",
"architecture": "x86_64"
},
"virtualization": {
"is_proxmox_host": false,
"is_proxmox_guest": true,
"proxmox_version": "",
"virtualization_type": "kvm"
}
}
Stockage base de données
Migration 017
Ajout de 3 nouvelles colonnes à hardware_snapshots :
ALTER TABLE hardware_snapshots ADD COLUMN is_proxmox_host BOOLEAN DEFAULT FALSE;
ALTER TABLE hardware_snapshots ADD COLUMN is_proxmox_guest BOOLEAN DEFAULT FALSE;
ALTER TABLE hardware_snapshots ADD COLUMN proxmox_version TEXT;
Modèle SQLAlchemy
# app/models/hardware_snapshot.py
is_proxmox_host = Column(Boolean, nullable=True)
is_proxmox_guest = Column(Boolean, nullable=True)
proxmox_version = Column(String(100), nullable=True)
Schéma Pydantic
Nouvelle classe VirtualizationInfo :
# app/schemas/hardware.py
class VirtualizationInfo(BaseModel):
is_proxmox_host: bool = False
is_proxmox_guest: bool = False
proxmox_version: Optional[str] = None
virtualization_type: Optional[str] = None
Et ajout dans HardwareData :
class HardwareData(BaseModel):
cpu: Optional[CPUInfo] = None
ram: Optional[RAMInfo] = None
# ...
virtualization: Optional[VirtualizationInfo] = None
Extraction backend
Dans app/api/benchmark.py, extraction des données virtualization :
# Virtualization (support both old and new format)
if hw.virtualization:
snapshot.virtualization_type = hw.virtualization.virtualization_type
snapshot.is_proxmox_host = hw.virtualization.is_proxmox_host
snapshot.is_proxmox_guest = hw.virtualization.is_proxmox_guest
snapshot.proxmox_version = hw.virtualization.proxmox_version
elif hw.os and hw.os.virtualization_type:
# Fallback for old format
snapshot.virtualization_type = hw.os.virtualization_type
Cas d'usage
1. Identifier les hôtes Proxmox dans l'inventaire
SELECT hostname, os_name, proxmox_version
FROM hardware_snapshots
WHERE is_proxmox_host = 1;
Résultat :
hostname | os_name | proxmox_version
---------------|----------|----------------
pve-host-01 | debian | 8.1.3
pve-host-02 | debian | 8.0.4
2. Lister les VM Proxmox
SELECT hostname, virtualization_type
FROM hardware_snapshots
WHERE is_proxmox_guest = 1;
Résultat :
hostname | virtualization_type
---------------|--------------------
debian-vm | kvm
ubuntu-ct | lxc
3. Distinguer Debian standard vs Proxmox
SELECT
hostname,
CASE
WHEN is_proxmox_host = 1 THEN 'Proxmox Host'
WHEN is_proxmox_guest = 1 THEN 'Proxmox Guest'
ELSE 'Debian Standard'
END as type
FROM hardware_snapshots
WHERE os_name = 'debian';
Référence technique
systemd-detect-virt
Outil systemd pour détecter la virtualisation :
$ systemd-detect-virt
kvm
$ systemd-detect-virt --container
none
Valeurs possibles :
kvm- VM KVM (Proxmox utilise KVM)qemu- Émulation QEMUlxc- Conteneur LXC (Proxmox CT)vmware- VMwarevirtualbox- VirtualBoxxen- Xen hypervisordocker- Conteneur Dockernone- Pas de virtualisation
pveversion
Commande Proxmox pour afficher la version :
$ pveversion
pve-manager/8.1.3/b46aac3b42da5d15 (running kernel: 6.8.12-1-pve)
$ pveversion | grep pve-manager
pve-manager/8.1.3/b46aac3b42da5d15
dmidecode -t system
Informations DMI du système :
$ sudo dmidecode -t system
System Information
Manufacturer: QEMU
Product Name: Standard PC (Q35 + ICH9, 2009)
Version: pc-q35-8.1
Sur une VM Proxmox, on voit typiquement "QEMU" comme fabricant.
Avantages
1. Distinction claire des environnements
✅ Avant : Tous les systèmes Debian affichaient simplement "debian" ✅ Après : Distinction entre hôte Proxmox, guest Proxmox, et Debian standard
2. Inventaire précis
✅ Savoir quels serveurs sont des hyperviseurs Proxmox ✅ Identifier les VM/CT hébergés sur Proxmox ✅ Suivre les versions de Proxmox déployées
3. Optimisations futures
✅ Benchmarks adaptés (VM vs bare metal) ✅ Métriques spécifiques Proxmox (QEMU agent) ✅ Alertes sur versions Proxmox obsolètes
Rétrocompatibilité
✅ Anciens benchmarks : Nouveaux champs NULL, pas d'impact
✅ Ancien format JSON : Le backend supporte l'ancien format avec os.virtualization_type
✅ Nouveaux benchmarks : Utilise le nouveau format avec objet virtualization
Tester la détection
Sur une VM KVM
sudo systemd-detect-virt
# kvm
sudo dmidecode -t system | grep -i manufacturer
# Manufacturer: QEMU
systemctl is-active qemu-guest-agent
# active (si installé)
Sur un hôte Proxmox
command -v pveversion
# /usr/bin/pveversion
pveversion
# pve-manager/8.1.3/...
ls /etc/pve
# authkey.pub ceph.conf corosync.conf ...
Sur Debian standard
systemd-detect-virt
# none
command -v pveversion
# (vide, pas de sortie)
Fichiers modifiés
-
scripts/bench.sh
- Ajout fonction
detect_proxmox()(lignes 268-322) - Intégration dans
collect_system_info()(ligne 343) - Affichage des infos Proxmox (lignes 415-426)
- Ajout objet
virtualizationdans JSON (ligne 407)
- Ajout fonction
-
backend/migrations/017_add_proxmox_fields.sql
- Migration BDD pour nouveaux champs
-
backend/apply_migration_017.py
- Script d'application migration 017
-
backend/app/models/hardware_snapshot.py
- Ajout colonnes BDD (lignes 70-72)
-
backend/app/schemas/hardware.py
- Classe
VirtualizationInfo(lignes 123-128) - Ajout dans
HardwareData(ligne 191)
- Classe
-
backend/app/api/benchmark.py
- Extraction données virtualization (lignes 133-141)
Voir aussi
- BENCH_SCRIPT_VERSIONS.md - Historique versions script
- systemd-detect-virt man page
- Proxmox VE Documentation
Auteur: Claude Code Version: 1.0