Hyperledger Fabric – Einstieg für Entwickler Teil 2

Im letzten Beitrag wurde der allgemeine Aufbau der Entwicklungsumgebung als VM besprochen.

Jetzt geht es darum eine Fabric-Netzwerk oder zumindest ein Peer zum Laufen zu bringen. Ein Peer ist die einzige Rolle in Hyperledger Fabric die Code (Chaincode) ausführen kann und somit der benötigte Bestandteil.

  1. In der VM per ssh einloggen – vagrant ssh
  2. Den Peer bauen unter $GOPATH/src/github.com/hyperledger/fabric mit dem unter linux üblichen Befehl: make peer (https://openblockchain.readthedocs.io/en/latest/dev-setup/build/)
  3. Danach peer node start sollte gehen. Ein Fehler den ich am Anfang hatte bezog sich auf fehlende Berechtigungen auf dem /var/hyperledger Ordner. Folgende Kommandos haben das Problem gelöst lt. diesem Stackoverflow-Beitrag von yacovm
sudo mkdir -p /var/hyperledger/production
sudo chown -R $(whoami):$(whoami) /var/hyperledger
  • Optional können auch der Certificate Authority (CA)-Server und der Member Server gebaut werden um die Sicherheitsmechanismen mit ausführen zu können: make membersrvc (das allerdings bei Version 1.2.1 zumindest nicht dabei zu sein scheint)

Docker-Variante aus der VM heraus

  1. Zuerst die Binaries herunterladen mithilfe des Scripts
  2. Falls in der Vagrant-Entwicklungsmaschine der Fehler „could not resolve bit.ly“ auftaucht, einmal prüfen ob das Netzwerk in VirtualBox auf NAT oder auf Bridged geschaltet ist, und nicht nur auf Host-Only Networking
  3. Falls Docker Probleme bereitet (access denied), dann soll folgender Befehl den docker-User die benötigten Berechtigungen erteilen (danke Uli Köhler für die Lösung)
sudo usermod -a -G docker $USER

Sobald Vagrant die Maschine erstellt hat und der SSH-Zugriff funktioniert (vagrant ssh)

Jetzt geht es darum, die Binaries und Samples für die aktuelle Version des Hyperledger Fabric (in meinem Fall die 1.2) herunterzuladen:

sudo curl -sSL http://bit.ly/2ysbOFE | bash -s 1.2.0 1.2.0 0.4.10

Funktioniert hat das Ganze sobald der fabric-samples Ordner erstellt worden ist und die Docker-Images heruntergeladen worden sind. Unter fabric-samples befindet sich nun u.A. der Ordner chaincode-docker-devmode. Innerhalb dieses Ordners ist eine Konfigurationsdatei namens docker-composer-simple.yaml, was ein sehr einfaches Netzwerk erstellt. An dieser Stelle empfiehlt die Entwicklerdokumentation 3 Terminals aufzumachen. Ich habe hier 3 PowerShell-Fenster aufgemacht und in jedem Fenster über vagrant ssh die Verbindung zur virtuellen Maschine aufgebaut. Der Rest kann so wie dort beschrieben ausgeführt werden. Wichtig: bei der Installation des Chaincodes mit CORE_PEER_ADDRESS:peer:7052 ist es empfehlenswert den Namen (das Entwicklernetzwerk hat den Peer einfach „peer“ gennant) zu verwenden und NICHT die IP-Adresse. Ich musste mir lange den Kopf damit zerbrechen bis ich entdeckt hatte, das dies am einfachsten ist. Die Entwicklungsumgebung ist so konfiguriert dass es in einem Docker-Virtuelles Netzwerk läuft welches ein EIGENES DNS-Auflösungssystem hat. 

Zusammenfassend über die Installation kann man sagen, dass:

  1. Der Chaincode soll IM Chaincode-Container ausgeführt werden und nicht in der VM (host)
  2. Der Chaincode soll jedoch in dem CLI-Container „installiert“ werden (Achtung: dieses Container ist nicht für Produktionszwecke gedacht). Hier habe ich dieselbe Version (0) verwendet wie in dem Peer-Container 
  3. Der Chaincode soll anschließend instanziiert werden in einem entsprechenden Kanal – im Entwicklungsnetzwerk gibt es den Kanal „myc“, deshalb wird dieser hier verwendet
  4. Die Container IDs unten können mit dem Kommando docker ps auf Deinem Host herausgefunden werden.
root@[peercontainerid]/opt/gopath/src/chaincode# go build mytest.go
root@[peercontainerid]:/opt/gopath/src/chaincode# CORE_PEER_ADDRESS=peer:7052 CORE_CHAINCODE_ID_NAME=mytest:0 ./chaincode
root@[clicontainerid]:/opt/gopath/src/chaincodedev# peer chaincode install -p chaincodedev/chaincode/ -n mytest-v 0
[...]
[chaincodeCmd] install -> INFO 055 Installed remotely response:<status:200 payload:"OK" >
peer chaincode instantiate -n mytest-v 0 -c '{"Args":["set","a","20"]}' -C myc

Kommentar verfassen