Il popolarissimo single-board computer Raspberry Pi è un vero e proprio punto di riferimento per un ampio numero di progetti e campi applicativi. Quando si utilizza la scheda col simbolo del lampone come router, server multimediale, per abilitare funzionalità IoT, come server NAS, per gestire telecamere, come server VPN e così via, è essenziale assicurarsi che il dispositivo rimanga costantemente acceso, senza evidenziare problemi sul lungo periodo.
L’ingegnere software Chris Dzombak ha messo a fuoco alcuni punti interessanti che chiunque tenga una Raspberry Pi sempre accesa deve assolutamente tenere in debita considerazione.
Raspberry Pi: monitorare lo stato della connessione
Se si utilizza una scheda Raspberry Pi per un lungo periodo di tempo, senza mai spegnere il dispositivo, la connessione di rete potrebbe venire meno per un qualsiasi motivo. Qualcuno potrebbe sorridere al fatto di usare una Raspberry Pi per gestire applicazioni mission critical: in realtà, nel corso della sua lunga storia, Raspberry Pi si è distinta non soltanto per la sua flessibilità e versatilità ma anche per l’affidabilità intrinseca.
Al fine di accertarsi che Raspberry Pi sia sempre operativa, il suggerimento è quello di approntare un meccanismo che invia periodicamente richieste ping alla scheda, notificando l’amministratore quando non dovesse arriva alcuna risposta (significherebbe che la scheda risulta offline, spenta o comunque non raggiungibile).
Ci sono diverse modalità per inviare ping su base periodica. Una delle possibili scelte, tuttavia, è lo strumento di monitoraggio di rete Uptime Kuma, open source e reperibile pubblicamente nel corrispondente repository GitHub.
Attenzione alla connessione WiFi
Se la vostra Raspberry Pi fosse connessa alla rete mediante una connessione WiFi c’è davvero una moltitudine di cose che, improvvisamente, potrebbero cessare di funzionare.
Lo script wifi-check.sh è studiato per controllare periodicamente il funzionamento della WiFi su una Raspberry Pi e riavviare l’interfaccia WiFi o l’intero dispositivo se la connessione non si rivelasse stabile.
La funzione principale di wifi-check.sh
è quella di controllare periodicamente la qualità della connessione WiFi e prendere misure correttive in caso di eventuali problemi.
Il codice, innanzi tutto, disabilita la modalità a basso consumo energetico del chip WiFi; successivamente, lo script controlla se l’intervento avesse risolto il problema. In caso di fallimento, lo script adotta una serie di misure più drastiche.
L’autore suggerisce di porre lo script, ad esempio, nella directory /usr/local/bin/wifi-check.sh
. Per eseguirlo periodicamente, si può impostare l’uso di flock
: in questo modo solo un’istanza dello script è eseguita. Piazzando il codice che segue nel file /etc/cron.d/wifi-check
, si può sfruttare cron per avviare lo script su base periodica:
* * * * * root flock -x -n -E 0 /tmp/wifi-check.lock env PING_TARGET=192.168.1.1 WLAN_IF=wlan0 /usr/local/bin/wifi-check.sh
Nell’esempio, l’IP locale 192.168.1.1 corrisponde all’indirizzo del router. Ovviamente, è necessario disattivare l’attività impostata con cron durante le attività di manutenzione della Raspberry Pi o l’applicazione di aggiornamenti.
Riavvio automatico del sistema
I servizi systemd sono un concetto basilare nell’ambito dei sistemi operativi GNU/Linux. Systemd è un sistema di gestione e inizializzazione che fornisce un framework per il controllo dei processi e dei servizi del sistema durante l’avvio e il funzionamento del sistema operativo.
In caso di arresto del servizio, ad esempio al presentarsi di una qualsivoglia anomalia, i servizi systemd possono essere riavviati automaticamente, impostando l’opzione Restart.
A seconda delle impostazioni di systemd, è ad esempio possibile configurare la Raspberry Pi in modo che provveda a riavviare automaticamente il sistema se il ripristino del servizio dovesse fallire per diverse volte consecutivamente.
Questo codice pubblicato su GitHub da Dzombak permette ad esempio di configurare il riavvio dell’intera Raspberry Pi se il servizio specificato dovesse arrestarsi per diverse volte di fila. Vediamo questa configurazione di systemd più nel dettaglio:
After=network.target
: Specifica che il servizio dovrebbe avviarsi dopo che la rete è completamente operativa. Ciò assicura che il servizio abbia accesso alla rete quando avviato.StartLimitAction=reboot
: Indica cosa fare in caso di ripetuti fallimenti nel tentativo di avviare il servizio. In questo caso, se il servizio non riesce ad avviarsi più di 8 volte entro 120 secondi, il sistema procederà con il riavvio.StartLimitIntervalSec=120
: Specifica l’intervallo di tempo entro cui vengono conteggiati gli avvii falliti (120 secondi).StartLimitBurst=8
: Specifica il numero massimo di tentativi di avvio consentiti durante l’intervallo di tempo specificato (8 tentativi).
La sezione [Service]
, e in particolare la direttiva ExecStart
, specificano il comando che systemd deve eseguire per avviare il servizio. Nell’esempio condiviso da Dzombak, il codice systemd sembra attivare un logger ambientale che registra una serie di valori e li invia a un database.
Utilizzare alimentatore e microSD di qualità
Quando si decide di usare una Raspberry Pi per qualunque finalità lungo finestre temporali piuttosto ampie, l’utilizzo di un alimentatore a bassa potenza o di scarsa qualità può causare l’instabilità del sistema e il suo arresto.
In caso di difficoltà nella scelta dell’alimentatore più consigliato, è bene fare riferimento al dispositivo ufficiale Raspberry Pi. Agendo sul menu a tendina, è possibile ottenere l’alimentatore che Raspberry Pi consiglia per ciascun modello di scheda.
Nel caso delle schede Raspberry Pi 4, la fondazione suggeriva di utilizzare un alimentatore 5V/3A. Con la versione più recente, invece, si è passati al più stringente requisito di un alimentatore 5V/5A, essenziale soprattutto se si prevedesse di collegare dispositivi USB e SSD alla scheda Raspberry Pi 5.
La scheda microSD e le funzionalità di swapping
Inutile dire che la scelta della microSD da inserire nello slot della Raspberry Pi gioca un ruolo fondamentale. Poiché in avvio della Raspberry Pi si verificano molte operazioni di lettura e scrittura, l’utilizzo di una microSD di bassa qualità potrebbe non offrire una durata così lunga.
A ogni riavvio, potrebbe avere senso configurare un controllo del file system: certo, la procedura di boot potrebbe impiegare un po’ di più per arrivare a conclusione ma si ha l’opportunità di rilevare eventuali comportamenti anomali prima che diventino problemi veri e propri.
La capacità della microSD dovrebbe essere inoltre almeno il doppio della capienza complessivamente richiesta dal sistema operativo e dalle applicazioni che si prevedono di eseguire. In quetso modo è di solito possibile contribuire ad aumentare la durata del supporto di memorizzazione.
Dopo un’installazione di Raspberry Pi OS, il sistema operativo alloca automaticamente un certo quantitativo di spazio per le attività di swap sulla scheda SD. Lo swap (che Windows chiamata file di paginazione) è uno spazio di archiviazione temporaneo utilizzato dal sistema quando la memoria RAM è utilizzata al massimo delle sue capacità.
Se il sistema non ha bisogno di fare swapping, è possibile disabilitarlo completamente eseguendo i seguenti comandi:
sudo dphys-swapfile swapoff
sudo dphys-swapfile uninstall
sudo update-rc.d dphys-swapfile remove
Se si fosse certi di non voler riabilitare lo swap in futuro, è possibile rimuovere completamente la funzionalità usando l’istruzione seguente:
sudo apt purge dphys-swapfile -y
Qualora invece il sistema avesse bisogno dello swapping, Dzombak consiglia di utilizzare una chiavetta USB economica per evitare di danneggiare la scheda SD, come spiegato nel documento tecnico Stop using the Raspberry Pi’s SD card for swap.
Disattivare i servizi e i componenti software che non si utilizzano
Da ultimo, conclude Dzombak, potrebbe avere senso disattivare gli aggiornamenti giornalieri. L’applicazione degli update è utile ma sulle Raspberry Pi isolate dalla connessione Internet, la cui affidabilità è prioritaria, può risultare ragionevole evitare modifiche automatiche senza la supervisione dell’utente. I seguenti comandi consentono di disabilitare gli aggiornamenti giornalieri applicati sulla Raspberry Pi:
sudo systemctl mask apt-daily-upgrade
sudo systemctl mask apt-daily
sudo systemctl disable apt-daily-upgrade.timer
sudo systemctl disable apt-daily.timer
Se non si utilizzano modem 2G/3G/4G, è possibile rimuovere il componente software ModemManager. Allo stesso modo, se non si utilizzasse Bluetooth, è possibile disabilitare i relativi servizi e rimuovere il software associato:
sudo apt remove --purge modemmanager
sudo apt autoremove --purge
sudo systemctl disable bluetooth.service
sudo systemctl disable hciuart.service
sudo apt remove --purge bluez
sudo apt autoremove --purge
Il comando successivo, invece, aiuta a identificare e disabilitare altri servizi non necessari:
sudo systemctl --type=service --state=running
L’eventuale disabilitazione dei servizi inutili si concretizza con il comando che segue:
sudo systemctl disable nome-del-servizio.service