🧰 Proxmox CLI – Comandi ZFS con Esempi

🧩 Gestione pool

  • Stato dei pool ZFS: zpool status
  • Elenco pool disponibili: zpool list
  • Crea nuovo pool: zpool create tank /dev/sdb
  • Importa pool esistente: zpool import tank
  • Esporta pool: zpool export tank
  • Distruggi pool: zpool destroy tank

📦 Gestione volumi e dataset

  • Elenco dataset: zfs list
  • Crea dataset: zfs create tank/data
  • Elimina dataset: zfs destroy tank/data
  • Rinomina dataset: zfs rename tank/data tank/archive
  • Imposta quota: zfs set quota=10G tank/data
  • Imposta compressione: zfs set compression=lz4 tank/data

🧪 Snapshot e backup

  • Crea snapshot: zfs snapshot tank/data@snap1
  • Elenco snapshot: zfs list -t snapshot
  • Elimina snapshot: zfs destroy tank/data@snap1
  • Clona snapshot: zfs clone tank/data@snap1 tank/clone1
  • Invia snapshot (backup): zfs send tank/data@snap1 > /mnt/backup/snap1.zfs
  • Ricevi snapshot (ripristino): zfs receive tank/data < /mnt/backup/snap1.zfs

🔍 Monitoraggio e diagnostica

  • Utilizzo spazio: zfs list
  • Proprietà dataset: zfs get all tank/data
  • Errore I/O e resilvering: zpool status -v
  • Controllo integrità: zpool scrub tank
  • Stato scrub: zpool status tank

🛠️ Configurazioni avanzate

  • Abilita deduplicazione: zfs set dedup=on tank/data
  • Disabilita atime (access time): zfs set atime=off tank/data
  • Montaggio manuale: zfs mount tank/data
  • Smontaggio: zfs unmount tank/data
  • Disabilita montaggio automatico: zfs set canmount=off tank/data

🧰 Proxmox CLI – Comandi Essenziali con Esempi

🔗 Cluster

  • Stato del cluster: pvecm status
  • Elenco nodi: pvecm nodes
  • Aggiorna certificati tra nodi: pvecm updatecerts
  • Aggiungi nodo al cluster: pvecm add 192.168.1.12
  • Rimuovi nodo dal cluster: pvecm delnode pve-node3

💾 Storage

  • Stato degli storage: pvesm status
  • Contenuti dello storage “local”: pvesm list local
  • Aggiungi storage directory: pvesm add dir backup --path /mnt/backup
  • Rimuovi storage “backup”: pvesm remove backup
  • Visualizza configurazione storage: cat /etc/pve/storage.cfg

🖥️ Nodo e sistema

  • Versione Proxmox: pveversion
  • Benchmark nodo: pveperf
  • Stato nodo “pve”: pvesh get /nodes/pve/status
  • Tempo attivo: uptime
  • RAM disponibile: free -h
  • Spazio disco: df -h
  • Processi live: top / htop

📦 VM e container

  • Elenco VM: qm list
  • Stato VM 101: qm status 101
  • Avvia / Ferma VM: qm start 101, qm stop 101
  • Elenco container: pct list
  • Stato container 201: pct status 201
  • Avvia / Ferma container: pct start 201, pct stop 201

🔐 Sottoscrizione

  • Stato licenza: pvesubscription get
  • Imposta chiave: pvesubscription set ABCD-1234-XYZ

🧪 Backup e snapshot

  • Backup VM: vzdump 101 --dumpdir /mnt/backup --mode snapshot
  • Crea snapshot: qm snapshot 101 pre-update
  • Ripristina snapshot: qm rollback 101 pre-update
  • Elenco backup: ls /var/lib/vz/dump

📡 Rete e firewall

  • Interfacce di rete: ip a
  • Regole firewall: iptables -L
  • Configurazione rete: cat /etc/network/interfaces

👥 Utenti e permessi

  • Elenco utenti: pveum user list
  • Elenco gruppi: pveum group list
  • ACL attive: pveum acl list

🧠 API e automazione

  • Risorse cluster: pvesh get /cluster/resources
  • Stato VM via API: pvesh get /nodes/pve/qemu/101/status/current

🧹 Diagnostica e manutenzione

  • Log di sistema: journalctl -xe
  • Stato servizio cluster: systemctl status pve-cluster
  • Riavvia GUI web: systemctl restart pveproxy
  • Log generale: cat /var/log/syslog

🧩 Extra utili

  • Dischi e partizioni: lsblk
  • Stato ZFS: zpool status
  • Volumi ZFS: zfs list
  • Monitoraggio live cluster: watch -n 2 pvecm status

🧠 Come realizzare un tunnel SSH inverso per accedere a Home Assistant da remoto

Hai mai desiderato accedere alla tua domotica anche quando sei fuori casa? In questo articolo ti mostriamo come Marco, un appassionato di automazione domestica, ha configurato un tunnel SSH inverso per controllare Home Assistant in modo sicuro e senza esporre porte sensibili su internet.

🏠 Lo scenario

Marco ha un server Home Assistant installato su una rete locale con IP 192.168.88.1. Quando è in viaggio con il suo MacBook, collegato a una rete diversa (192.168.3.66), vuole comunque poter accedere all’interfaccia web di Home Assistant.

Per farlo, ha configurato il suo router con un DNS dinamico (hostddns.duckdns.org) e ha aperto la porta 6622, che viene inoltrata alla porta SSH del suo Mac.

🔐 La soluzione: tunnel SSH inverso

Sul server Home Assistant, Marco ha impostato questo comando:

ssh -N -R 8123:localhost:8123 -p 6622 marco@hostdmz.duckdns.org

Questo crea un tunnel sicuro che espone la porta 8123 (usata da Home Assistant) sul Mac remoto, rendendola accessibile come http://localhost:8123.

⚙️ Requisiti

  • Il file sshd_config sul Mac deve avere:
  • Il router deve inoltrare la porta 6622 verso la 22 del Mac
  • È consigliato l’uso di chiavi SSH per l’autenticazione automatica

🚀 Vantaggi

  • Nessuna esposizione diretta della porta 8123 su internet
  • Accesso sicuro e cifrato tramite SSH
  • Possibilità di automatizzare il tunnel all’avvio del sistema

🛠️ Risolvere i problemi di rete sulle schede Intel e1000/e1000e con uno script systemd persistente

Introduzione

Le schede di rete Intel basate sui driver e1000 ed e1000e sono molto diffuse nei server Linux e nei cluster Proxmox. Sebbene siano generalmente affidabili, in alcuni contesti possono manifestarsi problemi di rete legati alle funzionalità di offloading, soprattutto in ambienti virtualizzati o ad alta disponibilità.

Questi problemi includono:

  • Perdita di pacchetti
  • Congestione della coda di trasmissione
  • Blocchi temporanei delle VM
  • Messaggi kernel come NETDEV WATCHDOG o transmit queue timeout

🔍 Il problema: offload e instabilità

Le funzionalità di offloading (come TSOGSOGRORX/TX checksumming) sono pensate per migliorare le prestazioni, ma su alcune schede Intel possono causare instabilità, specialmente sotto carico o in presenza di bridge virtuali.

🛠️ La soluzione: uno script interattivo con systemd

https://community-scripts.github.io/ProxmoxVE/scripts?id=nic-offloading-fix

Per risolvere il problema in modo definitivo, è stato utilizzato uno script interattivo che:

  • Rileva automaticamente tutte le interfacce di rete basate su driver Intel e1000/e1000e
  • Disattiva le offload critiche tramite ethtool
  • Crea un servizio systemd dedicato per ciascuna interfaccia
  • Garantisce la persistenza della configurazione ad ogni riavvio
  • Fornisce comandi di verifica e log per auditing

⚙️ Cosa fa lo script

  1. Identifica le interfacce compatibili con i driver Intel
  2. Disattiva le seguenti funzionalità:
    • TSO (TCP Segmentation Offload)
    • GSO (Generic Segmentation Offload)
    • GRO (Generic Receive Offload)
    • RX/TX checksumming
  3. Crea un file .service in /etc/systemd/system/ per ogni interfaccia
  4. Abilita e avvia il servizio con systemctl
  5. Fornisce comandi di verifica (ethtoolsystemctl statusjournalctl) per confermare l’efficacia

✅ Risultato: rete stabile e cluster affidabile

Dopo l’applicazione dello script su tutti i nodi del cluster, i benefici sono stati immediati:

  • Nessun nuovo errore NETDEV WATCHDOG
  • Offload disattivati in modo persistente
  • Log di sistema puliti
  • Migrazioni HA fluide e senza freeze
  • Maggiore affidabilità sotto carico

📦 Compatibilità

Lo script è compatibile con:

  • Proxmox VE (tutte le versioni recenti)
  • Debian e derivati
  • Interfacce gestite da driver Intel e1000/e1000e
  • Ambienti virtualizzati con bridge e VLAN

Conclusione

Se stai gestendo un’infrastruttura Linux o Proxmox con schede di rete Intel, disattivare le offload in modo persistente può risolvere problemi critici di rete. Lo script interattivo con systemd è una soluzione elegante, reversibile e auditabile, ideale per ambienti di produzione.

🛠️ Risolvere i timeout di rete su schede Realtek r8169: il ruolo di ASPM

Introduzione

Se stai usando una scheda di rete Realtek r8169 su Linux (Debian, Proxmox, Ubuntu), potresti aver incontrato questo messaggio nel log di sistema:

Codice

NETDEV WATCHDOG: transmit queue 0 timed out
ASPM disabled on Tx timeout

Questo errore indica un problema critico di trasmissione che può causare instabilità di rete, perdita di pacchetti e reset del link. In questo articolo analizziamo la causa, il ruolo di ASPM e come risolvere il problema in modo permanente.

Cos’è ASPM?

ASPM (Active State Power Management) è una tecnologia PCI Express che riduce il consumo energetico dei dispositivi quando non sono attivamente in uso. Gestisce lo stato del link PCIe tra la scheda e il chipset, passando da:

  • L0: attivo
  • L1: inattivo ma pronto
  • L2: quasi spento

Su alcune schede Realtek, ASPM può interferire con la trasmissione, causando timeout e instabilità.

Sintomi del problema

  • Messaggi NETDEV WATCHDOG nel log kernel
  • Disconnessioni di rete intermittenti
  • Reset del link
  • Prestazioni degradate sotto carico

Soluzione passo-passo

1. Disattiva offload sulla scheda

bash

ethtool -K enp6s0 gso off gro off tso off tx off rx off

2. Crea un servizio systemd persistente

bash

cat <<EOF > /etc/systemd/system/disable-nic-offload-enp6s0.service
[Unit]
Description=Disable NIC offloading for Realtek r8169 interface enp6s0
After=network.target

[Service]
Type=oneshot
ExecStart=/sbin/ethtool -K enp6s0 gso off gro off tso off tx off rx off
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable disable-nic-offload-enp6s0.service
systemctl start disable-nic-offload-enp6s0.service

3. Disattiva ASPM via GRUB

Modifica /etc/default/grub:

bash

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash pcie_aspm=off"

Poi:

bash

update-grub
reboot

Verifica post-modifica

Dopo il riavvio, controlla:

bash

ethtool -k enp6s0
journalctl -b | grep enp6s0

Se non compaiono nuovi NETDEV WATCHDOG, la scheda è stabilizzata.

Conclusione

Il problema dei timeout su Realtek r8169 è noto e può essere risolto disattivando ASPM e le offload. Questi interventi migliorano la stabilità di rete, soprattutto in ambienti server e cluster Proxmox.

Guida Passo per Passo: Aggiornamento da Proxmox VE 8 a 9

Introduzione

Proxmox VE 9.x presenta nuove funzionalità importanti. Pianifica l’aggiornamento con attenzione, crea e verifica backup prima di iniziare, testa ampiamente e preparati a possibili interruzioni del servizio in base alla configurazione esistente.

Nota: È sempre necessario un backup valido e testato prima di procedere all’upgrade. Testa il backup in un ambiente di prova.
Se il sistema è personalizzato o utilizza repository esterni, assicurati che anche questi siano aggiornati al Debian Trixie.

Opzioni per l’aggiornamento

  1. Nuova installazione su hardware nuovo (ripristino delle VM da backup)
  2. Aggiornamento in-place tramite apt (passo per passo)

Passi per l’aggiornamento in-place

Prerequisiti

  • Aggiorna a Proxmox VE 8.4 su tutti i nodi.
  • Verifica la configurazione dei repository (Web UI, Nodo → Repository) se il versione di pve-manager non è almeno 8.4.1.
  • Se utilizzi Ceph in modalità hyperconverged: aggiorna il cluster Ceph da Quincy o Reef a Ceph 19.2 Squid prima di procedere all’upgrade a Proxmox VE 9.0 (vedi le guide dedicate).
  • Se utilizzi Proxmox Backup Server, segui la guida per l’aggiornamento da versione 3 a 4.
  • Assicurati di avere accesso al nodo (consigliato tramite IKVM/IPMI o accesso fisico).
  • Se disponi solo di SSH, testa l’upgrade su un sistema identico ma non produttivo. Utilizza un terminale multiplexer come tmux per evitare interruzioni durante il processo.
  • Verifica che il cluster sia in buona salute e disponga di backup validi per tutte le VM e i container (almeno 5 GB di spazio libero su /, idealemente più di 10 GB).
  • Controlla i problemi noti all’upgrade.

Passaggi dettagliati

1. Utilizza lo script pve8to9 per verificare le condizioni
Esegui:

pve8to9 --full

Verifica che il sistema non presenti errori critici e ripeti l’esecuzione dopo ogni correzione.

2. Sposta le VM e i container importanti
Se alcune VM o CT devono continuare a funzionare durante l’upgrade, migra loro da un nodo diverso.

  • Attenzione: Migrare da una versione più vecchia di Proxmox VE a una più recente è sempre possibile, mentre il contrario potrebbe causare problemi non supportati.

3. Aggiorna i repository APT

  • Verifica che il sistema utilizzi le ultime versioni di Proxmox VE 8.4:
apt update && apt dist-upgrade && pveversion

Assicurati che la versione sia almeno 8.4.1.

  • Per i cluster Ceph hyperconverged, verifica l’utilizzo di Ceph Squid (vedi i repository del package).

4. Aggiorna i repository Debian a Trixie
Modifica /etc/apt/sources.list e /etc/apt/sources.list.d/pve-enterprise.list:

sed -i 's/bookworm/trixie/g' /etc/apt/sources.list
sed -i 's/bookworm/trixie/g' /etc/apt/sources.list.d/pve-enterprise.list

Rimuovi eventuali repository specifici per Bookworm e verifica che i nuovi repository siano corretti.

5. Aggiungi il repository Proxmox VE 9

  • Per l’enterprise repository:
cat > /etc/apt/sources.list.d/pve-enterprise.sources << EOF
Types: deb
URIs: https://enterprise.proxmox.com/debian/pve
Suites: trixie
Components: pve-enterprise
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
EOF
  • Per il repository senza sottoscrizione:
cat > /etc/apt/sources.list.d/proxmox.sources << EOF
Types: deb
URIs: http://download.proxmox.com/debian/pve
Suites: trixie
Components: pve-no-subscription
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
EOF

Aggiungere dopo il riavvio il nuovo Debian.sources

Decommentare o eliminare in apt sources.list

Types: deb deb-src
URIs: http://deb.debian.org/debian/
Suites: trixie trixie-updates
Components: main non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg

Types: deb deb-src
URIs: http://security.debian.org/debian-security/
Suites: trixie-security
Components: main non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg

Verifica con apt update e apt policy.

6. Aggiorna il repository Ceph

  • Per i cluster Ceph, sostituisci eventuali repository di ceph.com con quelli di proxmox.com.
  • Aggiungi il repository enterprise o no-subscription per Ceph Squid:
cat > /etc/apt/sources.list.d/ceph.sources << EOF
Types: deb
URIs: https://enterprise.proxmox.com/debian/ceph-squid
Suites: trixie
Components: enterprise
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
EOF

Verifica con apt update e rimuovi i repository vecchi.

7. Aggiorna l’indice dei pacchetti

apt update

Assicurati che non siano segnalati errori.

8. Esegui l’upgrade a Debian Trixie e Proxmox VE 9.0

  • Inizia con:
apt dist-upgrade

Durante il processo, rispondi alle richieste di modifiche ai file di configurazione e riavvio dei servizi. Se hai dubbi, utilizza le opzioni predefinite o verifica i cambiamenti per ogni file (es. /etc/issue, /etc/lvm/lvm.conf).

9. Controlla il risultato e riavvia con il nuovo kernel
Se l’upgrade ha successo:

  • Verifica lo script pve8to9.
  • Riavvia il sistema per utilizzare il kernel aggiornato.

Dopo l’aggiornamento a Proxmox VE 9

  • Ripulisci la cache del browser e forza il reload della UI Web (CTRL+SHIFT+R o ⌘+Alt+R su macOS).
  • Per i cluster: verificare che tutti i nodi siano aggiornati. Se no, ripeti l’upgrade su un altro nodo.
  • Deprecato: Le regole HA sono sostituite da HA rules. Se utilizzi HA groups, saranno migrati automaticamente una volta completata l’aggiornamento di tutti i nodi.
  • Opzionale: modernizza i repository APT con apt modernize-sources.

Problemi noti e troubleshooting

  • Pacchetto proxmox-ve troppo vecchio: Verifica che i repository siano configurati correttamente per Proxmox VE 8.x, esegui apt update && apt dist-upgrade.
  • Autoactivation su LVM/LVM-thin storage: Disattiva l’autoactivation per le VM con il comando /usr/share/pve-manager/migrations/pve-lvm-disable-autoactivation.
  • Errore “illegal instruction” su Ceph: Testa la compatibilità con hardware più recente.
  • Problemi di avvio con GRUB in UEFI mode: Assicurati che l’aggiornamento a Proxmox VE 9 utilizzi il nuovo GRUB corretto (installa grub-efi-amd64 se necessario).
  • Errore cgroup V1: Le VM con systemd <230 non saranno supportate. Migra su versioni più recenti del sistema operativo container.

🖥️ ESP32 + OLED

🖥️ ESP32 + OLED: Notifiche visive intelligenti con ESPHome

🔎 Descrizione del progetto

Questo progetto trasforma un microcontrollore ESP32 in un pannello di notifica visiva, utilizzando un display OLED SSD1306 da 128×64 pixel. È pensato per integrarsi con Home Assistant e mostrare messaggi testuali dinamici, come avvisi di sicurezza, stato degli elettrodomestici, promemoria o notifiche personalizzate.

Il cuore del sistema è un’entità input_text in Home Assistant: ogni volta che viene aggiornata, il messaggio appare sul display OLED. Il messaggio rimane visibile finché non ne arriva uno nuovo. Non c’è più alcun timeout automatico: il display mostra sempre l’ultimo messaggio ricevuto.

È una soluzione elegante, modulare e facilmente estendibile per chi vuole aggiungere un feedback visivo alle automazioni domestiche.

🔌 Collegamenti hardware

ComponentePin ESP32Pin periferica
Display OLED SSD1306GPIO 21SDA
Display OLED SSD1306GPIO 22SCL
Alimentazione3.3V / GNDVCC / GND

Il display comunica via I²C, usando i pin GPIO 21 (SDA) e GPIO 22 (SCL). L’indirizzo I²C del display è 0x3C (standard per SSD1306). Non sono richieste resistenze di pull-up esterne: ESPHome le gestisce automaticamente.

📄 Spiegazione riga per riga del file YAML

⚙️ Configurazione generale

esphome:
  name: esphome-web-33da74
  friendly_name: Esp32 LCD
  min_version: 2025.5.0
  name_add_mac_suffix: false
  • name: nome tecnico del dispositivo
  • friendly_name: nome leggibile in Home Assistant
  • min_version: versione minima di ESPHome richiesta
  • name_add_mac_suffix: se false, evita di aggiungere il MAC al nome

🧠 Specifiche hardware

esp32:
  board: esp32dev
  framework:
    type: arduino
  • board: modello della scheda ESP32
  • framework: usa il linguaggio Arduino per la compilazione

🛠️ Servizi di base

logger:
api:
ota:
  - platform: esphome
  • logger: abilita il log seriale per il debug
  • api: consente la comunicazione diretta con Home Assistant
  • ota: permette aggiornamenti firmware via Wi-Fi

📶 Connessione Wi-Fi

wifi:
  networks:
    - ssid: "TechLab_Guest"
      password: "connect1234"
    - ssid: "HomeSecure_5G"
      password: "safezone9876"

Il dispositivo proverà a connettersi alla prima rete disponibile tra quelle elencate.

🔌 Bus I²C per il display

i2c:
  sda: 21
  scl: 22
  scan: true
  • sda e scl: pin di comunicazione I²C
  • scan: true: rileva automaticamente i dispositivi collegati

🔤 Font per il display

font:
  - file: "gfonts://Roboto"
    id: my_font
    size: 12
  • file: scarica il font Roboto da Google Fonts
  • id: nome interno del font
  • size: altezza dei caratteri in pixel

🧾 Sensore testuale da Home Assistant

text_sensor:
  - platform: homeassistant
    name: "Messaggio OLED"
    entity_id: input_text.lcd_message
    id: lcd_text
  • Importa l’entità input_text.lcd_message da Home Assistant
  • Ogni volta che il valore cambia, il display si aggiorna
  • Non c’è più alcun timeout: il messaggio resta finché non ne arriva uno nuovo

🖥️ Display OLED SSD1306

display:
  - platform: ssd1306_i2c
    model: "SSD1306 128x64"
    address: 0x3C
    lambda: |-
      if (!id(lcd_text).state.empty()) {
        std::string msg = id(lcd_text).state;
        int line = 0;
        const int max_chars = 20;

        while (msg.length() > 0 && line < 4) {
          std::string segment = msg.substr(0, max_chars);
          msg = msg.length() > max_chars ? msg.substr(max_chars) : "";
          it.printf(0, line * 16, id(my_font), "%s", segment.c_str());
          line++;
        }
      }
  • platform: tipo di display usato
  • model: risoluzione del display
  • address: indirizzo I²C del display
  • lambda: codice inline in C++ che:
    • Verifica se il messaggio è vuoto
    • Divide il testo in righe da 20 caratteri
    • Le stampa verticalmente con spaziatura di 16 pixel
    • Mostra massimo 4 righe (limite del display)

✅ Conclusione

Questo progetto è una soluzione compatta e potente per creare un pannello di notifica visiva con ESP32 e OLED. È perfettamente integrato con Home Assistant, facile da modificare e ideale per chi vuole un feedback immediato e visivo delle proprie automazioni.

Il comportamento è ora più naturale: il messaggio resta visibile finché non viene aggiornato. Nessun timeout, nessuna cancellazione automatica. Il display è sempre sincronizzato con l’ultimo stato dell’automazione.

Aggiungo …

Ecco una spiegazione semplificata del codice fornito:


Funzionamento generale

Il codice gestisce la visualizzazione di un testo su uno schermo LCD (es. 20 caratteri x 4 righe) in ESPHome.


Passaggi principali

  1. Controllo inputif (!id(lcd_text).state.empty())
    • Verifica che il contenuto da visualizzare non sia vuoto (es. “Ciao mondo!” invece di “”).
  2. Inizializzazione variabilistd::string msg = id(lcd_text).state; int line = 0; const int max_chars = 20;
    • msg: memorizza il testo da visualizzare.
    • line: indica la riga corrente (da 0 a 3).
    • max_chars: numero massimo di caratteri per riga (es. 20).
  3. Loop per suddivisione del testowhile (msg.length() > 0 && line < 4)
    • Continua finché ci sono caratteri da visualizzare e non si superano le 4 righe.
  4. Suddivisione in segmentistd::string segment = msg.substr(0, max_chars); msg = msg.length() > max_chars ? msg.substr(max_chars) : "";
    • Estrae i primi max_chars caratteri (es. “Ciao mondo!” → “Ciao mondo” in prima riga).
    • Rimuove il segmento già visualizzato dal testo originale.
  5. Visualizzazione su schermoit.printf(0, line * 16, id(my_font), "%s", segment.c_str());
    • it: riferimento all’oggetto LCD.
    • printf(...): stampa il testo in posizione (0, line*16) (spaziatura tra righe).
    • id(my_font): font utilizzato per la visualizzazione.
  6. Avanzamento rigaline++;
    • Passa alla riga successiva per il prossimo segmento.

Esempio concreto

Se msg = "Questo è un testo lungo", il codice:

  1. Stampa “Questo è un t” (20 caratteri) sulla riga 0.
  2. Stampa “esto lungo” (rimanenti) sulla riga 1.

Perché funziona?

  • Gestisce testi lunghi suddividendoli in segmenti compatibili con le dimensioni dell’LCD.
  • Evita errori di sovraccarico o troncamento non previsto del messaggio.

🚀 Upgrade Proxmox Backup Server 3 → 4: Guida Tecnica Completa

L’upgrade da Proxmox Backup Server (PBS) 3 a PBS 4 comporta anche la migrazione da Debian Bookworm a Trixie. In questa guida vedremo come eseguire l’upgrade in modo sicuro, ordinato e conforme alle best practice APT moderne.

🧰 Requisiti iniziali

Assicurati che il tuo sistema PBS sia aggiornato alla versione 3.4.2-1 o superiore:

bash

proxmox-backup-manager versions

Aggiorna PBS 3 all’ultima versione disponibile:

bash

apt update && apt dist-upgrade

Esegui un backup della configurazione:

bash

tar czf "pbs3-etc-backup-$(date -I).tar.gz" -C "/etc" "proxmox-backup"

Verifica lo spazio libero (consigliati almeno 10 GB):

bash

df -h /

🔍 Verifica compatibilità con PBS 4

Utilizza lo strumento ufficiale per controllare la compatibilità:

bash

pbs3to4 --full

Correggi eventuali problemi segnalati e rilancia il comando finché non ottieni un output pulito.

🛑 (Facoltativo) Abilita modalità manutenzione

Per evitare modifiche ai dati durante l’upgrade, puoi impostare i datastore in modalità sola lettura:

bash

proxmox-backup-manager datastore update DATASTORE-ID --maintenance-mode read-only

🧭 Aggiorna i repository APT

1. Passa da Bookworm a Trixie

bash

sed -i 's/bookworm/trixie/g' /etc/apt/sources.list

Controlla anche i file in /etc/apt/sources.list.d/ e aggiorna se necessario.

2. Aggiungi repository PBS 4 (deb822)

Enterprise

bash

cat > /etc/apt/sources.list.d/pbs-enterprise.sources << 'EOF'
Types: deb
URIs: https://enterprise.proxmox.com/debian/pbs
Suites: trixie
Components: pbs-enterprise
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
EOF

No-subscription

bash

cat > /etc/apt/sources.list.d/proxmox.sources << 'EOF'
Types: deb
URIs: http://download.proxmox.com/debian/pbs
Suites: trixie
Components: pbs-no-subscription
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
EOF

🧱 Integra il repository Debian in formato deb822

Per conformità con Debian Trixie, crea il file debian.sources:

bash

cat > /etc/apt/sources.list.d/debian.sources << 'EOF'
Types: deb
URIs: http://deb.debian.org/debian/
Suites: trixie trixie-updates
Components: main contrib non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg

Types: deb
URIs: http://security.debian.org/debian-security/
Suites: trixie-security
Components: main contrib non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
EOF

Svuota il vecchio sources.list:

bash

truncate -s 0 /etc/apt/sources.list

Oppure rimuovilo del tutto:

bash

rm /etc/apt/sources.list

Verifica la configurazione:

bash

apt update && apt policy

⬆️ Esegui l’upgrade a PBS 4

bash

apt update && apt dist-upgrade

Durante l’upgrade:

  • Premi q per uscire da apt-listchanges
  • Mantieni le versioni locali per /etc/issue e /etc/default/grub
  • Per /etc/ssh/sshd_config, accetta la versione del maintainer se non hai modifiche personalizzate

🔁 Riavvia il sistema

bash

systemctl reboot

✅ Verifiche post-upgrade

Controlla che i servizi PBS siano attivi:

bash

systemctl status proxmox-backup-proxy.service
systemctl status proxmox-backup.service

Disabilita la modalità manutenzione:

bash

proxmox-backup-manager datastore update DATASTORE-ID --delete maintenance-mode

(Facoltativo) Modernizza tutti i repository:

bash

apt modernize-sources

🧪 Conclusione

L’upgrade a PBS 4 è un’operazione delicata ma gestibile con metodo. L’integrazione dei repository in formato deb822 garantisce coerenza e compatibilità futura. Se operi in ambienti clusterizzati, considera l’automazione dei controlli EFI, backup e verifica dei repository.

🚀 Come eliminare il pop‑up “Nessuna sottoscrizione” su Proxmox 

🎯 Perché appare quel messaggio?

Dopo aver installato Proxmox in modalità “No Subscription”, la GUI mostra un pop‑up:

“Nessuna sottoscrizione”

Questo avviso blocca l’accesso agli aggiornamenti e al supporto. La soluzione consiste nel modificare il file JavaScript che controlla lo stato della sottoscrizione.

🛠️ Procedura passo‑passo

1. Apri la shell dalla Web‑GUI di Proxmox Esegui: ssh root@<IP-del-tuo-proxmox>

2. Vai alla cartella contenente lo script Esegui: cd /usr/share/javascript/proxmox-widget-toolkit

3. Crea un backup del file originale Esegui: cp proxmoxlib.js proxmoxlib.js.bak

4. Modifica il file con l’editor a tua scelta Esegui: nano proxmoxlib.js oppure vim proxmoxlib.js

5. Trova la riga che verifica lo stato della sottoscrizione Cerca: if (data.status !== 'Active') {

6. Sostituisci l’intero blocco con un “falso” costante Modifica con: if (false) {

7. Salva ed esci dall’editor In nano: Ctrl+O, Enter, Ctrl+X

8. Riavvia il servizio che gestisce la GUI Esegui: systemctl restart pveproxy.service

⚠️ Se stai usando Proxmox Backup Server (PBS) o Mail Gateway, usa uno dei seguenti comandi:

  • PBS → systemctl restart proxmox-backup-proxy.service
  • Mail Gateway → systemctl restart pgmproxy.service

🔁 Cosa succede dopo?

Ogni volta che installi un aggiornamento di Proxmox VE (incluso l’interfaccia GUI), il file JavaScript viene sovrascritto. Dovrai quindi ripetere la procedura sopra descritta dopo ogni upgrade.

Upgrade proxmox 8 to 9

🔧 Passo 1: Sostituzione repository in Trixie

Spegnere o migrare le VM in esecuzione .

Dopo aver eseguito la sostituzione del repo attuale in /etc/apt sources.list con il comando :

sed -i 's/bookworm/trixie/g' /etc/apt/sources.list
  1. Apri il file con un editor (es. nano /etc/apt/sources.list):nano /etc/apt/sources.list
  2. Trova la riga 6 (o quella con pve-no-subscription):
    Esempio di riga esistente:deb http://download.proxmox.com/debian/pve trixie pve-no-subscription
  3. Commenta la riga aggiungendo # all’inizio:# deb http://download.proxmox.com/debian/pve trixie pve-no-subscription
  4. Salva e chiudi il file.

📝 Passo 2: Crea il repository corretto (proxmox.sources)

Contenuto esatto del file:

cat > /etc/apt/sources.list.d/proxmox.sources << EOF
Types: deb
URIs: http://download.proxmox.com/debian/pve
Suites: trixie
Components: pve-no-subscription
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
EOF

✅ Passo 3: Verifica e aggiorna i repository

Esegui questi comandi per confermare la correzione:

apt update && apt policy  # Dovrebbe mostrare "OK" senza warning di duplicati

🔄 Passo 4: Esegui l’upgrade

apt dist-upgrade  # Procedura senza errori (se non compaiono warning)
a fine upgrade eseguire pve8to9

🔍 Passo 5: Riavvia il sistema

🔄 Passo 6 : Creazione Debian.sources

Dopi il riavvio , vuotare il file /etc/apt/sources.list

Creare in /etc/apt/sources.d/debian.sources

Types: deb deb-src
URIs: http://deb.debian.org/debian/
Suites: trixie trixie-updates
Components: main non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg

Types: deb deb-src
URIs: http://security.debian.org/debian-security/
Suites: trixie-security
Components: main non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg

Controllo finale ed eventuali correzioni

Commentare pve-enterprise.xxx files in :

root@pvetest:/etc/apt/sources.list.d# ls -l
total 10
-rw-r--r-- 1 root root 162 Sep 14 07:37 proxmox.sources
-rw-r--r-- 1 root root  71 Sep 14 11:32 pve-enterprise.list.dpkg-dist
-rw-r--r-- 1 root root 165 Sep 14 11:32 pve-enterprise.sources

Per finire dopo aver riavviato tutto con la nuova versione eseguire :

pve8to9 --full
installare eventuali pacchetti come intel-microcode e chrony 
apt autoremove 
pve8to9 --full

Il file sources.list va lasciato vuoto e non commentato .

Codice in bash per controllo finale repo e versioni proxmox :

#!/bin/bash

echo "🔍 Verifica repository APT (deb822)..."
sources_dir="/etc/apt/sources.list.d"
legacy_sources="/etc/apt/sources.list"

# Check for legacy entries
if grep -q '^deb ' "$legacy_sources"; then
    echo "⚠️  Repository legacy trovati in $legacy_sources"
    grep '^deb ' "$legacy_sources"
else
    echo "✅ Nessun repository legacy in $legacy_sources"
fi

# Check for .list files with legacy format
legacy_list=$(grep -r '^deb ' "$sources_dir"/*.list 2>/dev/null)
if [ -n "$legacy_list" ]; then
    echo "⚠️  Repository legacy trovati in file .list:"
    echo "$legacy_list"
else
    echo "✅ Nessun repository legacy nei file .list"
fi

echo ""
echo "📦 Verifica pacchetti aggiornabili..."
upgradable=$(apt list --upgradable 2>/dev/null | grep -v "Listing...")
if [ -n "$upgradable" ]; then
    echo "⚠️  Pacchetti aggiornabili trovati:"
    echo "$upgradable" | head -n 10
    echo "... (totale: $(echo "$upgradable" | wc -l))"
else
    echo "✅ Tutti i pacchetti sono aggiornati"
fi

echo ""
echo "🔐 Verifica chiavi GPG..."
keyring="/usr/share/keyrings/proxmox-archive-keyring.gpg"
if gpg --quiet --dry-run --import "$keyring" >/dev/null 2>&1; then
    echo "✅ Chiave Proxmox valida: $keyring"
else
    echo "⚠️  Chiave Proxmox non valida o mancante"
fi

echo ""
echo "🧠 Versione Proxmox:"
pveversion

echo ""
echo "🧬 Kernel attivo:"
uname -r

echo ""
echo "✅ Audit completato su $(hostname)"