
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.
Petit préambule, c’est un tutoriel simple et loin d’être exhaustif. Si vous cherchez quelquechose de plus avancé regardez du côté de la doc de bitcoin-core.
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 -s /bin/bash -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 faut 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 depuis les repo ubuntu et les installer (faites attention vérifiez la source !! Vous allez l’exécuter en tant que root, ça se trouve je vous veux du mal, ou mon compte Github s’est fait piraté, etc, etc…) :
wget https://gist.githubusercontent.com/darosior/a5d93c6245a32f7a8bed2ac4e33a0011/raw/89c49515febbd55ffb60e4add9d08f299862cde4/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
cd /home/bitcoin
Puis on récupère les sources de la dernière version (0.19 au dernier update de cet article) :
git clone -b 0.19 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 pouvez spécifier 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 -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
Petite note suite à un problème (voir les commentaires) : s’il y a un problème avec le service, pensez à bien vérifier les permissions du runtime directory.
Un nid caché
EDIT: Depuis Debian Buster, un seul
apt install tor
suffit !
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.
16 Comments
Alexandre
Bonjour,
Merci beaucoup pour ce tuto.
J’ai clairement un problème pour faire tourner bitcoind en service. Il tourne impeccable quand je le lance avec l’utilisateur bitcoin.
Par contre, quand je lance : systemctl start bitcoind -> je n’ai aucun retour.
Si je fais : systemctl status bitcoind -> j’obtiens :
bitcoind.service – Bitcoin daemon
Loaded: loaded (/etc/systemd/system/bitcoind.service; enabled; vendor preset: enabled)
Active: active (exited) since Tue 2019-04-16 22:35:32 CEST; 2 days ago
CGroup: /system.slice/bitcoind.service
avril 19 12:25:22 debian-aa systemd[1]: [/lib/systemd/system/bitcoind.service:31] Failed to parse boolean value, ignoring: true [Install] WantedBy=multi-user.target
Warning: Journal has been rotated since unit was started. Log output is incomplete or unavailable.
Les erreurs notifiées dans les logs sont corrigées mais ça ne fonctionne pas pour autant.
Pourriez vous me dire comment je peux faire un diagnostic pour résoudre ce problème ?
Antoine
Bonjour Alexandre,
premièrement je ne vous cache pas mon engouement à l’idée que l’on continue à setup des nodes :).
Ensuite pour ton problème,
« `
Il tourne impeccable quand je le lance avec l’utilisateur bitcoin.
« `
Avec quelle commande ?
« `
avril 19 12:25:22 debian-aa systemd[1]: [/lib/systemd/system/bitcoind.service:31] Failed to parse boolean value, ignoring: true [Install]
« `
Oulah c’est bizarre, tu peux me cp ton service (/etc/systemd/system/bitcoind.service) ?
Bastien
Salut à tous, merci du tuto, petite question sur les nodes horizen on a des récompenses. Est ce le cas sur les nodes btc car j aimerais en créer un. Merci et continuez
manu
Bonjour Bastien ! Il y’a bien sur du reward sur le réseau bitcoin 🙂
Rejoins nous sur le discord pour en savoir plus :
https://discord.gg/xTmZcr
Antoine
Pour détailler un peu: un node n’est qu’un wallet. Vérifier la block chain est un reward personnel pour savoir si tu es en possession de tes fonds.
Il n’y a pas de reward économique comme sur les shitcoins.
Alexandre
Quand je le lance manuellement, je me connecte avec l’utilisateur bitcoin et je tape : « bitcoind » (l’ensemble de la config est dans le bitcoin.conf situé dans le répertoire /home/bitcoin/.bitcoin/).
Dans ce cas, je trouve bien le process en tapant « ps aux » et je peux adresser le process avec « bitcoin-cli »
Alexandre
[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
RuntimeDirectory=bitcoind
User=bitcoin
Type=forking
PIDFile=/home/bitcoin/.bitcoin/bitcoind.pid
Restart=on-failure
PrivateTmp=true
ProtectSystem=full
NoNewPrivileges=true
PrivateDevices=true
MemoryDenyWriteExecute=true
[Install]
WantedBy=multi-user.target
Alexandre
Attention, l’erreur ne se produit plus. C’était du à des passage à la ligne manquant.
Antoine
Oui, je me bats avec wordpress mais apparement il ne veut pas aller à la ligne avec [xxxx]….
Tant mieux si ton problème est résolu 😉
Alexandre
Pardon Antoine, Je n’ai pas été clair. Je veux dire que ce qui apparaissait « avril 19 12:25:22 debian-aa systemd[1]: [/lib/systemd/system/bitcoind.service:31] Failed to parse boolean value, ignoring: true [Install] » n’est plus d’actualité.
Par contre, j’ai bien toujours mon problème !
bitcoind.service – Bitcoin daemon
Loaded: loaded (/etc/systemd/system/bitcoind.service; enabled; vendor preset: enabled)
Active: active (exited) since Tue 2019-04-16 22:35:32 CEST; 2 days ago
CGroup: /system.slice/bitcoind.service
Warning: Journal has been rotated since unit was started. Log output is incomplete or unavailable.
J’avoue que je sèche là !
Antoine
Tu peux me donner le bloc concernant bitcoind de `journalctl -xe` ?
Pour tester ton service efficacement lance la commande que tu mets dans `ExecStart` dans ton shell :
« `
/usr/local/bin/bitcoind -daemon -conf=/home/bitcoin/.bitcoin/bitcoin.conf -pid=/home/bitcoin/.bitcoin/bitcoind.pid
« `
Alexandre
Mon ExecStart fonctionne impec via le shell.
Par contre je n’ai rien concernant bitcoind en tapant « journalctl -xe »
On peut peut être se contacter via Telegram ? Cela éviterait de polluer les commentaires sur votre site ? @aaumaitre
Antoine
Viens plutot sur le Discord https://discord.gg/uRkqww4 ou par mail
Cyril
bonsoir c’est quoi le but de monter un noeud a bitcoin ?? on gagne du btc au passage exemple une parti des frais ou autres ?
merci de la réponse.
Antoine Poinsot
Salut Cyril, non c’est de base nécessaire et maintenant l’on peut s’en passer : c’est toutefois la meilleure façon d’utiliser Bitcoin, et la seule pour utiliser les surcouches.
Hannah Flack
Thanks a bunch for sharing this with all folks you really understand what you’re speaking about! Bookmarked. Please also talk over with my web site =). We may have a link change arrangement between us!