390 lines
9.2 KiB
Markdown
390 lines
9.2 KiB
Markdown
# 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
|
|
|
|
1. **`is_proxmox_host`** (boolean)
|
|
- `true` si le système est un hôte Proxmox VE
|
|
- `false` sinon
|
|
|
|
2. **`is_proxmox_guest`** (boolean)
|
|
- `true` si le système est une VM ou conteneur hébergé sur Proxmox
|
|
- `false` sinon
|
|
|
|
3. **`proxmox_version`** (string)
|
|
- Version de Proxmox VE (ex: "8.1.3")
|
|
- Uniquement pour les hôtes Proxmox
|
|
|
|
4. **`virtualization_type`** (string)
|
|
- Type de virtualisation détecté : `kvm`, `qemu`, `lxc`, `none`, etc.
|
|
|
|
## Méthodes de détection
|
|
|
|
### 1. Détection hôte Proxmox
|
|
|
|
Le script vérifie si le système EST un serveur Proxmox :
|
|
|
|
```bash
|
|
# 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 `pveversion` disponible
|
|
- Dossier `/etc/pve` existe (configuration cluster Proxmox)
|
|
|
|
### 2. Détection guest Proxmox
|
|
|
|
Le script détecte si le système tourne DANS une VM/conteneur Proxmox :
|
|
|
|
```bash
|
|
# 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` :
|
|
|
|
```json
|
|
{
|
|
"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` :
|
|
|
|
```sql
|
|
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
|
|
|
|
```python
|
|
# 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` :
|
|
|
|
```python
|
|
# 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` :
|
|
|
|
```python
|
|
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 :
|
|
|
|
```python
|
|
# 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
|
|
|
|
```sql
|
|
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
|
|
|
|
```sql
|
|
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
|
|
|
|
```sql
|
|
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 :
|
|
|
|
```bash
|
|
$ systemd-detect-virt
|
|
kvm
|
|
|
|
$ systemd-detect-virt --container
|
|
none
|
|
```
|
|
|
|
**Valeurs possibles :**
|
|
- `kvm` - VM KVM (Proxmox utilise KVM)
|
|
- `qemu` - Émulation QEMU
|
|
- `lxc` - Conteneur LXC (Proxmox CT)
|
|
- `vmware` - VMware
|
|
- `virtualbox` - VirtualBox
|
|
- `xen` - Xen hypervisor
|
|
- `docker` - Conteneur Docker
|
|
- `none` - Pas de virtualisation
|
|
|
|
### pveversion
|
|
|
|
Commande Proxmox pour afficher la version :
|
|
|
|
```bash
|
|
$ 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 :
|
|
|
|
```bash
|
|
$ 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
|
|
|
|
```bash
|
|
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
|
|
|
|
```bash
|
|
command -v pveversion
|
|
# /usr/bin/pveversion
|
|
|
|
pveversion
|
|
# pve-manager/8.1.3/...
|
|
|
|
ls /etc/pve
|
|
# authkey.pub ceph.conf corosync.conf ...
|
|
```
|
|
|
|
### Sur Debian standard
|
|
|
|
```bash
|
|
systemd-detect-virt
|
|
# none
|
|
|
|
command -v pveversion
|
|
# (vide, pas de sortie)
|
|
```
|
|
|
|
## Fichiers modifiés
|
|
|
|
1. **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 `virtualization` dans JSON (ligne 407)
|
|
|
|
2. **backend/migrations/017_add_proxmox_fields.sql**
|
|
- Migration BDD pour nouveaux champs
|
|
|
|
3. **backend/apply_migration_017.py**
|
|
- Script d'application migration 017
|
|
|
|
4. **backend/app/models/hardware_snapshot.py**
|
|
- Ajout colonnes BDD (lignes 70-72)
|
|
|
|
5. **backend/app/schemas/hardware.py**
|
|
- Classe `VirtualizationInfo` (lignes 123-128)
|
|
- Ajout dans `HardwareData` (ligne 191)
|
|
|
|
6. **backend/app/api/benchmark.py**
|
|
- Extraction données virtualization (lignes 133-141)
|
|
|
|
## Voir aussi
|
|
|
|
- [BENCH_SCRIPT_VERSIONS.md](BENCH_SCRIPT_VERSIONS.md) - Historique versions script
|
|
- [systemd-detect-virt man page](https://www.freedesktop.org/software/systemd/man/systemd-detect-virt.html)
|
|
- [Proxmox VE Documentation](https://pve.proxmox.com/wiki/Main_Page)
|
|
|
|
---
|
|
|
|
**Auteur:** Claude Code
|
|
**Version:** 1.0
|