Cet article est rédigé par un invité (@notgrubles, un passionné de Lightning), et a initialement été publié sur son blog.
Sections
- Intro / pré-requis
- Configuration du transfert des paquets
- Mettre en place c-lightning et bitcoin-cli
- Installer Lightning Charge
- Installer nanopos en tant que terminal de paiement
L’USB Armory d’Inverse Path est un dispositif unique dans la catégorie populaire des systèmes sur puce (SoC) comme le Raspberry Pi et le Rock64. Comme d’autres systèmes, la capacité de calcul de l’USB Armory est relativement faible, mais sa forme est compacte et il comporte des composants intéressants. Il ne nécessite ni adaptateur ni prise murale ; un port USB suffit pour l’alimenter. L'Armory communique également par USB avec le périphérique hôte, via une connexion Ethernet émulée. Il utilise un processeur NXP i.MX53 ARM® Cortex ™ -A8 cadencé à 800 MHz, possède également 512 Mo de RAM DDR3 et un emplacement pour carte microSD pour le stockage.
« L’Armory USB a été créée par Inverse Path pour permettre le développement de nombreuses applications de sécurité. La capacité d'émuler n’importe quel périphérique USB, la vitesse du SoC i.MX53, les fonctionnalités liées à la sécurité et l'environnement d'exploitation flexible et entièrement personnalisable, font de l'Armory USB la plateforme idéale pour tout type d'applications liées à la sécurité personnelle. La conception transparente, ouverte et minimale du dispositif facilite l'auditabilité et limite considérablement le potentiel et la portée des attaques de la chaîne logistique. » Source : https://inversepath.com/usbarmory
Une utilisation judicieuse de l’appareil et de ses avantages (sa forme compacte, l'alimentation par USB et l'émulation Ethernet par USB) est d’en faire un portefeuille Lightning portable. Avec cette configuration, les utilisateurs peuvent configurer un périphérique qui exécute c-lightning et stocker leurs clés privées sur une plateforme portable, qu’on peut facilement connecter à un matériel existant, comme un Raspberry Pi exécutant bitcoind. Un autre scénario serait un ordinateur portable sur lequel l’utilisateur a déjà un nœud. Il suffit de brancher l'Armory et l'utilisateur peut ensuite effectuer des transactions sur le réseau Lightning ou lancer des applications Lightning (LApps). On peut également l’utiliser pour ajouter de la puissance à un appareil qui en manque, comme un ordinateur portable ancien ou un Raspberry Pi. Ainsi utilisé, l'Armory est une sorte de co-processeur pour Lightning !
Pré-requis :
- Un Armory USB d’Inverse Path
- Une carte microSD de 4Go ou plus sur laquelle est installé l’image de base officielle Debian
- Un périphérique hôte USB (ordinateur portable, station de travail ou un appareil de type Raspberry Pi)
- bitcoind doit fonctionner sur votre réseau local ou à distance avec un accès RPC
Préparation de l’Armory
Tout ce dont lightningd a besoin pour communiquer à distance avec bitcoind, c’est bitcoin-cli, ce qui réduit de manière significative le temps d’installation sur l’Armory.
Une compilation croisée est possible, mais cela sort du cadre de ce guide. Pour n’installer que bitcoin-cli, le code Bitcoin doit être extrait de son référentiel Github. Mais avant cela, le transfert de paquets doit être activé sur le périphérique hôte (celui sur lequel l'armory est branché).
Networking
Lorsqu'il est connecté et démarré, Armory crée une interface virtuelle qui émule une connexion Ethernet (si vous utilisez l'image de base Debian officielle). Une fois configuré, Armory et son hôte USB peuvent communiquer entre eux comme s'ils se trouvaient sur le même réseau local (techniquement c’est le cas). Il appartient à l’hôte USB d’autoriser ou non le transfert des paquets de l’Armory, ce qui lui permet d’ouvrir des canaux Lightning Network avec d’autres nœuds en-dehors du réseau local. Le transfert de paquets est nécessaire pour installer les outils et les dépendances.
Windows : Vous trouverez ici les instructions permettant d'activer le transfert de paquets (également appelé partage de connexion) pour Windows 7, 8 et 10.
MacOS : les instructions pour MacOS sont disponibles ici.
Linux : Remarque : sur Ubuntu 16.04, le Network Manager n'interfère pas. Cependant, cela pourrait être le cas pour la configuration d’autres distributions. A partir des instructions Linux:
Activer le masquage pour les connexions sortantes:
# iptables -t nat -A POSTROUTING -s 10.0.0.2/32 -o wlan0 -j MASQUERADE
Activer le forward de l’IP:
# echo 1 > /proc/sys/net/ipv4/ip_forward
Branchez l’Armory, vous verrez le voyant blanc clignoter. Cela signifie que Armory est en cours d'exécution. La LED « Heartbeat » clignote plus rapidement lorsque l’Armory est utilisé.
Maintenant, ouvrez une session ssh dans votre Armory avec les identifiants par défaut de l’image de base Debian (l’utilisateur et le mot de passe sont usbarmory)
$ ssh usbarmory@10.0.0.1
Envoyez un ping d’une adresse publique pour voir si Armory est correctement routé :
$ ping 8.8.8.8
En cas de succès, vous recevrez des réponses:
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_seq=1 ttl=60 time=46.3 ms 64 bytes from 8.8.8.8: icmp_seq=2 ttl=60 time=48.0 ms 64 bytes from 8.8.8.8: icmp_seq=3 ttl=60 time=48.1 ms 64 bytes from 8.8.8.8: icmp_seq=4 ttl=60 time=71.5 ms
Super !
Installer C-lightning
$ sudo apt update && sudo apt -y upgrade
Une fois cette opération terminée, redémarrez l’Armory au cas où il y aurait une mise à jour du noyau:
$ sudo reboot
Maintenant, commencez à installer les outils et annexes nécessaires à la compilation de bitcoin-cli et de c-lightning :
$ sudo apt-get install -y \ autoconf automake build-essential git libtool libgmp-dev \ libsqlite3-dev python python3 net-tools libsodium-dev \ pkg-config libssl-dev libevent-dev \ libboost-system-dev libboost-filesystem-dev \ libboost-chrono-dev libboost-program-options-dev \ libboost-test-dev libboost-thread-dev tmux curl
Clonez le Github de c-lightning:
$ git clone https://github.com/ElementsProject/lightning.git
Accédez au référentiel local:
$ cd lightning
Puis lancez l’installation:
$ make
Une fois cette opération terminée, accédez au répertoire de l’utilisateur de l”Armory USB :
$ cd ~/
Téléchargez l’archive de code source Bitcoin Core 0.16.0, SHA256SUMS.asc, et importez la clé gpg du mainteneur principal pour vérifier les hachés. Enfin, décompressez l'archive :
$ wget https://bitcoincore.org/bin/bitcoin-core-0.16.0/bitcoin-0.16.0.tar.gz
$ wget https://bitcoincore.org/bin/bitcoin-core-0.16.0/SHA256SUMS.asc
$ gpg --recv-key 90C8019E36C2E964
$ gpg --verify SHA256SUMS.asc $ sha256sum -c --ignore-missing SHA256SUMS.asc
Cela devrait produire un "OK"
$ tar zxvf bitcoin-0.16.0.tar.gz</code>
Excellent !
Passons maintenant à l'installation de bitcoin-cli.
Installer bitcoin-cli
Accédez au répertoire du code source Bitcoin et démarrez le processus d’installation:
$ cd bitcoin-0.16.0/
$ ./autogen.sh
Lors de l'exécution de autogen.sh, un flot de messages d'avertissement concernant les locales peut se produire. Vous pouvez remédier à cela en paramétrant un locale :
$ sudo dpkg-reconfigure locales
# Sélectionner quelque chose comme en_US.UTF-8 et cliquer sur Ok
Continuez le processus d’installation:
$ CFLAGS="-march=native" ./configure --disable-wallet
-march=native indique à notre compilateur, gcc, qu’il doit détecter automatiquement le processeur d’Armory et activer les optimisations spécifiques à ce processeur. Cela permet d’éviter toute augmentation des performances du processeur ARM, ce qui est important car ce processeur est relativement lent. bitcoind n'est pas en cours d’installation, libdb n'est donc pas nécessaire. Passez --”disable-wallet” pour installer sans wallet support (c-lightning sera le wallet dans cette configuration).
Maintenant, installez bitcoin-cli :
$ make src/bitcoin-cli
Enfin, copiez le nouveau binaire bitcoin-cli vers /usr/local/bin:
$ sudo cp src/bitcoin-cli /usr/local/bin
$ whereis bitcoin-cli
“/usr/local/bin/bitcoin-cli” devrait s’afficher
</code>
Connecter l’Armory à bitcoind via RPC
c-lightning envoie des transactions brutes avec bitcoin-cli à bitcoind pour diverses raisons, telles que l’ouverture, la fermeture forcée ou la fermeture mutuelle des canaux. Puisque c-lightning est exécuté sur l’Armory, il nécessite également bitcoin-cli. Cependant, bitcoin-cli doit pouvoir communiquer avec bitcoind. Il faut donc créer et ajouter quelques éléments dans le bitcoin.conf de l’Armory et de l'hôte de l’USB :
Depuis l'hôte USB ou la machine sur laquelle bitcoind est en cours d'exécution, précisez les éléments suivants dans bitcoin.conf :
rpcuser= your_username
rpcpassword= yourpasswordnotthisone
rpcallowip= l’adresse IP de l’Armory
Enregistrez ces modifications, puis créez le fichier bitcoin.conf d’Armory et ajoutez les éléments suivants :
$ nano ~/.bitcoin/bitcoin.conf
Dans bitcoin.conf :
rpcuser= username from before
rpcpassword= password from before
rpcconnect= USB hosts's IP (10.0.0.2)
Remplacer 10.0.0.2 avec l'adresse IP sur laquelle bitcoind peut-être écouté (par exemple 192.168.0.254).
Essayez d’interroger bitcoind à partir d’Amory
$ bitcoin-cli -getinfo
En cas de succès, une réponse sera renvoyée avec les informations pertinentes (hauteur du bloc, difficulté, etc.). Génial!
Démarrer c-lightning
Maintenant que tout est bien installé, configuré et mis en réseau, c-lightning peut être lancé.
Démarrez une session tmux puis lancez lightningd :
$ tmux
$ ./lightning/lightningd/lightningd --network testnet --log-level debug
$ ./lightning/cli/lightning-cli getinfo
Note : vous pouvez aussi écrire --network bitcoin à la place, si vous n’avez peur de rien.
Dans le cas où lightningd commence à indiquer « Adding block number » et si lightning-cli getinfo renvoie la hauteur actuelle du bloc (entre autres informations), l'Armory est configuré avec succès !
lightning-cli peut maintenant être utilisé pour générer de nouvelles adresses pour le dépôt / retrait de bitcoin et pour ouvrir / fermer les canaux du Lightning Network !
Lightning Charge
Les LApps sont des applications alimentées par Lightning qui utilisent les paiements instantanés fournis par le réseau Lightning. Les LApps récemment publiées incluent celles répertoriées sur le blog de Blockstream.
Pour lancer ces applications, Lightning Charge doit être installé sur l’Armory.
Lightning Charge est un système de traitement de micropaiement écrit en node.js. Il expose les fonctionnalités de c-lightning via son API REST, accessible via les bibliothèques JavaScript et PHP. Source: https://blockstream.com/2018/01/16/lightning-charge/
L’utilisation de Lightning Charge nécessite c-lightning et nodejs. Installez-les maintenant :
$ curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
$ sudo apt-get install -y nodejs
Des erreurs d'autorisations peuvent survenir en raison du package nodejs fourni par nodesource.com. Pour contourner ce problème, procédez comme suit:
$ mkdir ~/.npm-global $ npm config set prefix '~/.npm-global'
Ajoutez ce qui suit à ~/.profile:
$ export PATH=~/.npm-global/bin:$PATH
Et enfin :
$ source ~/.profile
Puis, utilisez simplement npm pour installer Lightning Charge, puis lancez charged :
$ npm install -g lightning-charge
$ charged --api-token</code>
Charged sera alors exécuté par défaut sur le port 9112 !
Installation de nanopos LApp pour transformer votre module Lightning en une solution de micro point de vente
nanopos s’installe facilement avec npm
$ npm install -g nanopos
Editez un fichier items.yaml avec les produits destinés à la vente, sélectionnez une devise avec –currency, puis lancez nanopos:
$ nanopos -t <charge API token> --items-path items.yaml --currency USD
Le titre de la page générée peut être modifié avec --title, une série de thèmes est disponible sur bootswatch.com et on peut les choisir avec -m.
C-lightning, charged, et les nanopos LApp sont à présent tous en cours d'exécution sur l'Armory
Une fois la transaction terminée, il suffit d’éteindre l’Armory, de le débrancher et de le ranger. Pour chaque nouvelle transaction, rebranchez-le, lancez ssh et C-Lightning. On peut aussi le configurer pour utiliser un bitcoind en train de tourner sur un VPS ou un service d'hébergement public similaire afin d'accroître davantage la portabilité (dans ce cas, seul l'Armory est nécessaire ce qui n’est pas le cas avec un poste de travail fixe ou un ordinateur portable ).
L'Armory peut également fonctionner en « mode autonome », ce qui ne nécessite aucun emplacement USB pour la connectivité ou l'alimentation (il est toujours alimenté via USB). Cela permet d'autres cas d'utilisation intéressants avec une batterie portable ou une configuration WiFi !
Merci de m’avoir lu !
-grubles