Compare commits

...

2 Commits

Author SHA1 Message Date
Marius
e0f84298e9 curatare 2026-01-11 15:29:12 +02:00
Marius
00c6410dbd Document VM 201 power outage incident and update HA configuration
- Add troubleshooting guide for 2026-01-11 power outage incident
- Update vm201-windows11.md with correct storage details (disk-1, disk-3)
- Remove HA configuration, document manual failover procedure
- Add ZFS replication status and commands
- Document lessons learned: ISO attachments block migration

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-11 15:28:00 +02:00
3 changed files with 251 additions and 151 deletions

View File

@@ -1,142 +0,0 @@
# Misiune: Setup LXC pentru Claude Code Agent cu acces remote
## Context
Vreau să configurez un LXC pe Proxmox care să ruleze Claude Code autonom.
Voi porni task-uri de pe telefon (SSH) și voi monitoriza/edita de pe orice calculator folosind VS Code Remote SSH.
Repository-ul este pe Gitea intern: gitea.romfast.ro
## Informații infrastructură
CITESTE INFORMATII PROXMOX DIN fisierele din directorul proxmox.
Vreau sa instalezi LXC in nodul pveelite 10.0.20.202
Completeaza datele tu in acest fisier.
IP static dorit pentru LXC: 10.0.20.171
Gateway: 10.0.20.1
### Proxmox
- IP Proxmox: 10.0.20.202 (pveelite)
- User Proxmox: root
- Nodul Proxmox: pveelite
- Storage pentru LXC: local-zfs
### LXC nou pentru Claude Code
- VMID: 171
- Hostname: claude-agent
- IP static: 10.0.20.171
- Gateway: 10.0.20.1
- DNS: 8.8.8.8
- Resurse: 4GB RAM, 2 CPU cores, 32GB disk
### Gitea
- URL: gitea.romfast.ro
- Username Gitea: mmarius28@gmail.com
- Repo de test pentru verificare: romfast/romfastsql
### Calculatorul meu curent
- OS: Linux (WSL2)
- Am deja SSH key? Da, ~/.ssh/id_rsa
## Ce trebuie să faci
### FAZA 1: Pregătire locală și conectare Proxmox
1. Verifică dacă am SSH key local, dacă nu, generează unul
2. Testează conectivitatea la Proxmox prin SSH
3. Adaugă SSH key-ul meu în Proxmox pentru acces fără parolă (dacă nu e deja)
### FAZA 2: Creare LXC pe Proxmox
Conectează-te la Proxmox și execută comenzile pentru:
1. Descarcă template Ubuntu 24.04 (dacă nu există)
2. Creează LXC cu parametrii specificați mai sus
3. Configurează networking static
4. Pornește LXC-ul
### FAZA 3: Configurare LXC - Sistem de bază
Conectează-te la LXC nou creat și:
1. Update sistem
2. Instalează pachete esențiale:
- curl, wget, git, tmux, htop, vim
- build-essential (pentru compilări npm)
- openssh-server
3. Creează user "claude" cu sudo
4. Configurează SSH:
- Permite autentificare cu key
- Dezactivează autentificare cu parolă
- Adaugă SSH key-ul meu pentru userul "claude"
### FAZA 4: Instalare Node.js și Claude Code
În LXC, ca user "claude":
1. Instalează Node.js 20.x via nvm (pentru flexibilitate versiuni)
2. Configurează npm pentru instalări globale în user space
3. Instalează Claude Code: npm install -g @anthropic-ai/claude-code
4. Verifică instalarea: claude --version
### FAZA 5: Configurare Git pentru Gitea
În LXC, ca user "claude":
1. Generează SSH key dedicat pentru Gitea
2. Afișează public key-ul (eu îl voi adăuga manual în Gitea)
3. Configurează git global (user.name, user.email)
4. Creează ~/.ssh/config pentru gitea.romfast.ro
5. Creează directorul /workspace cu permisiuni pentru "claude"
### FAZA 6: Configurare tmux
În LXC, ca user "claude":
1. Creează ~/.tmux.conf cu configurație utilă:
- Mouse support
- History mare (50000 linii)
- Prefix mai ușor (Ctrl+A în loc de Ctrl+B)
- Status bar informativ
- 256 colors
2. Creează script helper ~/start-agent.sh care:
- Creează sesiune tmux "agent" dacă nu există
- Sau se atașează la ea dacă există
### FAZA 7: Configurare Claude Code defaults
În LXC, ca user "claude":
1. Creează ~/.claude/settings.json cu permisiuni default pentru development
2. Creează un CLAUDE.md template în /workspace
### FAZA 8: Verificări finale și documentație
1. Testează SSH de pe calculatorul meu la LXC (user claude)
2. Testează că tmux funcționează
3. Testează că claude --version funcționează
4. Creează un fișier SETUP-COMPLETE.md în /workspace cu:
- IP-ul LXC-ului
- Comenzi utile (cum să pornesc, cum să mă conectez)
- Public key-ul pentru Gitea (să-l adaug manual)
- Next steps (ce mai am de făcut manual)
## Output așteptat
La final vreau să primesc:
1. Confirmarea că totul e instalat și funcțional
2. Comenzile exacte pentru VS Code Remote SSH config
3. Public key-ul SSH pentru Gitea (să-l adaug în interfața web)
4. Instrucțiuni pentru prima autentificare Claude Code
## Note importante
- Dacă ceva necesită input manual de la mine (ex: parolă Proxmox, acceptare licență),
oprește-te și întreabă-mă
- Dacă întâmpini erori, nu sări peste ele - spune-mi ce s-a întâmplat
- Preferă comenzi non-interactive (cu -y, --yes unde e posibil)
- Loghează comenzile importante și output-ul lor
## Începe acum
Mai întâi, întreabă-mă informațiile lipsă marcate cu [COMPLETEAZĂ] de mai sus,
apoi continuă cu Faza 1.

View File

@@ -0,0 +1,202 @@
# VM 201 - Troubleshooting Pană de Curent (2026-01-11)
## Rezumat Incident
**Data:** 2026-01-11
**Problemă:** VM 201 nu pornea după o pană de curent
**Cauză root:** HA blocat în starea "migrate" din cauza dependențelor de storage indisponibil
**Rezoluție:** Migrare manuală, eliminare HA, configurare replicare
---
## Cronologie Incident
### 1. Stare Inițială
- VM 201 era configurat pe **pveelite** (migrat anterior de HA)
- Replicare configurată: pveelite → pve1, pvemini
- HA activ în `ha-group-main` (prioritate: pvemini:100 > pveelite:50)
### 2. Ce s-a întâmplat la pana de curent
1. pvemini a căzut
2. HA a încercat să migreze VM 201 pe pveelite
3. Migrarea a eșuat din cauza ISO atașat de pe storage `backup`
4. Când pvemini a revenit, HA a încercat să migreze înapoi
5. HA a rămas blocat în starea "migrate", reîncercând la fiecare 10 secunde
### 3. Erori întâlnite
```
storage 'backup' is not available on node 'pveelite'
migration aborted
```
---
## Probleme Identificate
| Problemă | Impact | Rezolvare |
|----------|--------|-----------|
| ISO atașat de pe storage local (`backup:iso/virtio-win-latest.iso`) | Blochează migrarea automată | Detașat ISO: `qm set 201 --ide1 none` |
| Snapshot-uri cu referințe la storage `backup` | Blochează migrarea | Șterse snapshot-uri |
| Replicare configurată invers | Discuri pe nod greșit | Recreat job-uri replicare |
| Clone ZFS (base-300) legat de discuri VM 201 | Blochează ștergerea | Promovat clone: `zfs promote` |
| HA cu failback automat | Încerca să mute înapoi VM-ul | Eliminat din HA |
---
## Pași de Rezolvare
### Pas 1: Diagnostic
```bash
# Verificare unde e VM-ul
find /etc/pve/nodes -name '201.conf'
# Verificare stare HA
ha-manager status | grep 201
# Verificare erori
ssh root@10.0.20.202 "journalctl -u pve-ha-lrm -n 50"
```
### Pas 2: Dezactivare HA temporar
```bash
ha-manager set vm:201 --state disabled
# Sau eliminare completă:
ha-manager remove vm:201
```
### Pas 3: Detașare ISO
```bash
qm set 201 --ide1 none
```
### Pas 4: Ștergere snapshot-uri cu referințe problematice
```bash
qm delsnapshot 201 Windows11VisualSVNROAUpdate
qm delsnapshot 201 Windows11Debloated
qm delsnapshot 201 Windows11ProaspatInstalat
```
### Pas 5: Ștergere job-uri replicare corupte
```bash
pvesr delete 201-0 --force
pvesr delete 201-1 --force
```
### Pas 6: Migrare manuală
```bash
qm migrate 201 pvemini
```
### Pas 7: Recreare job-uri replicare
```bash
pvesr create-local-job 201-0 pve1 --schedule '*/30' --comment 'central W11'
pvesr create-local-job 201-1 pveelite --schedule '*/30' --comment 'central W11'
```
### Pas 8: Curățare discuri vechi nefolosite
```bash
# Promovare clone (dacă există)
zfs promote rpool/data/base-300-disk-0
zfs promote rpool/data/base-300-disk-1
# Ștergere discuri vechi
zfs destroy -r rpool/data/vm-201-disk-0
zfs destroy -r rpool/data/vm-201-disk-2
```
---
## Configurație Finală
### VM 201
- **Nod:** pvemini (10.0.20.201)
- **IP:** 10.0.20.122
- **Discuri:** vm-201-disk-1 (EFI), vm-201-disk-3 (500GB)
### HA
- **Status:** ELIMINAT (control manual)
- **Motiv:** Evitare blocaje la migrare automată
### Replicare
- **201-0:** pvemini → pve1 (*/30)
- **201-1:** pvemini → pveelite (*/30)
---
## Lecții Învățate
### 1. NU atașa ISO-uri de pe storage local
Storage-ul `backup` este local pe pvemini și nu e disponibil pe alte noduri. Asta blochează migrarea.
**Soluție:** Detașează ISO-urile când nu sunt necesare:
```bash
qm set 201 --ide1 none --ide2 none
```
### 2. NU crea snapshot-uri cu ISO atașat
Snapshot-urile salvează referințele la storage, care blochează migrarea ulterioară.
### 3. Replicarea și HA sunt independente
- **Replicare (pvesr):** Copiază discurile ZFS între noduri
- **HA:** Gestionează pornirea/migrarea automată
Poți avea replicare fără HA.
### 4. `/etc/pve` este partajat în cluster
Chiar dacă un nod e offline, fișierele de configurare sunt accesibile de pe alte noduri prin pmxcfs.
### 5. Clone-urile ZFS blochează ștergerea
Dacă ai creat un VM template dintr-un snapshot, clone-ul trebuie promovat înainte de a șterge volumul părinte:
```bash
zfs promote rpool/data/base-XXX-disk-Y
```
---
## Procedură Failover Manual (Viitor)
### Când pvemini cade:
```bash
# De pe pveelite sau pve1:
mv /etc/pve/nodes/pvemini/qemu-server/201.conf /etc/pve/nodes/pveelite/qemu-server/201.conf
qm start 201
```
### Când pvemini revine (failback):
```bash
qm migrate 201 pvemini --online
```
---
## Comenzi Utile
```bash
# Status replicare
pvesr status | grep 201
# Forțare replicare imediată
pvesr schedule-now 201-0 && pvesr schedule-now 201-1
# Verificare discuri pe noduri
ssh root@10.0.20.201 "zfs list | grep vm-201"
ssh root@10.0.20.202 "zfs list | grep vm-201"
ssh root@10.0.20.200 "zfs list | grep vm-201"
# Verificare configurare VM
qm config 201 | grep -E 'disk|efidisk|virtio|ide'
```
---
## Referințe
- **Documentație VM 201:** `vm201-windows11.md`
- **Proxmox Replication:** https://pve.proxmox.com/wiki/Storage_Replication
- **Proxmox HA:** https://pve.proxmox.com/wiki/High_Availability
---
**Data rezolvare:** 2026-01-11
**Durată incident:** ~2 ore
**Autor:** Marius Mutu

View File

@@ -24,12 +24,17 @@
### Storage Details
```bash
# Verificare disk usage
ssh root@10.0.20.201 "qm config 201 | grep scsi"
ssh root@10.0.20.201 "qm config 201 | grep -E 'efidisk|virtio'"
# Output:
# scsi0: local-zfs:vm-201-disk-0,size=500G
# efidisk0: local-zfs:vm-201-disk-1,efitype=4m,pre-enrolled-keys=1,size=528K
# virtio0: local-zfs:vm-201-disk-3,size=500G
```
**Discuri active:**
- `vm-201-disk-1` - EFI disk (528K)
- `vm-201-disk-3` - Disk principal Windows (500GB, ~89GB utilizat)
### Network Configuration
- **Interface:** net0 - virtio bridge=vmbr0
- **IP Assignment:** DHCP (managed by network DHCP server)
@@ -335,6 +340,7 @@ ssh root@10.0.20.201 "qm delsnapshot 201 pre-update-snapshot"
### Documentație VM 201 Specifică
- **SSL Certificates IIS:** `vm201-certificat-letsencrypt-iis.md`
- **Troubleshooting Incident 2025-10-08:** `vm201-troubleshooting-backup-nfs.md`
- **Troubleshooting Pană Curent 2026-01-11:** `vm201-troubleshooting-pana-curent-2026-01-11.md`
### Documentație Infrastructură Generală
- **Proxmox Cluster General:** `proxmox-ssh-guide.md`
@@ -367,13 +373,47 @@ ssh root@10.0.20.201 "qm delsnapshot 201 pre-update-snapshot"
- Gitea: 10.0.20.165:3000
- Portainer: 10.0.20.170:9443
### High Availability
- **HA Status:** Enabled (managed by pve-ha-crm)
- **Priority:** Normal
- **Autostart:** Enabled (onboot: 1)
- **Recovery:** Automatic VM migration în caz de node failure
### High Availability și Replicare
**Troubleshooting HA:** Vezi `vm201-troubleshooting-backup-nfs.md` → "VM 201 - HA Error"
#### HA Status: DEZACTIVAT (Control Manual)
- **HA:** Eliminat din cluster HA (decizie post-incident 2026-01-11)
- **Motiv:** Control manual asupra failover-ului pentru a evita blocaje
- **Autostart:** Enabled (onboot: 1) - pornește automat când nodul bootează
#### Replicare ZFS (Activă)
- **Job 201-0:** pvemini → pve1 (la fiecare 30 min)
- **Job 201-1:** pvemini → pveelite (la fiecare 30 min)
```bash
# Verificare status replicare
ssh root@10.0.20.201 "pvesr status | grep 201"
# Forțare replicare imediată
ssh root@10.0.20.201 "pvesr schedule-now 201-0 && pvesr schedule-now 201-1"
```
#### Procedură Failover Manual (când pvemini cade)
**Important:** `/etc/pve` este un filesystem partajat (pmxcfs). Chiar dacă pvemini e offline, configurarea VM-ului e accesibilă de pe orice nod din cluster.
```bash
# De pe pveelite (10.0.20.202) sau pve1 (10.0.20.200):
# 1. Mută configurarea pe nodul unde vrei să pornești
mv /etc/pve/nodes/pvemini/qemu-server/201.conf /etc/pve/nodes/pveelite/qemu-server/201.conf
# 2. Pornește VM-ul (discurile sunt deja replicate)
qm start 201
```
#### Procedură Failback (migrare înapoi pe pvemini)
```bash
# Când pvemini e din nou online, migrează VM-ul înapoi
qm migrate 201 pvemini --online
```
**Troubleshooting:** Vezi `vm201-troubleshooting-pana-curent-2026-01-11.md`
---
@@ -402,6 +442,6 @@ ssh root@10.0.20.201 "qm delsnapshot 201 pre-update-snapshot"
---
**Ultima actualizare:** 2025-11-19
**Ultima actualizare:** 2026-01-11
**Autor:** Marius Mutu
**Proiect:** ROMFASTSQL - VM 201 Documentation