Featured image

Il Nemico Silenzioso dell’Homelab Link to heading

Ogni tanto nella mia zona tolgono la corrente. Niente di drammatico, semplicemente capita che mentre stai lavorando tranquillamente si spenge tutto: il LED del mini PC che si spegne, il router che va offline, e tu che realizzi che tutti i container stanno facendo un reboot improvviso.

Warning

Inconvenienti di uno Shutdown Improvviso

  • Possibile corruzione filesystem nei container LXC
  • Perdita dati non salvati nei database
  • Occasionale necessità di controllo filesystem su Proxmox
  • Riavvio manuale di tutti i servizi

Ho quindi deciso di investire in un UPS (Uninterruptible Power Supply).

Network UPS Tools: Il Ponte tra Hardware e Software Link to heading

NUT è il software standard per la gestione UPS su sistemi Linux. Permette di:

  • Monitorare lo stato dell’UPS in tempo reale
  • Configurare azioni automatiche in caso di eventi (blackout, batteria scarica)
  • Condividere informazioni UPS sulla rete (utile per spegnere più dispositivi)
  • Integrare con sistemi di monitoring come Grafana

Installazione NUT su Proxmox Link to heading

Installeremo NUT direttamente sul nodo principale di Proxmox, non in un container LXC. Questo approccio garantisce che:

  • Il sistema di monitoring UPS rimanga attivo anche se i container sono spenti
  • Proxmox possa gestire lo shutdown di tutti i container prima di spegnersi
  • Non ci siano dipendenze circolari (container che dipende dall’host per spegnersi)
  • La comunicazione USB con l’UPS sia diretta e affidabile
Info
Perché Non in Container? Anche se potremmo installare NUT in un container LXC, installarlo sull’host Proxmox è la scelta più robusta: garantisce che il sistema di protezione sia sempre operativo e possa orchestrare lo shutdown dell’intero homelab in modo coordinato.

Prima di tutto installiamo solo il pacchetto essenziale su Proxmox:

apt update
apt install nut
Info

Architettura NUT Semplificata

  • nut-driver: Comunica direttamente con l’UPS via USB
  • nut-server (upsd): Condivide i dati UPS sulla rete (opzionale per setup singolo)
  • nut-monitor (upsmon): Monitora e gestisce le azioni (shutdown)

Per un setup homelab semplice, possiamo usare solo driver + monitor, saltando il server di rete.

File 1: nut.conf - “Come funziona NUT?” Link to heading

File principale che definisce la modalità operativa:

nano /etc/nut/nut.conf
MODE=standalone

Cosa significa:

  • MODE=standalone: “Tutto su questa macchina: driver, monitor e UPS fisico sono qui”
  • Alternative possibili: netserver (condivide UPS in rete) o netclient (usa UPS remoto)

File 2: upsmon.conf - “Quando spegnere tutto?” Link to heading

Il cervello del sistema: decide quando e come spegnere Proxmox:

nano /etc/nut/upsmon.conf
MONITOR epyc-ion@localhost 1 admin password master

SHUTDOWNCMD "/sbin/shutdown -h +0"
POLLFREQ 5
DEADTIME 15
POWERDOWNFLAG /etc/killpower

NOTIFYFLAG ONBATT SYSLOG+WALL
NOTIFYFLAG LOWBATT SYSLOG+WALL
NOTIFYFLAG ONLINE SYSLOG+WALL

Spiegazione dettagliata:

MONITOR epyc-ion@localhost 1 admin password master

  • epyc-ion@localhost: “Monitora l’UPS chiamato ’epyc-ion’ su questa macchina”
  • 1: “Questo UPS alimenta 1 sistema (questo Proxmox)”
  • admin password: Credenziali per accedere ai dati UPS (locale, sicurezza basic)
  • master: “Questa macchina è il capo, decide quando spegnere tutto”

SHUTDOWNCMD “/sbin/shutdown -h +0”

  • “Quando decidi di spegnere, esegui questo comando”
  • -h +0: Halt immediato (senza attesa)
Warning
Shutdown Immediato vs Graceful shutdown -h +0 spegne il sistema immediatamente. Proxmox gestisce automaticamente lo shutdown graceful dei container LXC durante il processo di spegnimento del nodo, quindi non serve fare script complessi per spegnere ogni container singolarmente.

POLLFREQ 5

  • “Controlla lo stato UPS ogni 5 secondi” (frequenza normale)

DEADTIME 15

  • “Se non ricevo dati UPS per 15 secondi, considera l’UPS morto”

POWERDOWNFLAG /etc/killpower

  • “Crea questo file quando spegni per dire al sistema di non riaccendersi”

NOTIFYFLAG

  • ONBATT: “Quando vai su batteria, scrivi nei log + messaggio a schermo”
  • LOWBATT: “Quando batteria scarica, scrivi nei log + messaggio a schermo”
  • ONLINE: “Quando torna corrente, scrivi nei log + messaggio a schermo”
Info

Master vs Slave

  • Master: “Io comando, quando decido che è ora, spengo tutto”
  • Slave: “Ascolto il master, mi spengo quando me lo dice”

Nel nostro caso siamo master perché siamo l’unica macchina collegata all’UPS.

Identificazione UPS e Risoluzione Problemi Permessi Link to heading

Prima di testare il driver, dobbiamo identificare correttamente l’UPS e risolvere i permessi USB.

Step 1: Identifica l’UPS Link to heading

lsusb

Cerca una riga simile a:

Bus 001 Device 003: ID 0764:0601 Cyber Power System, Inc. PR1500LCDRT2U UPS

I numeri 0764:0601 sono vendorid e productid del tuo UPS.

Step 2: Configura File 3: ups.conf per UPS Epyc ION Link to heading

Per gli UPS Epyc ION (che si identificano come Cyber Power System), usa il driver HID:

nano /etc/nut/ups.conf
[epyc-ion]
    driver = usbhid-ups
    port = auto
    desc = "Epyc Ion"
Info
Driver HID vs Serial Gli UPS Epyc ION usano interfaccia HID (Human Interface Device), non seriale. Per questo motivo il driver corretto è usbhid-ups, non nutdrv_qx. Il driver HID riconosce automaticamente l’UPS senza bisogno di specificare vendorid/productid.

Step 3: Verifica Versione NUT Link to heading

Gli UPS Epyc ION richiedono NUT 2.8.0 o superiore. Verifica la tua versione:

upsdrvctl -V

Se hai una versione precedente (2.7.x), aggiorna:

# Solo se necessario - per Proxmox/Debian
apt update
apt install nut/bullseye-backports

# Oppure aggiungi repository NUT aggiornato
Warning
Compatibilità Versioni NUT 2.7.x non supporta correttamente gli UPS Epyc ION. Con NUT 2.8+ funzionano automaticamente senza configurazioni speciali di permessi.

Test Driver UPS Link to heading

Ora testiamo il driver:

# Avvia il driver
upsdrvctl start epyc-ion

Se tutto va bene, dovresti vedere:

Network UPS Tools - Generic HID driver 0.52 (2.8.1)
USB communication driver (libusb 1.0) 0.46
Using subdriver: CyberPower HID 0.8

Se ricevi “connection refused”, avvia tutti i servizi NUT nell’ordine corretto:

# Ferma tutto per ripartire pulito
systemctl stop nut-monitor
systemctl stop nut-server
upsdrvctl stop

# Avvia in ordine: Driver → Server → Monitor
upsdrvctl start epyc-ion
systemctl start nut-server
systemctl start nut-monitor

# Abilita all'avvio di Proxmox
systemctl enable nut-server
systemctl enable nut-monitor

Verifica la comunicazione:

# Controlla i dati UPS
upsc epyc-ion

Dovresti vedere output simile a:

battery.charge: 100
battery.voltage: 13.70
input.voltage: 230.0
ups.load: 25
ups.status: OL
Info
Architettura NUT Il flusso è: Driver (comunica con UPS) → nut-server (condivide dati) → nut-monitor (gestisce shutdown). Se upsc da “connection refused”, significa che il driver funziona ma il server non è avviato.

Verifica Completa Link to heading

Verifica che tutto funzioni:

# Controlla stato UPS
upsc epyc-ion

# Verifica configurazione monitoring
upsmon -D

Se tutto funziona, dovresti vedere le informazioni dell’UPS:

battery.charge: 100
battery.voltage: 13.70
input.voltage: 230.0
ups.load: 25
ups.status: OL
Info

Codici Status Principali

  • OL: Online (alimentazione normale)
  • OB: On Battery (su batteria)
  • LB: Low Battery (batteria scarica)

Test di Shutdown (Opzionale) Link to heading

Per testare lo shutdown automatico senza rischi:

# Simula evento "low battery"
upsmon -c fsd

Questo forzerà uno shutdown controllato. Usalo solo se sei sicuro di voler testare lo spegnimento completo.

Warning
Test Reale Il test più sicuro è scollegare l’alimentazione UPS per qualche secondo e verificare che il sistema si spenga automaticamente quando la batteria è scarica.

Con questa configurazione minimale, Proxmox si spegnerà automaticamente quando l’UPS segnalerà batteria scarica, proteggendo i dati senza configurazioni complesse.

Gestione Container durante Shutdown Link to heading

Una domanda legittima: serve spegnere manualmente ogni container prima di spegnere Proxmox?

Risposta breve: No.

Proxmox gestisce automaticamente lo shutdown graceful di tutti i container LXC quando riceve il comando di spegnimento. Il processo è:

  1. NUT rileva batteria scarica
  2. upsmon esegue shutdown -h +0
  3. Proxmox riceve il segnale di shutdown
  4. Proxmox invia SIGTERM a tutti i container
  5. Container eseguono shutdown graceful interno
  6. Proxmox aspetta un timeout (di default 60s) per container lenti
  7. Proxmox forza lo stop se necessario
  8. Sistema si spegne completamente
Info
Perché Proxmox lo Fa Bene Proxmox è progettato per gestire VM e container come un hypervisor professionale. Sa come spegnere tutto in modo ordinato senza perdere dati, proprio come VMware o Hyper-V.

Se hai container particolarmente critici con database complessi, puoi creare uno script personalizzato, ma per un homelab standard il comportamento di default di Proxmox è più che sufficiente.

Conclusioni Link to heading

L’implementazione di NUT su Proxmox trasforma un semplice UPS in un sistema di protezione intelligente per il nostro homelab. La configurazione è semplice e una volta impostata funziona automaticamente, garantendo shutdown sicuri affidandosi alla gestione nativa di Proxmox.

Tip

Prossimi Passi

  • Testa periodicamente scollegando l’alimentazione per qualche secondo
  • Monitora i log per verificare che tutto funzioni come previsto
  • Documenta i tempi di autonomia reali del tuo setup

Un investimento modesto che può evitare molti grattacapi futuri.