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.

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.

Articles Similaires

16 Comments

  • Posted 19 April 2019

    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 ?

    • Posted 19 April 2019

      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) ?

    • Posted 2 January 2020

      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

      • Posted 2 January 2020

        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

        • Posted 9 January 2020

          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.

  • Posted 19 April 2019

    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 »

  • Posted 19 April 2019

    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

  • Posted 19 April 2019

    Alexandre

    Attention, l’erreur ne se produit plus. C’était du à des passage à la ligne manquant.

  • Posted 19 April 2019

    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 😉

  • Posted 19 April 2019

    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à !

  • Posted 19 April 2019

    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
    « `

  • Posted 19 April 2019

    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

  • Posted 19 April 2019

    Antoine

    Viens plutot sur le Discord https://discord.gg/uRkqww4 ou par mail

  • Posted 17 May 2019

    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.

  • Posted 17 May 2019

    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.

  • Posted 7 December 2020

    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!

Laisser une réponse

Répondre à Antoine Annuler la réponse