mirror of
https://github.com/Alkatrazz24/Funk-lab.git
synced 2026-07-08 10:04:42 +02:00
docs: incident EXT4 2026-05-13 + hermes-agent nouvelle archi SSD
- incidents.md : incident corruption EXT4 après arrêt brutal (655 erreurs, e2fsck, réinstall hermes-agent, nouveau chemin /opt/hermes/.hermes/) - hermes.md : arborescence mise à jour (code SSD vs données RAID5), chemins pip/venv/frontend corrigés - Ansible role hermes_agent : venv path et wrapper mis à jour (hermes_home/.hermes/hermes-agent/venv/ au lieu de hermes_data_dir/) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
a1826fe339
commit
763b29495e
3 changed files with 118 additions and 26 deletions
|
|
@ -187,7 +187,7 @@ curl -s -X POST http://192.168.10.20:1234/v1/embeddings \
|
|||
"import sys,json; print('dim:', len(json.load(sys.stdin)['data'][0]['embedding']))"
|
||||
|
||||
# Installer qdrant-client si absent
|
||||
sudo -u hermes /srv/data/hermes/hermes-agent/venv/bin/pip install "qdrant-client>=1.12.0"
|
||||
sudo -u hermes /opt/hermes/.hermes/hermes-agent/venv/bin/pip install "qdrant-client>=1.12.0"
|
||||
```
|
||||
|
||||
> Toujours passer par le terminal (fichier /tmp/*.py) pour accéder à Qdrant depuis Hermes,
|
||||
|
|
@ -195,15 +195,21 @@ sudo -u hermes /srv/data/hermes/hermes-agent/venv/bin/pip install "qdrant-client
|
|||
|
||||
---
|
||||
|
||||
## Arborescence HERMES_HOME
|
||||
## Arborescence
|
||||
|
||||
Depuis l'incident 2026-05-13, le code est sur le SSD OS et les données sur le RAID5.
|
||||
|
||||
```
|
||||
/srv/data/hermes/
|
||||
/opt/hermes/ → home utilisateur hermes (SSD OS)
|
||||
├── .local/bin/hermes → wrapper bash → venv hermes-agent
|
||||
└── .hermes/hermes-agent/ → code source + venv Python
|
||||
├── venv/ → environnement Python (uv)
|
||||
├── hermes_cli/ → source CLI
|
||||
└── web/ → source frontend dashboard
|
||||
|
||||
/srv/data/hermes/ → HERMES_HOME (RAID5) — données persistantes
|
||||
├── config.yaml → configuration profil par défaut (géré Ansible)
|
||||
├── .env → LM_BASE_URL, LM_API_KEY (géré Ansible)
|
||||
├── hermes-agent/ → installation (venv Python, binaire, frontend web)
|
||||
│ └── web/ → source frontend dashboard (compilé via npm)
|
||||
├── node/ → Node.js local (pour compiler le frontend)
|
||||
├── memories/ → mémoire persistante profil par défaut
|
||||
├── sessions/ → historique sessions profil par défaut
|
||||
├── logs/ → logs
|
||||
|
|
@ -224,11 +230,8 @@ sudo -u hermes /srv/data/hermes/hermes-agent/venv/bin/pip install "qdrant-client
|
|||
# Stopper les services
|
||||
sudo systemctl stop hermes-dashboard hermes-agent
|
||||
|
||||
# Mettre à jour
|
||||
sudo -i -u hermes
|
||||
cd /srv/data/hermes
|
||||
hermes update
|
||||
exit
|
||||
# Mettre à jour (depuis le compte hermes)
|
||||
sudo -i -u hermes bash -c 'HOME=/opt/hermes HERMES_HOME=/srv/data/hermes hermes update'
|
||||
|
||||
# Redémarrer
|
||||
sudo systemctl start hermes-agent hermes-dashboard
|
||||
|
|
@ -236,7 +239,7 @@ sudo systemctl status hermes-agent hermes-dashboard --no-pager
|
|||
```
|
||||
|
||||
> Après une mise à jour majeure, recompiler le frontend (voir section suivante) et vérifier
|
||||
> que `hermes --tui` fonctionne encore (`npm install --ignore-scripts` dans `hermes-agent/ui-tui/` si besoin).
|
||||
> que `hermes --tui` fonctionne encore (`npm install --ignore-scripts` dans `/opt/hermes/.hermes/hermes-agent/ui-tui/` si besoin).
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -246,8 +249,8 @@ Si mise à jour de hermes-agent nécessite un rebuild :
|
|||
|
||||
```bash
|
||||
sudo -u hermes bash -c \
|
||||
'export PATH=/srv/data/hermes/node/bin:$PATH && \
|
||||
cd /srv/data/hermes/hermes-agent/web && \
|
||||
'HOME=/opt/hermes && \
|
||||
cd /opt/hermes/.hermes/hermes-agent/web && \
|
||||
npm install && npm run build'
|
||||
sudo systemctl restart hermes-dashboard
|
||||
```
|
||||
|
|
@ -258,7 +261,7 @@ sudo systemctl restart hermes-dashboard
|
|||
|
||||
| Sujet | Détail |
|
||||
|---|---|
|
||||
| Données sur RAID5 | `HERMES_HOME=/srv/data/hermes` — jamais sur le SSD OS |
|
||||
| Code vs données | Code + venv : `/opt/hermes/.hermes/hermes-agent/` (SSD OS) — Profils/données : `/srv/data/hermes/` (RAID5) |
|
||||
| LiteLLM requis | litellm.service doit tourner avant hermes-agent |
|
||||
| `LM_API_KEY` | Doit valoir `lm-studio` exactement |
|
||||
| Contexte | GPU (funk-ai) : 32768 tokens réels, override Hermes à 65536 via config.yaml |
|
||||
|
|
|
|||
|
|
@ -2,6 +2,95 @@
|
|||
|
||||
---
|
||||
|
||||
## 2026-05-13 — storage-01 : corruption EXT4 après arrêt brutal + reinstall hermes-agent
|
||||
|
||||
### Symptômes
|
||||
|
||||
- `hermes-agent` en boucle de crash : `SyntaxError: source code string cannot contain null bytes`
|
||||
- Erreurs EXT4 au démarrage des services : `Directory block failed checksum`, `deleted inode referenced`
|
||||
- `dmesg` : `EXT4-fs (md0): error count since last fsck: 655`
|
||||
- `sdb` : erreurs ATA bus (`SError: { RecovComm HostInt PHYRdyChg PHYInt }`) et I/O error sector 13405184
|
||||
|
||||
### Cause racine
|
||||
|
||||
Arrêt brutal du cluster la veille (`funk-stop --k8s`) → journal ext4 non rejoué correctement → 655 erreurs de corruption sur `/dev/md0`. `sdb` avait des erreurs transitoires mais SMART PASSED (pas de défaillance matérielle).
|
||||
|
||||
### Résolution étape par étape
|
||||
|
||||
**1. Vérifier SMART sdb**
|
||||
|
||||
```bash
|
||||
smartctl -H /dev/sdb
|
||||
# SMART overall-health self-assessment test result: PASSED → purement logiciel
|
||||
```
|
||||
|
||||
**2. Arrêter les services et démonter**
|
||||
|
||||
```bash
|
||||
sudo systemctl stop hermes-agent litellm qdrant postgresql-16 nfs-server
|
||||
sudo umount /srv/data
|
||||
```
|
||||
|
||||
**3. Réparer le filesystem**
|
||||
|
||||
```bash
|
||||
sudo e2fsck -f -y /dev/md0
|
||||
# 655 erreurs corrigées : HTREE invalides, blocs multiplement revendiqués,
|
||||
# checksums de répertoires incorrects, compteurs d'inodes wronge
|
||||
```
|
||||
|
||||
**4. Remonter et redémarrer les services**
|
||||
|
||||
```bash
|
||||
sudo mount /srv/data
|
||||
sudo systemctl start postgresql-16 qdrant litellm hermes-agent nfs-server
|
||||
```
|
||||
|
||||
**5. Hermes-agent toujours en erreur après fsck**
|
||||
|
||||
Le e2fsck a zéroïsé des blocs appartenant à plusieurs inodes simultanément → des fichiers du venv Python et du code source `hermes_cli/` ont été corrompus (null bytes).
|
||||
|
||||
Tentatives de réparation du venv échouées (`pip install -e .` crash, `uv.lock` corrompu).
|
||||
|
||||
**6. Réinstallation complète de hermes-agent**
|
||||
|
||||
```bash
|
||||
# Supprimer le code source corrompu (les profils dans /srv/data/hermes/profiles/ ne sont PAS touchés)
|
||||
sudo rm -rf /srv/data/hermes/hermes-agent
|
||||
sudo rm /opt/hermes/.local/bin/hermes
|
||||
|
||||
# Réinstaller depuis le script officiel (depuis un répertoire valide)
|
||||
cd /srv/data/hermes
|
||||
sudo -u hermes bash -c 'cd /srv/data/hermes && HOME=/opt/hermes HERMES_HOME=/srv/data/hermes curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash'
|
||||
```
|
||||
|
||||
> Lors du `sudo rm -rf`, ne pas rester dans le répertoire supprimé — le shell perd le CWD et le script d'installation échoue avec `getcwd: cannot access parent directories`.
|
||||
|
||||
**Résultat** : hermes-agent réinstallé dans `/opt/hermes/.hermes/hermes-agent/` (SSD OS, plus de RAID5). Tous les profils (`funk-ai`, `brain`, `system`, `monitor`) intacts dans `/srv/data/hermes/profiles/`.
|
||||
|
||||
### Changement d'architecture post-incident
|
||||
|
||||
| Avant | Après |
|
||||
|---|---|
|
||||
| Code hermes-agent : `/srv/data/hermes/hermes-agent/` (RAID5) | Code hermes-agent : `/opt/hermes/.hermes/hermes-agent/` (SSD OS) |
|
||||
| Venv : `/srv/data/hermes/hermes-agent/venv/` | Venv : `/opt/hermes/.hermes/hermes-agent/venv/` |
|
||||
| Profils/données : `/srv/data/hermes/` | Profils/données : `/srv/data/hermes/` (inchangé) |
|
||||
|
||||
Le code étant désormais sur le SSD, une corruption future du RAID5 n'impactera plus l'installation — seulement les profils et données.
|
||||
|
||||
### Surveillance post-incident
|
||||
|
||||
```bash
|
||||
# Santé RAID et disques
|
||||
cat /proc/mdstat
|
||||
smartctl -H /dev/sdb # à surveiller
|
||||
|
||||
# Vérifier que e2fsck n'a pas schedulé un check au prochain boot
|
||||
sudo tune2fs -l /dev/md0 | grep -E "check|count|error"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 2026-05-11 — storage-01 : boucle fsck après coupure de courant
|
||||
|
||||
### Symptômes
|
||||
|
|
|
|||
|
|
@ -79,7 +79,7 @@
|
|||
- name: Install Python packages for Hermes skills
|
||||
ansible.builtin.pip:
|
||||
name: "qdrant-client>=1.12.0"
|
||||
executable: "{{ hermes_data_dir }}/hermes-agent/venv/bin/pip"
|
||||
executable: "{{ hermes_home }}/.hermes/hermes-agent/venv/bin/pip"
|
||||
state: present
|
||||
become: true
|
||||
become_user: "{{ hermes_user }}"
|
||||
|
|
@ -161,7 +161,7 @@
|
|||
exec sudo -u {{ hermes_user }} \
|
||||
HOME={{ hermes_home }} \
|
||||
HERMES_HOME={{ hermes_data_dir }} \
|
||||
{{ hermes_data_dir }}/hermes-agent/venv/bin/hermes "$@"
|
||||
{{ hermes_home }}/.hermes/hermes-agent/venv/bin/hermes "$@"
|
||||
|
||||
# --- Firewall ---
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue