Guida all'installazione di un full node con Bitcoin Core: Bitcoin Core (Ep. 2)

Crypto 13 ott 2024

Come già spiegato nell'intrudizione dell'episodio 1, (se te lo sei perso vallo a leggere Guida all'installazione di un full node con Bitcoin Core: Operazioni Preliminari (Ep. 1) in questa serie di articoli vediamo come creare e mantenere attivo un full node di Bitcoin. Oggi vedremo come installare, configurare ed avviare il cuore del nostro nodo, ovvero Bitcoin Core.


Accediamo al nostro server con l'utente "giuseppe" e rechiamoci nella directory temporanea (che si svuota ad ogni reboot):

cd /tmp

Impostiamo una variabile d'ambiente con il numero della versione di Bitcoin Core (per verificare l'ultima versione disponibile ci basterà andare nel repository ufficiale GitHub di Bitcoin Core https://github.com/bitcoin/bitcoin/releases/). Nel caso di questo tutorial l'ultima versione è la 27.1, quindi da terminale digitiamo:

VERSION=27.1

Adesso installiamo i file binari con le rispettive firme con i seguenti comandi:

wget https://bitcoincore.org/bin/bitcoin-core-$VERSION/bitcoin-$VERSION-x86_64-linux-gnu.tar.gz

wget https://bitcoincore.org/bin/bitcoin-core-$VERSION/SHA256SUMS

wget https://bitcoincore.org/bin/bitcoin-core-$VERSION/SHA256SUMS.asc
ATTENZIONE: le stringhe sono relative all'archittetura AMD64, nel caso tu stia eseguendo la tua installazione su una macchina ARM (come un Raspberry Pi), modifica il campo sotto arch=<ARCHITECTURE> con arm64.

Verifichiamo che il checksum di riferimento nel file SHA256SUMS, corrisponde al checksum calcolato da noi:

sha256sum --ignore-missing --check SHA256SUMS

La risposta che riceveremo a video sarà la seguente:
"bitcoin-27.1-x86_64-linux-gnu.tar.gz: OK"
A questo punto andiamo a controllare le firme, le versioni di Bitcoin Core sono firmate da più individui, ognuno usando la propria chiave. Per verificare la validità di queste firme, è necessario prima importare le chiavi pubbliche corrispondenti nel database delle chiavi GPG.

curl -s "https://api.github.com/repositories/355107265/contents/builder-keys" | grep download_url | grep -oE "https://[a-zA-Z0-9./-]+" | while read url; do curl -s "$url" | gpg --import; done

Riceveremo a video una serie di stringhe di firme valide come queste:
gpg: directory '/home/giuseppe/.gnupg' created
gpg: keybox '/home/giuseppe/.gnupg/pubring.kbx' created
gpg: key 188CBB2648416AD5: 6 signatures not checked due to missing keys
gpg: /home/giuseppe/.gnupg/trustdb.gpg: trustdb created
gpg: key 188CBB2648416AD5: public key ".0xB10C
[email protected]" imported
gpg: Total number processed: 1
gpg: imported: 1
......

Verifichiamo che il file checksums sia firmato crittograficamente dalle chiavi di firma del rilascio.

gpg --verify SHA256SUMS.asc

Dovrà uscire a video questa risposta:
gpg: Good signature from...
Primary key fingerprint:...

Effettuati i controlli, dobbiamo estrarre i file binari di Bitcoin Core:

tar -xzvf bitcoin-$VERSION-x86_64-linux-gnu.tar.gz

Successivamente, andiamo ad installarli con il seguente comando:

sudo install -m 0755 -o root -g root -t /usr/local/bin bitcoin-$VERSION/bin/bitcoin-cli bitcoin-$VERSION/bin/bitcoind

Verifichiamo che l'installazione sia avvenuta con successo attraverso il comando bitcoind, quindi da terminale digitiamo:

bitcoind --version

Se tutto è stato installato correttamente riceveremo la seguente risposta:

Passiamo adesso alla creazione di un utente ed un gruppo (in questo tutorial verranno chiamati "bitcoin").
L'utente non avrà una password e nessun privilegio a differenza dell'utente "giuseppe" che ha i privilegi di root. L'unico modo che avremo per poter accedere all’ utente "bitcoin" sarà attraverso "giuseppe".

sudo adduser --gecos "" --disabled-password bitcoin

Adesso aggiungiamo l'utente "giuseppe" al gruppo "bitcoin":

sudo adduser giuseppe bitcoin

Consentiamo adesso, l'utente "bitcoin" ad utilizzare la porta di controllo e configurare Tor direttamente aggiungendolo al gruppo debian tor:

sudo adduser bitcoin debian-tor

Creiamo la cartella bitcoin sotto "/data" creata in precedenza, Bitcoin Core utilizza per impostazione predefinita la cartella ".bitcoin" nella directory /home dell'utente.
Per poter creare la cartella bitcoin (assicuriamoci di essere l'utente "giuseppe") digitiamo:

mkdir /data/bitcoin

Assegniamo come proprietario della directory l'utente "bitcoin"

sudo chown bitcoin:bitcoin /data/bitcoin

Adesso effettuiamo il login nell'utente "bitcoin" attraverso il comando:

sudo su - bitcoin

Creiamo un link simbolico ".bitcoin" che punti a quella directory:

ln -s /data/bitcoin /home/bitcoin/.bitcoin

Verifichiamo che sia stato creato correttamente con il comando:

ls -la .bitcoin

Riceveremo questa risposta:
lrwxrwxrwx 1 bitcoin bitcoin 13 Oct 10 12:40 .bitcoin -> /data/bitcoin

Rechiamoci nella directory ".bitcoin" per iniziare a generare le password, che ci serviranno successivamente per il collegamento ai vari wallet.

cd .bitcoin

Scarichamo il programma RPCAuth da github:

wget https://raw.githubusercontent.com/bitcoin/bitcoin/master/share/rpcauth/rpcauth.py

Adesso lanciamo lo script con il comando python3 ed aggiungiamo un nome utente (nel caso di questa guida sarà bitcoin)

 python3 rpcauth.py bitcoin

Riceveremo questa risposta:
String to be appended to bitcoin.conf:
rpcauth=bitcoin:00d....
Your password:
xyzpassword

Copiamo e salviamo l’ output in un file, quindi sul terminale:

nano rpc.pw

Inseriamo all'interno la risposta precedentemente scritta e successivamente salviamo con CTRL + X e confermiamo con Y.
Adesso rendiamo accessibile il file all'utente "bitcoin":

chmod 400 rpc.pw

Ora, creiamo il file di configurazione bitcoind. Creiamo il file bitcoin.conf:

nano /home/bitcoin/.bitcoin/bitcoin.conf
# Bitcoin daemon
server=1
txindex=1

# Aggiunge un commento personalizzato
uacomment=giuxfila node

# Disabilita il wallet integrato
disablewallet=1

# Logs aggiuntivi
debug=tor

# Assegnare il permesso di lettura del file cookie agli utenti del gruppo Bitcoin
startupnotify=chmod g+r /home/bitcoin/.bitcoin/.cookie

# Disabilitiamo debug.log
nodebuglogfile=1

# Evitare di assumere che un blocco e i suoi antenati siano validi,
# e potenzialmente saltare la verifica dello script.
# Lo imposteremo a 0, per verificare tutto.
assumevalid=0

# Abilita tutti i filtri compatti
blockfilterindex=1

# Servire i filtri a blocchi compatti ai peer per BIP 157
peerblockfilters=1

# Mantenere l'indice coinstats usato dalla RPC gettxoutsetinfo
coinstatsindex=1

# Network
listen=1

## P2P bind
bind=127.0.0.1

## Proxify clearnet outbound connections using Tor SOCKS5 proxy
proxy=127.0.0.1:9050

# Connessioni, qui aggiungiamo la linea prima creata e salvata sul file rpc.pw
rpcauth=<replace with your own auth line generated in the previous step>

# Ottimizzazioni iniziali per il download dei blocchi (impostare la dimensione della dbcache in megabyte). 
# (da 4 a 16384, default: 300) in base alla RAM disponibile del dispositivo,
# consigliato: dbcache=1/2 x RAM disponibile, ad esempio: 4GB RAM -> dbcache=2048)
# Ricordarsi di commentare dopo IBD (Initial Block Download)!
dbcache=2048
blocksonly=1

Salviamo il file con CTRL + X e confermiamo con "Y".
Adesso impostiamo le autorizzazioni di lettura solo per l'utente "bitcoin" ed i membri del gruppo "bitcoin".

chmod 640 /home/bitcoin/.bitcoin/bitcoin.conf

Usciamo dall'utente "bitcoin"

exit

Per poter eseguire automaticamente il bitcoin demon in background, procediamo con la creazione di un servizio attraverso systemd.

sudo nano /etc/systemd/system/bitcoind.service

Inseriamo la seguente configurazione:

[Unit]
Description=Bitcoin Core
Requires=network-online.target
After=network-online.target

[Service]
ExecStart=/usr/local/bin/bitcoind -pid=/run/bitcoind/bitcoind.pid \
                                  -conf=/home/bitcoin/.bitcoin/bitcoin.conf \
                                  -datadir=/home/bitcoin/.bitcoin
# Process management
####################
Type=exec
NotifyAccess=all
PIDFile=/run/bitcoind/bitcoind.pid

Restart=on-failure
TimeoutStartSec=infinity
TimeoutStopSec=600

# Directory creation and permissions
####################################
User=bitcoin
Group=bitcoin
RuntimeDirectory=bitcoind
RuntimeDirectoryMode=0710
UMask=0027

# Hardening measures
####################
PrivateTmp=true
ProtectSystem=full
NoNewPrivileges=true
PrivateDevices=true
MemoryDenyWriteExecute=true
SystemCallArchitectures=native

[Install]
WantedBy=multi-user.target

Salviamo il file con CTRL + X e confermiamo con "Y".
Adesso abilitiamo l'avvio automatico (in caso di reboot o shutdown del sistema):

sudo systemctl enable bitcoind.service

Avviamo adesso il servizio, con il comando systemct:

sudo systemctl enable bitcoind.service

Da questo momento il è in esecuzione ed impiegherà qualche giorno prima che sarà completamente sincronizzato. Per controllare lo stato del nodo e della sincronizzazione ci basterà interrogare il servizio con il comando:

journalctl -fu bitcoind

Riceveremo una risposta simile a questa:

New block-relay-only v1 peer connected: version: 70016, blocks=2948133, peer=68
[..]
Synchronizing blockheaders, height: 4000 (~0.56%)
[..]
UpdateTip: new best=000000000f8d29fcf9ac45e443706c6f21a6e9cfa615f94794b726d3ba8bdc88 height=2948135 version=0x20000000 log2_work=75.951200 tx=215155316 date='2024-09-18T16:25:12Z' progress=1.000000 cache=20.9MiB(142005txo)
[..]

Attendiamo qualche minuto affinché il nodo inizi a sincronizzare ed iniziamo ad annotare il nostro indirizzo .onion per eventuali collegamenti esterni.
Accediamo con l'utente "bitcoin"

sudo su - bitcoin

Digitiamo sul terminale il seguente comando:

bitcoin-cli getnetworkinfo | grep address.*onion

Riceveremo l'indirizzo in formato .onion
"address": "indirizzo.onion".

Terminata la Sincronizzazione Iniziale

Una volta terminata la sincronizzazione iniziale di Bitcoin Core, in media 4-5 giorni, possiamo ridurre le dimensioni della cache del database precedentemente aumentate. Rechiamoci (con l'utente "bitcoin") nella cartella principale ".bitcoin" e modifichiamo il file di configurazione bicoin.conf:

nano .bitcoin/bitcoin.conf

Aggiungiamo un commento (ovvero il simbolo del cancelletto #) così come di seguito:

Rendiamo effettive le modifiche riavviando il bitcoin deamon:

sudo systemctl restart bitcoind

Verifichiamo che tutto funzioni con il comando:

journalctl -fu bitcoind

Update di Bitcoin Core

Verifichiamo sempre l'ultima versione presente di Bitcoin Core nella repository ufficiale di Github (https://github.com/bitcoin/bitcoin/releases).
Stoppiamo momentaneamente il servizio bitcoind, dal terminale con l'utente "giuseppe" digitiamo:

sudo systemctl stop bitcoind.service

Adesso, accediamo nella directory temporanea /tmp:

cd /tmp

Impostiamo una nuova variabile d'ambiente con la versione:

VERSION=28.0

Scarichiamo il file binario, checksum e firma:

wget https://bitcoincore.org/bin/bitcoin-core-$VERSION/bitcoin-$VERSION-x86_64-linux-gnu.tar.gz

wget https://bitcoincore.org/bin/bitcoin-core-$VERSION/SHA256SUMS

wget https://bitcoincore.org/bin/bitcoin-core-$VERSION/SHA256SUMS.asc

RICORDA: le stringhe sono relative all'archittetura AMD64!!

Verifichiamo che il checksum di riferimento nel file SHA256SUMS, corrisponde al checksum calcolato da noi:

sha256sum --ignore-missing --check SHA256SUMS

La risposta che riceveremo a video sarà la seguente:
"bitcoin-28.0-x86_64-linux-gnu.tar.gz: OK"
Come già visto in precedenza andiamo a controllare le firme,

curl -s "https://api.github.com/repositories/355107265/contents/builder-keys" | grep download_url | grep -oE "https://[a-zA-Z0-9./-]+" | while read url; do curl -s "$url" | gpg --import; done

Ri verifichiamo che il file checksums sia firmato crittograficamente dalle chiavi di firma del rilascio.

gpg --verify SHA256SUMS.asc

Dovrà uscire a video questa risposta:
gpg: Good signature from...
Primary key fingerprint:...

Effettuati i controlli, dobbiamo estrarre i file binari di Bitcoin Core:

tar -xzvf bitcoin-$VERSION-x86_64-linux-gnu.tar.gz

Successivamente, andiamo ad installarli con il seguente comando:

sudo install -m 0755 -o root -g root -t /usr/local/bin bitcoin-$VERSION/bin/bitcoin-cli bitcoin-$VERSION/bin/bitcoind

Verifichiamo che l'installazione sia avvenuta con successo attraverso il comando bitcoind, quindi da terminale digitiamo:

bitcoind --version

Perfetto, il nostro Bitcoin Core è stato correttamente aggiornato, possiamo avviare nuovamente il servizio:

sudo systemctl start bitcoind.service

Fine Episodio 2


Spero che l'articolo sia stato di tuo gradimento, se vuoi altri contenuti simili non esitare a farmelo sapere sul Gruppo Telegram.
Se ti piacciono i miei contenuti e vuoi supportarmi puoi iscriverti alla Newsletter, effettuare una donazione o acquistare attraverso il mio link referral di Amazon, trovi tutti i link
 qui.
Considera anche l'idea di iscriverti al mio canale delle offerte, lo trovi su
 WhatsApp e su Telegram.

Tag