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.
- In der VM per ssh einloggen – vagrant ssh
- 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/)
- 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
- Zuerst die Binaries herunterladen mithilfe des Scripts
- 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
- 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:
- Der Chaincode soll IM Chaincode-Container ausgeführt werden und nicht in der VM (host)
- 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
- Der Chaincode soll anschließend instanziiert werden in einem entsprechenden Kanal – im Entwicklungsnetzwerk gibt es den Kanal „myc“, deshalb wird dieser hier verwendet
- 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
