diff --git a/docs/superpowers/specs/2026-05-28-inventaire-hdd-design.md b/docs/superpowers/specs/2026-05-28-inventaire-hdd-design.md index a9ddba3..e3ed84f 100644 --- a/docs/superpowers/specs/2026-05-28-inventaire-hdd-design.md +++ b/docs/superpowers/specs/2026-05-28-inventaire-hdd-design.md @@ -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:///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 ``` ---