docs: enrichissement spec — /home, distribution Gitea, détection OS

- Calcul taille /home par utilisateur (home_users[])
- Commande one-liner curl | sudo python3 depuis git.maison43gil.com
- Variable MES_HDD_API configurable
- Détection Proxmox/Ubuntu/Debian avec adaptations (ZFS, Ceph, snap)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Gilles Soulier
2026-05-28 19:53:04 +02:00
parent f9f805cd8b
commit 0f6d579a28
@@ -63,6 +63,7 @@ SQLite dans un volume nommé (`mes_hdd_db`).
| `udevadm info --query=property --name=/dev/sdX` | Bus (sata/usb/nvme) |
| `find /dev/disk/by-id -type l` | Lien by-id (sans partitions) |
| `hostname`, `ip route get 1.1.1.1` | Identité de la machine |
| `du -sb /home/* 2>/dev/null` | Taille par utilisateur sous `/home` |
### Payload JSON envoyé
@@ -104,6 +105,7 @@ SQLite dans un volume nommé (`mes_hdd_db`).
"free_human": "380 Go",
"used_percent": 24,
"mountpoint": "/",
"home_users": null,
"lvm": null
},
{
@@ -139,6 +141,55 @@ SQLite dans un volume nommé (`mes_hdd_db`).
}
```
### Détection OS et adaptations
Le script lit `/etc/os-release` pour identifier l'environnement :
| OS détecté | Condition |
|---|---|
| `proxmox` | `/etc/pve` existe OU `ID=debian` + `VARIANT_ID=proxmox` |
| `ubuntu` | `ID=ubuntu` |
| `debian` | `ID=debian` (fallback) |
Le champ `os` est inclus dans le payload au niveau machine :
```json
{ "hostname": "pve1", "os": "proxmox", "os_version": "8.2", ... }
```
**Adaptations par OS** :
- **Proxmox** : enrichissement additionnel si disponible
- Détection ZFS : `zpool list -H -o name,size,alloc,free` → ajoute `zfs_pool` sur le disque concerné
- Détection Ceph OSD : si `/var/lib/ceph/osd` contient des liens vers le disque → champ `proxmox_role: "ceph_osd"`
- Détection stockage VM : si disque dans `/etc/pve/storage.cfg``proxmox_role: "vm_storage"`
- Les boucles (`loop*`) et devices virtuels (`dm-*`) sont ignorés comme partout
- **Ubuntu** : filtre des montages `squashfs` (snap) dans la liste des partitions — ils polluent `df` et `lsblk`
- **Debian** : comportement par défaut, aucune adaptation spécifique
---
### Taille du dossier `/home`
Si une partition est montée sur `/home` (ou si `/home` est dans la racine), le script calcule la taille occupée par chaque sous-dossier utilisateur via `du -sb /home/* 2>/dev/null`.
Le champ `home_users` est ajouté à la partition dont le point de montage est `/home` (ou `/` si `/home` n'est pas une partition dédiée) :
```json
"home_users": [
{ "user": "gilles", "size_bytes": 91268055040, "size_human": "85 Go" },
{ "user": "alice", "size_bytes": 32212254720, "size_human": "30 Go" }
]
```
Si `/home` n'existe pas ou est vide → `home_users: []`.
Si `du` échoue → `home_users: null`.
Cela permet d'identifier côté frontend les disques avec des données significatives à sauvegarder.
---
### SMART — labels en français
| Cas | status | label | Exemple de detail |
@@ -271,17 +322,39 @@ nginx proxifie `/api/*` vers `api:8000`, sert `/` depuis les fichiers statiques.
## Lancement du script client
```bash
# Télécharger et exécuter (depuis Gitea ou autre dépôt)
curl -fsSL http://<gitea>/mes_hdd/raw/main/inventaire.py | python3
### Dépôt source
# Ou localement
python3 inventaire.py
Le script est versionné dans le dépôt Gitea :
`https://git.maison43gil.com/gilles/mes_hdd`
URL raw du script :
`https://git.maison43gil.com/gilles/mes_hdd/raw/branch/main/inventaire.py`
### Commande one-liner (affichée par le frontend)
```bash
curl -fsSL https://git.maison43gil.com/gilles/mes_hdd/raw/branch/main/inventaire.py | sudo python3 -
```
Aucun argument requis. L'URL de l'API est configurable via variable d'environnement :
Le frontend propose cette commande en copier-coller sur la page d'accueil, avec l'URL de l'API pré-remplie via variable d'environnement :
```bash
MES_HDD_API=http://10.0.0.50:8088 python3 inventaire.py
curl -fsSL https://git.maison43gil.com/gilles/mes_hdd/raw/branch/main/inventaire.py \
| sudo MES_HDD_API=http://10.0.0.50:8088 python3 -
```
### Variables d'environnement du script
| Variable | Défaut | Description |
|---|---|---|
| `MES_HDD_API` | `http://10.0.0.50:8088` | URL de base de l'API |
### Exécution locale
```bash
sudo python3 inventaire.py
# ou
sudo MES_HDD_API=http://192.168.1.x:8088 python3 inventaire.py
```
---