Tutorial : Miner des bitcoins à la maison avec un Raspberry Pi.

Cet article décrit comment j’ai mis en oeuvre une plateforme de minage de bitcoins. Concrètement, il s’agit d’un petit ordinateur (un Raspberry Pi) qui participe au réseau bitcoin en réalisant des “calculs” qui permettent de sécuriser les transactions. Bitcoin rétribue le travail de ces machines en distribuant gratuitement de nouveaux bitcoins à celles qui réussissent le challenge.

Attention, la ruée vers l’or est terminée ! Beaucoup de gens ont mis en œuvre d’importantes puissances de calcul et il est désormais très difficile de gagner des bitcoins en faisant du minage.

Étape 0 : comprendre ce qu’est le minage.

Le fonctionnement de Bitcoin repose sur l’utilisation du blockchain qui est un fichier qui regroupe, par blocs, l’ensemble des transactions qui ont eu lieu depuis la création de cette crypto-monnaie. C’est grâce à ce fichier que l’on sait qui possède quoi.

Le blockchain est partagé et géré par les machines participant au réseau Bitcoin. Sa mise à jour est assurée par certaines machines de ce même réseau qui exécutent des calculs afin de générer de nouveaux blocs de transactions valides et infalsifiables qui seront ajoutées au blockchain. C’est ce que l’on appelle le “minage”.

Concrètement, environ toutes les 10 minutes, toutes les machines qui font du minage se lance dans une compétition qui consiste à regrouper toutes les transactions qui ne sont pas encore dans le blockchain et, à partir du contenu de ces transactions, d’essayer de résoudre un problème mathématique. La première machine qui résoudra ce problème et en informera le réseau recevra 25 bitcoins (plus les frais de transaction). Aussitôt, un nouveau challenge sera lancé !

Note : pour en savoir plus sur le fonctionnement de cette crypto-monnaie, je vous invite à lire mon article de présentation du bitcoin.


Étape 1 : le choix du matériel.

La plateforme mise en œuvre n’a pas pour objectif d’être la plus performante possible. J’ai plutôt fait un compromis entre coût, efficacité et aspect ludique.

Voici donc le matériel que j’ai choisi :

  • Un Rapberry Pi qui est un petit ordinateur de la taille d’une carte de crédit. Il ne va pas faire de minage à proprement parlé car son processeur n’est pas assez efficace mais c’est lui qui va piloter les composants qui font le minage.
  • Un mineur ASIC USB qui est un circuit spécialisé dans le type de calcul qu’exige le minage. Par rapport à leur consommation d’énergie, ils sont bien plus efficaces que les processeurs classiques des ordinateurs. Concrètement, ils ressemblent à une clé USB.
  • Les mineurs USB comme celui que j’ai sélectionné ont besoin de beaucoup d’énergie pour fonctionner correctement et les ports USB du Raspberry Pi n’ont pas une alimentation assez puissante pour cela. J’ai donc acheté un hub USB 3.0 10 ports sur lequel je vais brancher les mineurs.
  • Pour finir, j’ai aussi pris un adaptateur USB Wifi qui va permettre au Raspberry Pi de se connecter au réseau Wifi de la maison. La plateforme que nous allons monter dégage pas mal de chaleur et j’ai donc décidé de la mettre dans le garage où il n’y a pas de prise réseau.

Étape 2 : Installation du Raspberry Pi.

Dans cette étape, nous allons brancher notre Raspberry Pi et y installer Linux.

le Raspberry Pi

Après avoir déballé les cartons, nous allons :

  • Mettre la carte SD fournie avec notre Raspberry Pi à l’intérieur de celui-ci. Elle contient l’installateur de distribution Linux NOOBS qui va nous permettre de facilement installer le système d’exploitation de notre choix : Raspbian.
  • Afin de réaliser l’installation, il faut relier le Raspberry : à la télé avec un cable HDMI, à internet avec un cable réseau, à un clavier et une souris en USB.
  • Il ne reste plus qu’à brancher l’alimentation du Raspberry Pi (avec le câble mini USB fourni).

Une fois allumé, vous allez rapidement arriver sur l’écran de sélection de la distribution Linux à installer.

NOOBS : écran de sélection de la distribution à installer

Après avoir sélectionné la langue française et la bonne disposition du clavier tout en bas de l’écran, nous allons cocher la case “Raspbian — A Debian wheezy port, optimised for the Raspberry Pi” puis cliquer sur le bouton “Install”.

Une fois l’installation terminée, vous arriverez sur un écran plutôt austère qui vous invitera à finaliser la configuration de Raspbian.

Raspbian : écran de finalisation de l’installation

Dans le menu qui apparaît, nous allons paramétrer les options suivantes :

  • 2 Change User Password : Pour changer le mot de passe administrateur.
  • 4 Internationalisation options : Pour configurer la langue française par défaut (fr_FR.UTF-8 UTF-8) et choisir la bonne zone horaire (Europe / Paris).

Puis nous allons sélectionner “Finish” et répondre “Yes” à la question “Would you like to reboot ?”.

Une fois redémarré, connectez vous avec avec l’identifiant “pi” et le mot de passe que vous avez choisi (si vous n’en avez pas choisi, le mot de passe par défaut est “raspberry”).

Avant de passer à l’étape suivante, nous allons mettre à jour le système d’exploitation grâce à la commande :

sudo apt-get update && sudo apt-get -y upgrade

Puis, nous allons mettre à jour le firmware du raspberry :

sudo rpi-update

Afin que toutes ces modifications soient bien prises en compte, on redémarre le système :

sudo shutdown -r now

Pour libérer la télé, on va maintenant se connecter à distance, depuis notre ordinateur personnel, sur notre Raspberry Pi à l’aide de SSH (avec le programme ssh sous Linux ou PuTTY sous Windows).

Pour ce faire, la première chose est de connaître l’adresse IP qui a été attribuée à notre Raspberry. C’est assez simple, après le démarrage de celui-ci, un peu avant la ligne qui vous demande d’entrer votre login (“raspberrypi login :”), vous devriez voir un message qui vous indique son adresse : “My IP address is 192.168.1.6".

Maintenant que vous connaissez son adresse IP, depuis votre machine linux, vous pouvez vous connecter en console en faisant :

ssh pi@192.168.1.6

Sous Windows, utilisez simplement PuTTY et entrez les informations de connexion.

Note : si votre ordinateur personnel est sous Linux et que vous avez installé nmap, vous pouvez aussi scanner votre réseau pour retrouver votre raspberry avec la commande

nmap -open 192.168.1.0/24 -p22 | grep raspberry

Étape 3 : Installation et paramétrage du logiciel de minage (BFGMiner).

Nous allons maintenant installer BFGMiner qui est le logiciel qui va réaliser le minage.

La première étape consiste à installer un ensemble d’outils et d’utilitaires pour construire l’application :

sudo apt-get -y install git-core build-essential autoconf automake libtool pkg-config libcurl4-gnutls-dev libjansson-dev uthash-dev libncursesw5-dev libudev-dev libusb-1.0-0-dev libevent-dev libmicrohttpd-dev libc-bin vim screen

Ensuite, nous allons récupérer les sources depuis Internet avec la commande

cd ~/ && git clone https://github.com/Darkwinde/bfgminer.git

Enfin, les commandes suivantes vont nous permettre de construire bfgminer :

cd bfgminer
./autogen.sh
sudo chmod +x ./configure
sudo ./configure CFLAGS=”-O3" --enable-scrypt
sudo make
sudo make install
sudo ldconfig

Étape 4 : Branchement du mineur USB.

Le hub USB a un petit soucis avec notre Raspberry Pi et il va donc falloir éditer le fichier “/boot/cmdline.txt” pour y rajouter “dwc_otg.speed=1". Cela devrait donner un contenu de fichier ressemblant à ceci :

dwc_otg.lpm_enable=0 dwc_otg.speed=1 console=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p6 rootfstype=ext4 elevator=deadline rootwait

Après avoir redémarré notre Raspberry Pi, on va utiliser la commande lsusb pour lister les bus USB et les dispositifs qui y sont connectés :

Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.

On va maintenant brancher notre hub USB et relancer la commande lsusb

raspberry pi branché sur le hub usb
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
Bus 001 Device 007: ID 2109:2812
Bus 001 Device 008: ID 2109:2812
Bus 001 Device 009: ID 2109:2812

Puis nous allons brancher notre mineur USB sur le hub et relancer la commande lsusb

minseur usb branché sur le raspbery pi
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 010: ID 10c4:ea60 Cygnal Integrated Products, Inc. CP210x UART Bridge / myAVR mySmartUSB light
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
Bus 001 Device 004: ID 2109:2812
Bus 001 Device 005: ID 2109:2812
Bus 001 Device 006: ID 2109:2812d

Nous pouvons voir que notre mineur USB a été trouvé :

Bus 001 Device 010: ID 10c4:ea60 Cygnal Integrated Products, Inc. CP210x UART Bridge / myAVR mySmartUSB light

Étape 5 : Paramétrage et lancement du minage.

Comme je l’ai dit en introduction, nous sommes des millions à miner et il n’y a qu’un seul gagnant toutes les dix minutes (environ). Afin de rendre les choses moins hasardeuses, vous pouvez rejoindre un “pool” de minage comme BTCGuild. Ces pools sont des groupes de personnes qui se partagent le travail de minage et, quand un des membres du groupe réussit le challenge, l’ensemble des participants se partagent les bitcoins ainsi remportés en proportion du travail réalisé par chacun.

Nous allons maintenant paramétrer le logiciel de minage (BFGMiner) pour qu’il se lance au démarrage et que l’on puisse facilement accéder à sa console d’administration.

On va donc accéder à la crontab avec la commande :

crontab -e 

et on va y ajouter la ligne suivante

@reboot /usr/bin/screen -dmS bfg /home/pi/bfgminer/bfgminer -o stratum+tcp://eu-stratum.btcguild.com:3333 -u straumat_1 -p 123 -S all —verbose

Redémarrons maintenant notre Raspberry Pi

sudo shutdown -r now

Une fois redémarré, après vous être connecté comme à votre habitude, vous pourrez accéder à l’outil de minage en tapant la commande

screen -r bfg

Voici à quoi ressemble le logiciel :

écran de bfgminer

Pour revenir à la console Linux, il suffira d’appuyer sur “CTRL + A + D”.

Étape 6 : Installation du wifi (optionnel).

Après avoir branché l’adaptateur Wifi, on va vérifier qu’il est bien reconnu grâce à la commande :

lsusb

qui devrait afficher une nouvelle ligne :

Bus 001 Device 008: ID 7392:7811 Edimax Technology Co., Ltd EW-7811Un 802.11n Wireless Adapter [Realtek RTL8188CUS]

Il faut maintenant modifier la configuration réseau en éditant le fichier “/etc/network/interfaces

sudo nano /etc/network/interfaces

et modifier le contenu pour obtenir quelque chose comme ça :

auto lo
iface lo inet loopback
iface eth0 inet dhcp
allow-hotplug wlan0
auto wlan0
iface wlan0 inet dhcp
wpa-ssid “Le nom de votre réseau”
wpa-psk “Votre clé wifi”

Afin d’activer cette nouvelle configuration, tapez simplement :

sudo service networking reload

Vous pouvez vérifier qu’une adresse IP a bien été attribuée pour votre interface Wifi en faisant :

ifconfig

Vous devriez voir une nouvelle ligne similaire à celle-ci :

wlan0 Link encap:Ethernet HWaddr 74:da:38:05:0c:1d 
inet adr:192.168.1.5 Bcast:192.168.1.255 Masque:255.255.255.0

Conclusion.

Comme je le disais en introduction, il est trop tard pour devenir riche en minant des bitcoins. En fait, la rentabilité dépend de plusieurs variables : la puissance dont vous disposez, le prix de l’électricité, le cours du bitcoin, la puissance des autres machines qui participent à la compétition.

Pour être clair, à l’heure où j’écris cet article, le minage n’est pas rentable mais cela pourrait changer dès demain.

Et, pour finir, voici ce que j’ai gagné après 24h de “travail”.

écran BTCGuild
Show your support

Clapping shows how much you appreciated Stéphane Traumat’s story.