Setup un node Bitcoin

Setup un node Bitcoin

Suite à l’article concernant la mise en place d’un node Lightning Network (qui fonctionne en utilisant un noeud Bitcoin), l’on m’a dit : « Ah c’est bien Lightning Network, tout ça, c’est bien expliqué mais… Comment mettre en place un noeud Bitcoin du coup ? ». Je me suis donc résolu à en faire un tutoriel afin de permettre à quiconque de pouvoir utiliser Bitcoin et C-lightning, et en plus d’augmenter la résilience du réseau à la censure !

 

Un nid douillet pour accueillir Bitcoin

Commençons par configurer notre environnement, j’utiliserai pour ce tutoriel Debian 9 mais la procédure restant relativement rudimentaire, vous pourrez aisément suivre et adapter pour une autre distribution.

Premièrement, nous allons faire les choses bien et ajouter un user bitcoin sous lequel le daemon (bitcoind) tournera :useradd -r -m -d /home/bitcoin bitcoin
Cette commande ajoute un utilisateur system, qui ne pourra pas se logger (pour passer sous cet user, utiliser su - bitcoin en tant que root), pour en savoir plus sur useradd : man useradd
Les données (la blockchain, la configuration, etc..) seront stockées dans /home/bitcoin/.bitcoin par défaut. Vous pouvez très bien stocker la blockchain sur un disque externe en spécifiant plus tard l’option datadir (dans ce cas pensez à donner les droits en lecture et écriture du dossier de montage à l’utilisateur bitcoin), ou tout simplement en ajoutant un lien symbolique).

On va à présent installer les dépendances nécessaires à la compilation des sources (cf les instructions de build) :
apt install git build-essential libtool autotools-dev automake pkg-config libssl-dev libevent-dev bsdmainutils libboost-system-dev libboost-filesystem-dev libboost-chrono-dev libboost-program-options-dev libboost-test-dev libboost-thread-dev libminiupnpc-dev libzmq3-dev jq
Si vous souhaitez aussi l’interface graphique vous aurez besoin de
libqt5gui5 libqt5core5a libqt5dbus5 qttools5-dev qttools5-dev-tools libprotobuf-dev protobuf-compiler
A présent, il nous Berkeley-DB en version 4.8 (pas supérieure), c’est l’étape la plus compliquée. Si vous êtes sous Ubuntu vous avez de la chance il y a un PPA :

sudo apt-get install software-properties-common
sudo add-apt-repository ppa:bitcoin/bitcoin
sudo apt-get update
sudo apt-get install libdb4.8-dev libdb4.8++-dev

Si vous êtes sous Debian, j’en ai fait un script (qui va fetch les packages et les installer) pour la création de l’INSAcoin :

wget https://raw.githubusercontent.com/Crypto-lyon/INSAcoin/master/scripts/install_libdb4.8.sh && chmod +x install_libdb4.8.sh && ./install_libdb4.8.sh amd64 && rm install_libdb4.8.sh (Si vous avez un OS en 32 bits, remplacez amd64 par i386).

Chauffer le nid

Dans cette partie on va faire un peu chauffer votre processeur en compilant bitcoin-core depuis les sources.
su - bitcoin
bash # Pour etre un peu plus confortable
cd /home/bitcoin

Puis on récupère les sources de la dernière version (0.17 au moment ou j’écris l’article) :
git clone -b 0.17 https://github.com/bitcoin/bitcoin && cd bitcoin
Et c’est parti :
./autogen.sh
./configure --enable-cxx --without-gui # Enlevez evidemment le without-gui si vous voulez le wallet qt5
make -j 4 # Ajustez la valeur de l'option -j a votre nombre cores
su -c 'make install'

Ca risque de prendre un bout de temps (voire deux bouts, en fonction de votre CPU).

Une fois la compilation terminée, vous pouvez lancer bitcoind et vérifier que tout va bien (Tout va bien signifie il vous sort pleins de lignes du style UpdateTip: new best=0000000000000793368a62b6995769ff74c146d0a1d214eaaf6261502be688a7 height=142344 version=0x00000001 log2_work=66.309681 tx=1359484 date='2011-08-24T05:07:03Z' progress=0.003804 cache=130.2MiB(967004txo), ce qu’il veut dire qu’il commence à synchroniser la chaîne).

Un nid structuré

On peut à présent créer un fichier de configuration dans /home/bitcoin/.bitcoin/bitcoin.conf (emplacement de lecture par défaut, sinon spécifiez l’option -conf=/autre/path/vers/la/conf lors du lancement de bitcoind). Les options de configuration sont disponibles ici, je vais laisser le strict minimum, mais je vous invite à fouiller dans cette liste pour trouver des options qui vous intéresseraient.
rpcuser=darosior
rpcpassword=unpasssecure
daemon=1
server=1
# Ici vous spécifiez par exemple un autre datadir

On va à présent créer le service systemd, stocké dans contrib/init (dans ce dossier vous trouverez aussi des scripts pour d’autres gestionnaires que systemd) et l’adapater :

exit # On repasse root pour toucher à systemd
cp /home/bitcoin/bitcoin/contrib/init/bitcoind.service /etc/systemd/system/bitcoind.service
vim /etc/systemd/system/bitcoind.service

Mon fichier est le suivant, il peut y avoir des différences si vous avez changé 2-3 trucs :

[Unit] Description=Bitcoin daemon
After=network.target [Service] ExecStart=/usr/local/bin/bitcoind -daemon -conf=/home/bitcoin/.bitcoin/bitcoin.conf -pid=/home/bitcoin/.bitcoin/bitcoind.pid
# Creates /run/bitcoind owned by bitcoin
RuntimeDirectory=bitcoind
User=bitcoin
Type=forking
PIDFile=/home/bitcoin/.bitcoin/bitcoind.pid
Restart=on-failure

# Hardening measures
####################

# Provide a private /tmp and /var/tmp.
PrivateTmp=true

# Mount /usr, /boot/ and /etc read-only for the process.
ProtectSystem=full

# Disallow the process and all of its children to gain
# new privileges through execve().
NoNewPrivileges=true

# Use a new /dev namespace only populated with API pseudo devices
# such as /dev/null, /dev/zero and /dev/random.
PrivateDevices=true

# Deny the creation of writable and executable memory mappings.
MemoryDenyWriteExecute=true [Install] WantedBy=multi-user.target

Ensuite, plus qu’à :
systemctl daemon-reload et systemctl start bitcoind

Un nid caché

Pour différentes raisons (au hasard, rendre possible l’accès à Bitcoin par une personne dans un pays qui bloque les connexions), vous pouvez vouloir rendre votre noeud accessible par tor.Si tor n’est pas encore installé :

apt install dirmngr

Puis ajoutez les dépôts de tor dans votre sources.list

deb https://deb.torproject.org/torproject.org stretch main
deb-src https://deb.torproject.org/torproject.org stretch main

Et importez les clefs :

gpg --recv A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89
gpg --export A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89 | apt-key add -

Et enfin :

apt update
apt install tor deb.torproject.org-keyring

Ensuite ajoutez l’utilisateur bitcoin au group tor :

usermod -aG debian-tor bitcoin

Puis modifiez /etc/tor/torrc en ajoutant ceci :

ControlPort 9051
CookieAuthentication 1
CookieAuthFileGroupReadable 1

Si vous souhaitez ne vous connectez que par tor, vous pouvez ajouter ceci dans bitcoin.conf :

proxy=127.0.0.1:9050
listen=1
bind=127.0.0.1
onlynet=onion

Il vous suffit maintenant de redémarrer tor puis bitcoin :
systemctl restart tor@default
systemctl restart bitcoind

Voler de ses propres ailes

Vous avez à présent un node Bitcoin « up and running » (ou plutôt surement « syncing » pour l’instant 😉 ), et pour aller plus loin vous pouvez vous référez au wiki, au Github, et à toute autre source d’information. Voici toutefois quelques choses qui pourraient vous aider :

Mettre à jour son node Bitcoin

systemctl stop bitcoind
su - bitcoin
cd /home/bitcoin
rm -r bitcoin/
git clone -b x.x https://github.com/bitcoin/bitcoin && cd bitcoin
./autogen.sh
./configure --enable-cxx --without-gui # Enlevez evidemment le without-gui si vous voulez le wallet qt5
make -j 4 # Ajustez la valeur de l'option -j a votre nombre cores
su -c 'make install'
exit # Repasser root
systemctl restart bitcoind

Parler à bitcoind sans passer par l’utilisateur bitcoin

Vous pouvez aussi faire un script dans /usr/local/bin s’appelant bitcoin-cli et qui exécuterait les commandes passées en paramètre en tant que l’utilisateur bitcoin afin de ne pas avoir à chaque fois à faire su - bitcoin juste pour parler à bitcoind.

Articles Similaires

Laisser une réponse