Guida all'installazione di un full node con Bitcoin Core: Bitcoin Core (Ep. 2)
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.