dimanche 15 mai 2016

Configuration d'un noeud bitcoin sur raspberry Pi 2 ou raspberry Pi 3

AVANT-PROPOS

Ce tutoriel permet de configurer le client Bitcoin Core v0.12.1 (ou une version ultérieure) sur un Raspberry Pi 2 ou 3. Un wallet Bitcoin peut aussi être utilisé. La Blockchain sera stockée sur un disque dur externe 2,5" relié sur les ports USB. Ceci est le meilleur compromis car le client bitcoin travaille sans arrêt sur le disque. Il faut donc éviter les cartes SD ou Clés USB qui sont limitées dans le nombre d’écritures possibles. Par ailleurs, nous devrons configurer le bitcoin-core pour que son utilisation H24 puisse s’accorder avec la petite mémoire ram du raspberry pi (1Go). On s’intéressera aussi au coût à l'année que représente l'utilisation d'un tel dispositif qui devra fonctionner en permanence.



ÉQUIPEMENTS NÉCESSAIRES POUR L'INSTALLATION :

  • Un Raspberry Pi 2 ou Pi 3 (RaspBerry pi 3 chez Farnell à 38€ TTC)
  • Un boitier de protection pour le raspberry : (Boitier à 7€)
  • Une bonne alimentation 3A chez amazon : (Alimentation 3A 5V pour raspberry à 10€99)
  • Un disque dur externe 2,5" USB de 160Go minimum. Un disque dur externe 3,5" est possible avec une alimentation externe. Pour ma part, j'utilise un disque 2,5" récupéré dans un passeport western digital qui consomme peu (550ma contre 800ma pour les plus courants) :

    Disque dur usb pour le noeud bitcoin sur raspberry pi 

  • Un Câble HDMI
  • Un câble USB avec reprise d'alimentation (pour le disque dur). Cable USB en Y
  • Un écran avec une entrée HDMI
  • Un clavier USB/souris USB
  • Une box reliée à internet
  • Un câble réseau RJ45.
  • Un PC avec un lecteur de carte SD/microSD. Lecteur de carte SD
  • Une carte microSD de 8Go ou plus. Carte microSd 8Go

 

INSTALLATION : 

Avant toutes choses, sur votre PC, formatez votre disque dur USB en système de fichiers NTFS et donnez lui le nom de volume (Label) : "RaspNode" par exemple. En formatant le disque en NTFS, vous pourrez éventuellement récupérer facilement la blockchain pour la copier sur un pc windows par exemple et démarrer rapidement un client bitcoin sur celui-ci.

Récupérez la dernière image (.img) en date pour installer le système ROKOS CORE (plus d'infos sur cette distribution ici : http://rokos.space/ et sur bitcointalk : https://bitcointalk.org/index.php?topic=1312616.0) sur la carte microSD (Version modifiée de l'OS raspbian prévu pour le raspberry). L'avantage est que la dernière version du bitcoin core 0.12.1 est déjà présente sur l'image Rokos. Donc pas de galère pour installer le client bitcoin.

La dernière version de l'image rokos avec le bitcoin core 0.12.1 se trouve ici :

Raspberry OS Rokos pour bitcoin
Récupérez la version indiquée par la flèche

Téléchargez et installez sur votre pc l'utilitaire "Win32DiskImager" qui va permettre d’écrire l'image (.img) sur la carte microSD : https://sourceforge.net/projects/win32diskimager/

Insérez la carte micro sd dans votre lecteur de cartes, lancer Win32DiskImager puis sélectionnez l'image .img téléchargée, le lecteur où se trouve la carte sd et cliquez sur Write :

Win32DiskImager
Le processus d'écriture prend quelques minutes

Insérer la carte microSD dans le raspberry pi, branchez le câble HDMI, câble réseau ainsi que souris et clavier. Ne pas connecter le disque dur externe aux ports USB pour l'instant. Alimentez le raspberry avec le câble d'alimentation.  Attendre le démarrage..
 

CONFIGURATION du RASPBERRY :

Au premier démarrage, le raspberry sera en en mode commande.

Taper : 
pi@rokos~$ sudo raspi-config (Attention, vous êtes en clavier qwerty)


Le menu suivant apparait :

Menu de configuration raspberry pi

- Sélectionnez “1 Expand File System" ce qui permet d'occuper tout le reste de la carte SD.
- Sélectionnez “3 Boot options" et choisir l'option B4 Desktop autologin ce qui permettra de démarrer le raspberry en mode graphique au prochain démarrage.

Quitter le menu en sélectionnant <Finish> avec la touche <TAB> puis <ENTREE> et acceptez le redémarrage du raspberry.
Vous allez redémarrer cette fois en mode graphique, vous devriez obtenir l’écran suivant : 

 ROKOS OS pour noeud bitcoin 

Nous allons maintenant configurer le clavier pour le mettre en AZERTY.

Sélectionnez le menu "Préférences", "Configuration du Raspberry pi" : 

Configuration du raspberry pi

 Puis sélectionnez l'onglet "Localisation" et réglez le clavier français comme ci-dessous (Set Keyboard) :

Configuration du clavier raspberry pi

Régler la localisation (Set Locale) comme ci-dessous :

Configuration de la localisation raspberry pi

Et le fuseau horaire (Set Timezone) :

Configuration du fuseau horaire raspberry pi

   Onglet  "Performance", réglez la mémoire du GPU à 16 Mo :

Configuration memoire GPU raspberry pi


=> Acceptez la demande de redémarrage du raspberry après cette mise à jour de la mémoire GPU.


A partir de maintenant, tout ce qui est en noir&blanc devra être tapé dans une fenêtre terminal que vous pouvez lancer en cliquant sur l’icôneIcone terminal raspberry pidepuis la barre de tache :
Icone terminal raspberry pi

fenetre terminal raspberry pi


Avant de démarrer les configurations proprement dites, il est nécessaire de mettre à jour le firmware et l'OS du raspberry. Mise à jour du firmware du raspberry (environ 2-3mn) :

pi@rokos~$ sudo rpi-update

Mise a jour du firmware raspberry pi

Redémarrer le raspberry :

pi@rokos~$ reboot

Mise à jour de l'OS (environ 30-35 mn) :
pi@rokos~$ sudo apt-get update && sudo apt-get -y upgrade && sudo apt-get -y dist-upgrade

Mise à jour de l'OS raspberry


Redémarrez le raspberry :

pi@rokos~$ reboot


Si tout s'est bien passé, vous devriez obtenir le message suivant :




A ce stade, si vous utilisez un raspberry pi 3, je vous conseille de désactiver le bluetooth et le wi-fi et de n'utiliser que le port ethernet RJ45 pour relier le noeud au réseau. En effet, le wi-fi peut provoquer des pointes d'alimentation jusqu'à 2A ! Ceci peut être préjudiciable pour l'alimentation du disque dur externe et provoquer des erreurs sur les ports USB si votre alimentation n'était pas suffisante. De plus, le noeud sera plus fiable si vous passez par un câble réseau relié à votre box. A vous de voir..

Donc, pour désactiver bluetooth et wi-fi, il faut éditer le fichier ci-dessous :

pi@rokos~$ sudo nano /etc/modprobe.d/raspi-blacklist.conf

Copier le texte ci-dessous, puis collez le dans le fichier :


pi@rokos~$ sudo reboot


POUR CEUX QUI UTILISENT UN RASPBERRY PI 2 : 
Si vous utilisez un raspberry pi 2, il est nécessaire de mettre à jour un paramètre pour augmenter la puissance des ports USB qui fournissent par défaut au maximum 600ma. Ce qui dans la plupart des cas n'est pas suffisant pour alimenter correctement un disque dur externe USB 2,5" sans alimentation externe ou Hub USB externe alimenté. Pour ce faire, éditer le fichier de configuration /boot/config.txt :

pi@rokos~$ sudo nano /boot/config.txt

Ajouter cette ligne dans le fichier  :

max_usb_current=1 

Sauvegardez le fichier avec CTRL-X et quittez l'éditeur..

En ajoutant cette ligne la puissance des 4 ports USB passera de 600ma à 1200ma. Ce qui est parfaitement suffisant pour alimenter un disque dur USB 2,5" qui consomme en général 800ma.


Nous allons maintenant créer un dossier qui sera le point d'entrée pour les data de la blockchain bitcoin sur le disque dur USB. Nous l’appellerons bitcoinData sous le home directory de connexion (/home/pi/bitcoinData/) :

pi@rokos~$ mkdir ~/bitcoinData

Connectez le disque dur externe sur 2 ports USB différents comme ci-dessous avec le câble en Y et attendre quelques secondes. Repartissez les 2 prises USB sur les 2 blocs de 2 ports pour répartir la charge. Une fenêtre s'affiche pour déterminer l'action à effectuer, cliquez sur Annuler.

Cablage disque dur USB sur le raspberry

Pour connaitre le nom du disque qui vient d'être branché, taper :

pi@rokos~$ sudo blkid

Vous allez obtenir plusieurs lignes dont une de ce type :

/dev/sda1: LABEL="<Label de votre disque usb>" UUID="<Un numéro>" TYPE="ntfs"


Identification du disque dur USB du raspberry



Vous devriez identifier le disque avec le label que vous avez mis plus haut en le formatant (RaspNode).
Notez le nom du disque (ici /dev/sda1) et son type qui doit être ntfs (formaté plus haut sur votre pc). Pour indiquer au raspberry de monter automatiquement le disque dur USB au démarrage, nous allons lui dire de le monter dans notre dossier "bitcoinData" créé ci-dessus. Pour ce faire, il faut modifier le fichier fstab :

pi@rokos~$ sudo nano /etc/fstab

Ajoutez cette ligne à la suite des autres : 
/dev/sda1 /home/pi/bitcoinData ntfs uid=pi,gid=pi,umask=0000,sync,auto,nosuid,rw,nouser 0 0




Sauvegardez le fichier avec CTRL-X.

Nous allons aussi devoir définir une adresse ip fixe au raspberry. Pas obligatoire mais fortement recommandé. Ainsi il sera beaucoup plus aisé de pouvoir l'atteindre depuis l’extérieur par exemple avec un logiciel de prise en main à distance comme VNC que l'on va bientôt installer .

Il faut pouvoir déterminer l'adresse ip que vous allez pouvoir utiliser pour votre raspberry.
Pour cela, il faut vous connecter à votre box, perso je dois entrer l'adresse 192.168.1.1 dans un navigateur pour m'y connecter depuis mon pc. Parfois c'est 192.168.0.1. Dans la rubrique "Réseau", puis IP LAN, on peut voir que le serveur DHCP délivre des adresses IP qui vont de 192.168.1.10 à 50. On peut réserver une adresse IP que le serveur DHCP ne pourra pas prendre en ajoutant l'adresse MAC de la carte réseau du raspberry. Pour connaitre l'adresse MAC de la carte réseau de votre raspberry, tapez :


pi@rokos~$ ifconfig

En rouge, nous avons l'adresse MAC de la carte réseau du raspberry :

Adresse mac du raspberry Bitcoin Node

Cette adresse MAC est à ajouter dans les "Infos de location/réservation DHCP" avec l'adresse IP de votre choix (entre 10 et 50 dans mon cas). Faites un ping 192.168.1.x pour vérifier que l'adresse IP choisie n'est pas déjà utilisée (la réponse doit être "unreachable").


La procédure est sensiblement la même sur les autres box des autres FAI.

Dans notre exemple, j'ai choisi l'adresse IP 192.168.1.16. Pour définir cette adresse au raspberry, tapez :

pi@rokos~$ sudo nano /etc/dhcpcd.conf 

puis, à la fin du fichier, ajouter ce qui suit :


Pour les DNS (domain name servers), j'ai mis ceux de google, mais vous pouvez mettre ceux que vous voulez. Vous pouvez mettre ceux de votre FAI (Voir ici : http://www.ariase.com/fr/guides/adresses-dns.html)

Le routeur (static routers) de ma box a l'adresse 192.168.1.1. Chez free, par exemple, cette adresse est 192.168.0.254 par défaut. Chez orange, c'est 192.168.1.1.. Vérifiez ces informations avant de changer l'adresse IP.

Remplacez l'adresse ip et celle de votre box par les vôtres.



CTRL-X pour sauvegarder. Redémarrez votre Raspberry Pi :

pi@rokos~$ reboot 

Après le redémarrage, vérifier que l'adresse ip prévue est bien correcte avec ifconfig :
Verification adresse ip fixe sur le raspberry

PRISE EN MAIN A DISTANCE DU RASPBERRY :

Si vous le souhaitez, vous pouvez installer un serveur pour la prise en main à distance du raspberry. Ainsi, plus besoin de clavier ou souris raccordés au raspberry. Vous pourrez vérifier le bon fonctionnement du noeud depuis votre pc ou votre téléphone portable/tablette.
Tout d'abord, il faudra configurer votre box pour accepter les connexions vers le port utilisé par le serveur VNC sur le raspberry. C'est ce qu'on appelle une redirection de port. Ce port d’écoute est le 5900 par défaut. 
Connectez vous à votre box (pour moi, je tape 192.168.1.1 dans mon navigateur puis mon nom d'utilisateur/mot de passe personnel). Pour une freebox, c'est http://mafreebox.freebox.fr par exemple. Dans la partie "Réseau", puis "Paramètres Avancés" et "Transfert de ports", il faut ajouter le port 5900 qui va être redirigé vers l'adresse IP de notre réseau local du raspberry (pour moi, 192.168.1.16) comme ci-dessous :





Ainsi, lorsque je me connecterai depuis internet via mon pc ou téléphone portable, j'entrerai l'adresse IP publique de ma box ainsi que le port 5900. Ce qui redirigera toutes les données vers l'adresse ip locale 192.168.1.16 et le port 5900 de mon raspberry.

Sur le raspberry :
Installer le serveur vnc X11vnc : 

pi@rokos~$ sudo apt-get install x11vnc
pi@rokos~$ x11vnc -storepasswd

=> Entrez un mot de passe personnel et robuste pour la connexion à distance (8 caractères).

Pour démarrer automatiquement le serveur vnc au démarrage du raspberry :

pi@rokos ~ $ cd .config 
pi@rokos ~/.config $ cd autostart 
pi@rokos ~/.config/autostart $ nano x11vnc.desktop
 

Copier le texte ci-dessous, puis collez le dans le fichier :


Sauvegardez par CTRL-X et redémarrez le raspberry.
pi@rokos~$ reboot

Vérifier que le serveur vnc fonctionne correctement :
pi@rokos~$ ps -ef | grep vnc

Doit retourner une ligne comme indiqué ci-dessous :
Processus VNC sur le raspberry

Maintenant, sur votre PC, Tablette ou Téléphone portable, vous devez installer une application cliente pour vous connecter au raspberry. Sur PC, j'ai choisi le client Vnc Viewer (il en existe d'autres comme ultra vnc, real vnc..) :  

Vous pouvez le télécharger ici : https://www.realvnc.com/download/viewer/
Aucune installation n'est nécessaire, vous récupérez un programme que vous pouvez exécuter directement.
Cela donne ceci lorsque vous le lancez :

Client VNC sur pc

Au niveau de la ligne VNC Server, indiquez votre adresse ip publique puis le port sous la forme :
XX.XX.XX.XX:5900 
(Vous pouvez trouver votre adresse publique en vous connectant sur le site http://www.mon-ip.com/ par exemple).

Une fois connecté, vous obtenez le bureau du raspberry et pouvez naviguer comme si vous étiez connectés directement avec vos clavier/souris :
ROKOS OS raspberry pi

Sur un téléphone portable/tablette android, télécharger aussi le client vnc viewer et le configurer avec votre adresse ip publique :
Pour Iphone IOS : 
 

CONFIGURATION DU CLIENT BITCOIN :

Pour que le client bitcoin démarre correctement et ne se plante pas sur le long terme en prenant toute la mémoire disponible de notre raspberry, nous devons configurer un fichier de paramètres qui s'appelle "bitcoin.conf" :

pi@rokos ~ $ cd .bitcoin
pi@rokos ~/.bitcoin $ nano bitcoin.conf

Copier le texte ci-dessous, puis collez le dans le fichier :

Pour plus d'explications sur les paramètres utilisés et utilisables, voir ici : https://en.bitcoin.it/wiki/Running_Bitcoin


Modifiez le mot de passe en face de "rpcpassword" et mettez un mot de passe à votre convenance (le plus long possible et compliqué).

Sauvegardez le fichier avec CTRL-X.

Avant de lancer le client bitcoin, nous allons configurer la box pour que le client puisse accepter les connections entrantes sur le port par défaut : 8333. Ainsi vous pourrez partager la blockchain avec d'autres.

Connectez vous à votre box (pour moi, je tape 192.168.1.1 dans mon navigateur puis mon nom d'utilisateur/mot de passe personnel). Dans la partie "Réseau", puis "Paramètres Avancés" et "Transfert de ports", il faut ajouter le port 8333 qui va être redirigé vers l'adresse IP de notre réseau local du raspberry (pour moi, 192.168.1.16) comme ci-dessous :


Une fois la box configurée, vous pouvez lancer le client bitcoin sur votre raspberry :

Lancement du client bitcoin sur OS ROKOS

Vous pouvez créer un raccourci sur le bureau en faisant un clic droit sur "Bitcoin Core Client" puis "Ajouter au bureau".

Le client bitcoin démarre et la led du disque dur externe doit s'agiter.


Le client commence alors à se synchroniser avec le réseau et récupère la blockchain. Ce qui peut prendre une bonne dizaine de jours pour être complétement synchronisé avec le réseau (oui oui c'est long !) :
Client Bitcoin Core

Sinon, il y a une solution plus rapide, c'est de télécharger la blockchain avec un lien torrent. Sur bitcointalk, il y a une page qui parle de ça : https://bitcointalk.org
/index.php?topic=1310261.msg14391871#msg14391871
La dernière blockchain date de d'avril 2016. Il suffit alors de décompresser l'archive à la racine du disque dur USB et vous gagnez 7 ans de recup..


Je vous conseille d'ouvrir une fenêtre terminal et de lancer une petite commande pour vérifier dans le log que tout se passe bien :

pi@rokos~$ cd ~/bitcoinData
pi@rokos~$ tail -f debug.log

Ce qui donne :
debug.log bitcoin
la blockchain bitcoin en cours de récupération

Dans le menu "Aide" du client bitcoin, cliquez sur "Fenêtre de débogage", pour afficher l'état des connexions en cours :

Fenetre de debogage bitcoin

Si tout est correctement configuré, bientôt, vous verrez arriver des connexions en entrée, ce qui montrera que vous partagez la blockchain avec les autres nœuds connectés.

Pour vérifier que votre noeud bitcoin est bien reconnu sur le réseau, rendez-vous sur https://bitnodes.21.co/

Entrez votre adresse ip publique et cliquez sur "Check Node". Si votre noeud est opérationnel, il doit apparaitre en vert :

Noeud bitcoin sur le site https://bitnodes.21.co

En cliquant sur  le lien de votre noeud, vous pourrez obtenir des informations sur la disponibilité de celui-ci :



 Après plusieurs jours de fonctionnement non-stop, la mémoire utilisée du raspberry plafonne à 753M :

 

CONSOMMATION DU DISPOSITIF :

Comme on peut le voir sur la photo, l'ensemble du dispositif consomme environ 5,6W.
Sur une journée complète, nous arrivons à 5.6W*24~=135W consommé.
Sur une année complète, cela monte à 135*365=49275W, soit 49,3 Kw consommés.
Au prix du kilowatt en France en 2016 :

- Tarif TTC sans heures creuses : 0.1503€/Kw. Soit 49,3*0.1503=7€40 pour une année
- Tarif TTC avec heures creuses : 0.1474€/kw. Soit 49,3*0.1474=7€27 pour une année

Tout cela reste négligeable : environ 0,60€ / mois pour faire tourner un noeud bitcoin chez soi.. Alors, lancez vous !..
 
Consommation du Noeud bitcoin raspberry disque dur USB




6 commentaires:

  1. Bonjour je viens de tester avec la dernière version et j'ai un compte utiliseur pi avec un mdp que je connais pas .
    Comment faire pour trouver le mdp car avec le compte sans mdp la connection wifi ne marche pas ?
    Merci avance pour votre aide

    RépondreSupprimer
    Réponses
    1. Normalement le mdp par defaut de pi est : raspberry
      Avec ce compte vous pouvez tout faire.

      Supprimer
  2. Jai reusie a trouver le mdp maintenant le soucis c est que bitcoin core me plante de temps en temps et obligé de reprendre a zéro la blockchaine comment faire pour éviter sa ?

    RépondreSupprimer
    Réponses
    1. Depuis la version 0.13, il faut passer à la config sur orange pi pour éviter des plantages. Le raspberry n'a pas assez de mémoire interne pour les nouvelles versions du bictoin core.

      Supprimer
  3. Bonjour, Je voudrais savoir le retour de cette installation? Il y a la possibilité de récupérer des fee de transaction ?
    Merci

    RépondreSupprimer
    Réponses
    1. Pas de fee. Il faut être mineur pour ça. Les nœuds ne font que relayer les transactions et partager la blockchain.

      Supprimer