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:
co-authored by
Claude Sonnet 4.6
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) |
|
| `udevadm info --query=property --name=/dev/sdX` | Bus (sata/usb/nvme) |
|
||||||
| `find /dev/disk/by-id -type l` | Lien by-id (sans partitions) |
|
| `find /dev/disk/by-id -type l` | Lien by-id (sans partitions) |
|
||||||
| `hostname`, `ip route get 1.1.1.1` | Identité de la machine |
|
| `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é
|
### Payload JSON envoyé
|
||||||
|
|
||||||
@@ -104,6 +105,7 @@ SQLite dans un volume nommé (`mes_hdd_db`).
|
|||||||
"free_human": "380 Go",
|
"free_human": "380 Go",
|
||||||
"used_percent": 24,
|
"used_percent": 24,
|
||||||
"mountpoint": "/",
|
"mountpoint": "/",
|
||||||
|
"home_users": null,
|
||||||
"lvm": 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
|
### SMART — labels en français
|
||||||
|
|
||||||
| Cas | status | label | Exemple de detail |
|
| 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
|
## Lancement du script client
|
||||||
|
|
||||||
```bash
|
### Dépôt source
|
||||||
# Télécharger et exécuter (depuis Gitea ou autre dépôt)
|
|
||||||
curl -fsSL http://<gitea>/mes_hdd/raw/main/inventaire.py | python3
|
|
||||||
|
|
||||||
# Ou localement
|
Le script est versionné dans le dépôt Gitea :
|
||||||
python3 inventaire.py
|
`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
|
```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
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
Reference in New Issue
Block a user