Se anche tu, come me, segui Ethereum da un punto di vista "tecnico", più che "speculativo", vorrai sicuramente configurare un nodo Ethereum a casa tua, magari per interrogare la blockchain senza bisogno di servizi esterni oppure per studiare la programmazione della EVM (Ethereum Virtual Machine) con Solidity. Ebbene: in questa guida vedremo proprio come attivare un nodo Ethereum sul PC, partendo da zero. Allo scopo, installeremo e configureremo il client Ethereum Besu su Ubuntu, passo per passo

Trattazione aggiornata a fine 2024

Come attivare nodo Ethereum: guida Besu (installazione configurazione) Linux (Ubuntu) - ethereum spotlight

Il nodo Ethereum che andremo a configurare nel corso di questa guida è costituito da un programma, chiamato Besu, che implementa il protocollo Ethereum e conserva una copia completa della blockchain sul disco locale, sincronizzandola via via con tutti gli altri client che partecipano alla rete Ethereum.

Configurare un nodo Ethereum: cosa serve

Chiunque può partecipare alla rete Ethereum installando il software necessario sul proprio PC e divenendo così un nodo. Basta disporre dei requisiti e configurare il sistema. In particolare, è necessario:

  1. un PC, fisso o portatile
  2. Linux da linea di comando: di seguito riporteremo ogni singolo comando da impartire, ma è comunque indispensabile un minimo di manualità con la linea di comando in ambiente Linux
  3. collegamento a Internet veloce: una tradizionale ADSL "home" è sufficiente, a patto che abbia una larghezza di banda "decorosa" (almeno 10 megabit in download e 2 megabit in upload). Movimenteremo decine e decine di gigabyte, quindi è fondamentale che la linea non preveda limitazioni al volume di traffico

Per conoscere tutti i dettagli, ti invito a consultare la mia guida allo staking di Ethereum: i requisiti di sistema, infatti, sono gli stessi.

Configurare un nodo Ethereum: quale programma scegliere

Il programma necessario per trasformare il PC in un nodo Ethereum è detto "client Ethereum". Ne esistono molteplici, tutti compatibili fra loro.

Nel corso della presente guida, configureremo Besu: un client Ethereum scritto in Java e rivolto principalmente al pubblico aziendale, ma che funziona davvero molto bene anche in ambito "home"

Come attivare nodo Ethereum: guida Besu (installazione configurazione) Linux (Ubuntu)

Besu si differenzia dagli altri client Ethereum per alcune peculiarità, fra le quali spicca una modalità, chiamata "Bonsai", ad altissima efficienza di archiviazione (meno spazio su disco occupato) e l'elevata stabilità.

Configurare un nodo Ethereum: testnet e mainnet

La rete Ethereum "reale", chiamata mainnet, è affiancata da molteplici reti di prova, chiamate testnet. Ogni rete ha le proprie monete (chiamate Ether, con simbolo ETH), con la differenza che solo quelle della mainnet hanno un controvalore economico reale. Le altre reti utilizzano "soldi del Monopoli", senza alcun valore e "spendibili" solo per transazioni di test.

L'altra differenza fondamentale da tenere presente è la dimensione delle rispettive blockchain:

  • la blockchain della mainnet si aggira, a settembre 2024, attorno a 1.2 TB (in rapidissima crescita)
  • le blockchain delle testnet contengono invece pochi gigabyte

Se desideri attivare un nodo Ethereum devi quindi scegliere subito se partecipare alla mainnet oppure ad una testnet. Raccomando vivamente di prendere dimestichezza dapprima con una testnet, non fosse altro per la quantità significativa di spazio su disco occupata dalla blockchain mainnet e, di conseguenza, dei lunghi tempi necessari per scaricare i dati in locale e diventare operativi.

Configurare un nodo Ethereum con Besu, passo 1: Preparare il sistema

Per iniziare è necessario seguire i seguenti passi che ho dettagliato nella guida allo staking di Ethereum:

  1. Installare Ubuntu
  2. Avviare il Terminale
  3. Aggiornamento completo
  4. Accesso SSH (opzionale)
  5. Diventare root

Prima di proseguire, assicurati quindi di essere davanti al Terminale del sistema sul quale installeremo Besu e, lo ripeto!, di avere i privilegi di root

Come attivare nodo Ethereum: guida Besu (installazione configurazione) Linux (Ubuntu)

Configurare un nodo Ethereum con Besu, passo 2: Installare Java

Besu è scritto in Java, e richiede l'omonimo kit di sviluppo (JDK). Fortunatamente, installarlo in Ubuntu è molto semplice. Basta impartire:

apt install openjdk-21-jdk -y

Come attivare nodo Ethereum: guida Besu (installazione configurazione) Linux (Ubuntu)

Ad installazione terminata, verifichiamo che Java sia disponibile impartendo:

java --version

Dovremmo ottenere una risposta simile alla seguente

Come attivare nodo Ethereum: guida Besu (installazione configurazione) Linux (Ubuntu)

Configurare un nodo Ethereum con Besu, passo 3: Installare altri pacchetti

Procediamo installando altri pacchetti di utilità che impiegheremo di seguito:

apt install curl unzip libjemalloc-dev -y

Per i più curiosi: jemalloc è una libreria che ottimizza la gestione della memoria. Se il pacchetto non è stato installato tramite il comando indicato, Besu mostra un messaggio di avviso e consuma molta più RAM di quanto sarebbe indispensabile.

Configurare un nodo Ethereum con Besu, passo 4: Scaricare Besu

Procediamo ora a scaricare Besu. Purtroppo l'URL di download varia ad ogni nuova versione, quindi dobbiamo prelevarlo da questa pagina:

» Vedi: Besu su GitHub

Fai click con il pulsante destro del mouse sul collegamento dal nome simile a besu-24.9.1.zip e scegli Copia collegamento

Come attivare nodo Ethereum: guida Besu (installazione configurazione) Linux (Ubuntu)

Tornati alla linea di comando del PC che trasformeremo in nodo Ethereum, entriamo nella nostra "home":

cd $HOME

Da qui, utilizziamo curl per scaricare il file dall'indirizzo appena copiato. Il comando sarà simile a:

curl -Lo besu.zip https://github.com/.../besu-24.9.1.zip

L'URL deve essere, ovviamente, quello che abbiamo appena copiato da GitHub

Come attivare nodo Ethereum: guida Besu (installazione configurazione) Linux (Ubuntu)

Per maggiori informazioni sull'uso di curl:

» Leggi: Guida a curl e wget, con esempi: come scaricare file da linea di comando (Linux Ubuntu/CentOS, Windows 10, Mac)

Configurare un nodo Ethereum con Besu, passo 5: Estrarre Besu dallo zip

A download terminato, ci ritroveremo con il file besu.zip, che dobbiamo scompattare. Creiamo una cartella temporanea adibita ad ospitare il materiale:

mkdir besu-extract

Procediamo all'estrazione:

unzip -o besu.zip -d besu-extract/

Come attivare nodo Ethereum: guida Besu (installazione configurazione) Linux (Ubuntu)

Per la guida completa all'utilizzo del comando unzip con Linux:

» Leggi: Guida zip unzip con Linux: come zippare (comprimere, creare) e unzippare (estrarre) archivi .zip da linea di comando con Ubuntu e CentOS - errore bash: unzip: command not found

Ora possiamo fare pulizia, eliminando lo zip scaricato un attimo fa:

rm -f besu.zip

Configurare un nodo Ethereum con Besu, passo 6: Spostare la cartella di Besu

Elenchiamo ora tutti i file presenti nella cartella temporanea che abbiamo creato poco fa:

ls -la besu-extract/

Dovrebbe essere presente una sola cartella dal nome simile a besu-24.9.1

Come attivare nodo Ethereum: guida Besu (installazione configurazione) Linux (Ubuntu)

Prendiamo nota di questo nome e utilizziamo per spostare la cartella in una posizione più consona:

mv besu-extract/besu-24.9.1 /usr/local/besu

Ovviamente, dobbiamo utilizzare il nome che abbiamo letto poco fa al posto di besu-24.9.1

Come attivare nodo Ethereum: guida Besu (installazione configurazione) Linux (Ubuntu)

Ultimiamo questa fase eliminando la cartella temporanea:

rm -rf besu-extract

Configurare un nodo Ethereum con Besu, passo 7: Creare l'utente per Besu

Creiamo ora una nuova utenza con privilegi minimi: sarà quella che eseguirà materialmente l'applicazione. Allo scopo, impartiamo i tre comandi seguenti per creare l'utente di nome besu, la cartella /var/lib/besu e concedergli pieno accesso alla stessa:

useradd --no-create-home --shell /bin/false besu

mkdir -p /var/lib/besu

chown -R besu:besu /var/lib/besu

chmod u=rwx,g=rx,o= /var/lib/besu -R

Come attivare nodo Ethereum: guida Besu (installazione configurazione) Linux (Ubuntu)

I comandi indicati poco fa non mostrano alcun messaggio, se tutto va bene.

Se però vogliamo verificarlo puntualmente, assicuriamoci che la cartella sia stata creata e che abbia il proprietario e i permessi attesi impartendo:

ls -la /var/lib/ | grep besu

Per controllare che l'utente esista, invece:

cat /etc/passwd | grep besu

Configurare un nodo Ethereum con Besu, passo 8: Eseguire Besu come servizio

Per eseguire Besu come servizio ad ogni avvio del PC dobbiamo creare un file di configurazione. Il modo più facile per raggiungere l'obbiettivo è di scaricare quello già pronto:

curl -Lo /etc/systemd/system/besu.service https://turbolab.it/scarica/396

Ispezioniamo poi il suo contenuto:

cat /etc/systemd/system/besu.service

Come attivare nodo Ethereum: guida Besu (installazione configurazione) Linux (Ubuntu)

Scarichiamo poi il file testuale con tutti i parametri necessari:

Per la testnet:

curl -Lo /etc/besu.toml https://turbolab.it/scarica/412

Per la mainnet:

curl -Lo /etc/besu.toml https://turbolab.it/scarica/413

Per ispezionare il contenuto del file appena scaricato:

cat /etc/besu.toml

[ nota tecnica: la configurazione qui proposta espone sia il WebSocket (argomento --rpc-ws-enabled=true), sia il tradizionale endpoint HTTP (--rpc-http-enabled=true). Può quindi essere utilizzato anche per lo staking con i vari client dedicati ]

Configurare un nodo Ethereum con Besu, passo 9: Eseguire Besu automaticamente all'avvio

Ora che abbiamo preparato il servizio, facciamo in modo che parta automaticamente all'avvio del computer:

systemctl enable besu

Come attivare nodo Ethereum: guida Besu (installazione configurazione) Linux (Ubuntu)

Per sincerarcene, riavviamo il sistema:

reboot

Terminato il riavvio, assicuriamoci di ri-acquisire i privilegi di root (sudo -s), poi visualizziamo lo stato del servizio:

service besu status

La schermata dovrebbe mostrare il messaggio active (running)

Come attivare nodo Ethereum: guida Besu (installazione configurazione) Linux (Ubuntu)

Battere Q sulla tastiera per uscire.

Nel frattempo, la ventola del PC sarà partita con irruenza: digitiamo top e scopriamo che il responsabile è il processo di nome java, che utilizza la CPU al 100%. Si tratta in realtà proprio di Besu, che sta scaricando la blockchain dagli altri nodi della rete

Come attivare nodo Ethereum: guida Besu (installazione configurazione) Linux (Ubuntu)

È una situazione assolutamente normale mentre il nodo si sincronizza con la rete, e potrebbe durare parecchie ore: non so dire esattamente "quante", perché io ho lasciato il PC a lavorare tutta notte e l'indomani aveva terminato. Questo vale per le testnet: lavorando con la mainnet, invece, saranno necessari parecchi giorni, forse persino una settimana.

Per seguire l'avanzamento di questa fase, battiamo Q sulla tastiera per uscire da top e impartiamo quanto segue:

journalctl -fu besu.service

Come attivare nodo Ethereum: guida Besu (installazione configurazione) Linux (Ubuntu)

Le singole righe riportano un messaggio simile a questo:

EthScheduler-Services-25 (importBlock) | INFO | FastImportBlocksStep | Completed importing chain segment 561601 to 561800, Peers: 1

Fino a quando appaiono nuove righe, va tutto bene: l'operazione sta continuando.

Al termine, premere Ctrl+C sulla tastiera per uscire.

Configurare un nodo Ethereum con Besu, passo 10: Riavviare Besu quando cambia l'indirizzo IP

Questo passo interessa coloro che si collegano ad Internet tramite un indirizzo IP dinamico, cioè la modalità più diffusa. Chi invece disponesse di un indirizzo IP statico può andare oltre

» Leggi: Differenze fra indirizzo IP dinamico e statico (fisso)? Mi serve davvero un IP statico? Quali limitazioni e vantaggi comporta?

Come attivare nodo Ethereum: guida Besu (installazione configurazione) Linux (Ubuntu) - indirizzo ip statico dinamico spotlight

Besu è attualmente interessato da una limitazione: se l'indirizzo IP pubblico cambia mentre il programma è in esecuzione, il client non funziona più in modo ottimale. Per aggirare il problema, ho preparato uno script che controlla periodicamente l'indirizzo IP pubblico e, in caso sia cambiato, riavvia il servizio automaticamente. Per ottenerlo, impartire questo comando:

curl -sL https://turbolab.it/scarica/360 | sudo bash

Ora lanciare lo script:

bash /usr/local/turbolab.it/ethereum-autostaker/script/ip_watch.sh

Come attivare nodo Ethereum: guida Besu (installazione configurazione) Linux (Ubuntu)

Alla prima esecuzione verrà creato automaticamente il file per l'avvio periodico. Da qui in poi, non dovremo più preoccuparci di controllarlo. Se però volessimo dare un'occhiata per verificare il funzionamento, basterà impartire:

tail -n 1000 /var/log/ethereum-autostaker_cron_ip_watch.sh.log

Configurare un nodo Ethereum con Besu, passo 11: Blindare il server con il firewall

Generalmente, ritengo superfluo l'uso del firewall su Linux. Tuttavia, in questa circostanza, faccio un'eccezione. Attiviamo dunque il firewall e apriamo solo le porte strettamente indispensabili.

Chi interagisca con il PC sul quale è in esecuzione Besu via SSH, e non con tastiera, mouse e schermo collegati direttamente, deve innanzitutto lasciar passare il traffico SSH:

ufw allow 22/tcp

Per essere assolutamente chiari: il comando appena segnalato NON è necessario per chi utilizzi la tastiera, il mouse e lo schermo collegati direttamente al PC che esegue Besu.

In ogni caso, invece dobbiamo aprire le porte di Besu:

ufw allow 30303/tcp && ufw allow 30303/udp && ufw --force enable

Visualizziamo la situazione aggiornata con ufw status

Come attivare nodo Ethereum: guida Besu (installazione configurazione) Linux (Ubuntu)

Per maggiori informazioni:

» Leggi: Guida rapida a ufw - Come attivare/configurare il firewall su Ubuntu Desktop/Server da linea di comando: aprire le porte, bloccare le connessioni e gli indirizzi IP

Configurare un nodo Ethereum con Besu, passo 12: Aprire le porte sul router

In questo momento, il nostro nodo non sta funzionando in modo ottimale: dobbiamo infatti "aprire" le relative porte sul router. Più precisamente: dobbiamo svolgere il port forwarding dal router verso il PC che ospita il nodo Ethereum. Allo scopo, seguiamo questa guida:

» Leggi: Come aprire le porte sul router/modem: la guida definitiva al port forwarding (inoltro delle porte)

Le specifiche porte da aprire sono le seguenti:

  • 30303 TCP
  • 30303 UDP

Come attivare nodo Ethereum: guida Besu (installazione configurazione) Linux (Ubuntu)

Dopo aver svolto la configurazione, verifichiamo esplicitamente che sia andata a buon fine tramite Shields Up!. Il link diretto è il seguente:

» Vedi: test porta 30303

Il servizio deve riportare la dicitura OPEN!

Come attivare nodo Ethereum: guida Besu (installazione configurazione) Linux (Ubuntu) - shields up port open

» Leggi anche: Come testare se una porta del router/firewall è aperta? guida al Port scan con Shields Up!

Configurare un nodo Ethereum con Besu, passo 13: Installare un "consensus client"

Arrivati a questo punto, la nostra installazione di Besu è perfettamente funzionante. Ispezionando i log, però, noteremo la presenza di avvisi simili a questo:

Waiting for consensus client, this may be because your consensus client is still syncing

Questo dipende dal fatto che dobbiamo ora affiancare a Besu un secondo programma, chiamato consensus client. Ne esistono molteplici: Lighthouse, Lodestar, Teku, Nimbus, Prysm. In particolare, ho proposto la guida all'installazione di Nimbus nel già ricordato articolo sullo staking di Ethereum.

Addendum: Mantenere aggiornato il sistema

Periodicamente, dovremo aggiornare tutto il sistema. Il comando zzupdate torna sicuramente utile allo scopo, poiché aggiorna il sistema operativo e i pacchetti installati tramite apt.

Besu, invece, deve essere aggiornato manualmente. È importante farlo periodicamente, poiché le nuove versioni includono correzioni di sicurezza, oppure modifiche indispensabili per continuare ad operare in seguito ai frequenti hard fork, ovvero una modifica al protocollo che rende incompatibili i vecchi client.

Per aggiornare Besu dobbiamo innanzitutto arrestare il servizio e cancellare la cartella che ospita l'applicazione:

service besu stop && rm -rf /usr/local/besu

A questo punto, svolgiamo nuovamente i Passi illustrati in precedenza. Nello specifico:

  • Scaricare Besu
  • Estrarre Besu dallo zip
  • Spostare la cartella di Besu

Infine, riavviare il servizio con service besu restart (o, ancora meglio, riavviare del tutto il PC per verificare che Besu continui ad avviarsi automaticamente al boot).

Conclusioni, fonti e riferimenti

In questa guida abbiamo visto come configurare un nodo Ethereum con Besu. La procedura è sicuramente un po' articolata, ma è una buona occasione per tutti noi smanettoni di provare in prima persona come funziona Ethereum, ed è un componente indispensabile per chi si stia avvicinando al mondo della programmazione su blockchain.

Questo articolo è frutto della mia esperienza diretta con la sola testnet, poiché non dispongo di un SSD abbastanza capiente da ospitare tutta la blockchain della mainnet. Ogni feedback da chiunque abbia attivato Besu su mainnet è dunque particolarmente gradito.