HyperLedger Setup
HyperLedger wird aktiv entwickelt auf dem GI https://gerrit.hyperledger.org/r/ und ReadOnly Repositories auf dem Hyperledger GitHub. Die ganzen Sourcen und Go-Sourcen müssen auch im $GOPATH/src/github.com/hyperledger
Verzeichniss liegen.
Benötigte Tools
- GoLang wird benötigt, hier in Version 1.9.2 –> Installieren
- Node.js wird in Version 8.9 benötigt, am besten mit
nvm install 8.9.1 ; nvm default 8.9.1
installieren. - Gulp wird global gebraucht, am einfachsten mittels
npm install --global gulp
installieren
Für die HyperLedger-CA ist eine Linux-Foundation ID notwendig: Create a Linux Foundation ID
Vorbereitungen
GoLang ist notwendig, also installieren:
$ cd /opt
$ curl https://storage.googleapis.com/golang/go1.9.2.linux-amd64.tar.gz | tar zxf -
$ export GOROOT=/opt/go
$ export GOPATH=${HOME}/go
$ export PATH=$PATH:~/go/bin
Die $GOROOT
Variable sollte wenn möglich als Systemweite Umgebungsvariable konfiguriert werden, also irgendiwie so was:
$ echo "export GOROOT=/opt/go" > /etc/profile.d/golang.sh
$ echo "export GOPATH=${HOME}/go" >> /etc/profile.d/golang.sh
$ echo "export PATH=$PATH:~/go/bin" >> /etc/profile.d/golang.sh
$ chmod a+x /etc/profile.d/golang.sh
Composer und HyperLedger
Die HyperLedger-Fabric
Die HyperLedger-Fabric bietet eine einfache Möglichkeit, alle Docker-Images und Abhängigkeiten auf einen schlag zu installieren und registrieren. Dies sollte als root
gemacht werden:
$ mkdir -p ~/go/src/github.com/hyperledger
$ cd ~/go/src/github.com/hyperledger
$ git clone https://gerrit.hyperledger.org/r/fabric
$ cd fabric
$ make docker-clean
$ make docker
# Sollte schon mit 'docker' gebildet worden sein
$ make peer orderer configtxgen configtxlator cryptogen proto
Der Einfachheit halber sollten die erstellten Binaries nun noch in ein Path-Verzeichniss verlinkt werden:
$ cd mkdir ~go/bin/
$ cd build/bin/
$ ln -s peer orderer configtxgen configtxlator cryptogen ~go/bin/
Die HyperLedger-CA
HyperLedger bringt eine eigene CA mit, die HyperLedger-Fabric-CA.
Diese kann wie die Fabric installiert werden. Dies sollte als root
gemacht werden:
$ cd ~/go/src/github.com/hyperledger
$ git clone https://gerrit.hyperledger.org/r/fabric-ca
$ cd fabric-ca
$ make docker-clean
$ make docker
# Sollte schon mit 'docker' gebildet worden sein
$ make fabric-ca-client fabric-ca-server
Der Einfachheit halber sollten die erstellten Binaries nun noch in ein Path-Verzeichniss verlinkt werden:
$ cd mkdir ~go/bin/
$ cd bin/
$ ln -s fabric-ca-client fabric-ca-server ~go/bin/
HyperLedger mit Node.js
Um Node als ChainCode-Sprache zu benutzen braucht es neben Node auch noch NPM und Gulp, sowie die HyperLedger-Chaincode-Node Code und die Fabric-Samples.
Die Fabric-Samples und die ChainCode-Node sollten im selben Root-Verzeichniss liegen, dies kann aber als normaler User gemacht werden ausserhalb von $GOROOT
:
$ mkdir ~/hyperledger
$ cd ~/hyperledger
$ git clone https://gerrit.hyperledger.org/r/fabric-samples
$ git clone https://gerrit.hyperledger.org/r/fabric-chaincode-node
Vorbereitungen im fabric-chaincode-node
Verzeichniss:
$ cd ~/hyperledger/fabric-chaincode-node
$ npm install gulp
$ npm install
Jetzt muss noch ein einzelner Node hochgefahren werden um Node als ChainCode zu installieren:
$ gulp channel-init
$ docker ps
CONTAINER ID IMAGE COMMAND ...
xxx hyperledger/fabric-peer:latest "peer node start" ...
xxx hyperledger/fabric-ca:latest "sh -c 'fabric-ca-..." ...
xxx hyperledger/fabric-orderer:latest "orderer" ...
xxx hyperledger/fabric-couchdb:latest "tini -- /docker-e..." ...
xxx hyperledger/fabric-tools:latest "/bin/bash" ...
Die 5 Docker-Container sind am laufen, alles ist gut für den nächsten Schritt…
Im nächsten Schritt werden die ProtoBufs erstellt und gestartet und zwei Umgebungsvariabeln gesetzt welche von den Tests gebraucht werden:
$ gulp protos
$ export CORE_PEER_LOCALMSPID=Org1MSP
$ export CORE_PEER_MSPCONFIGPATH=~/hyperledger/fabric-samples/basic-network/crypto-config/peerOrganizations/org1.example.com/users/Admin\@org1.example.com/msp
Nun kann man sich auch den einen Node verbinden und Node.js als ChainCode installieren und verwenden:
$ cd ~/hyperledger/fabric-chaincode-node
$ CORE_CHAINCODE_ID_NAME="mycc:v0" \
node test/integration/test.js --peer.address grpc://127.0.0.1:7052
Wenn das geklapt hat, dann sollte man eine +Registering with peer grpc://127.0.0.1:7052 as chaincode “mycc:v0”+ sehen, sowie zwei weitere welche +Successfully registered+ und +Successfully established+ aussagen. Diese Peer versteht nun also Node.js als ChainCode.
Um es zu testen kann man über die Binaries aus der Fabric sich auf die Peer verbinden und Kommandos absetzen. Dabei sind die Umgebungsvariabeln von oben notnwendig: CORE_PEER_LOCALMSPID
und CORE_PEER_MSPCONFIGPATH
$ cd ~/go/src/github.com/hyperledger/fabric
$ CORE_LOGGING_PEER=debug \
./build/bin/peer chaincode install -l node -n mycc -v v0 -p ~/hyperledger/fabric-chaincode-node/test/integration
$ CORE_LOGGING_PEER=debug \
./build/bin/peer chaincode instantiate -o localhost:7050 -C mychannel -l node -n mycc -v v0 -c '{"Args":["init"]}' -P 'OR ("DEFAULT.member")'
Damit installiert man den ChainCode +test.js+ (Annahme) aus dem Verzeichniss ~/hyperledger/fabric-chaincode-node/test/integration
und instanziert diesen damit man anschliessend mit der Peer kommunizieren kann.
Das erste Netzwerk mit Node…
Das geht am einfachsten mit den HyperLedger Fabric-Samples welche wir ja schon haben:
$ cd ~/hyperledger/fabric-samples/first-network
$ ./byfn.sh -m generate
$ ./byfn.sh -m up -l node
Anstelle von -l node
kann auch nichts geschrieben werden, dann wird per Default -l golang
verwendet.
Das starten dauert eine ganze Weile, am Ende sollte eine Nachricht wie diese auf der Konsole sein:
...
===================== Query on PEER3 on channel 'mychannel' is successful =====================
===================== All GOOD, BYFN execution completed =====================
_____ _ _ ____
| ____| | \ | | | _ \
| _| | \| | | | | |
| |___ | |\ | | |_| |
|_____| |_| \_| |____/
Um das Netzwerk wieder herunter zu fahren:
$ ./byfn.sh -m down
Bei Problemen
Wenn Docker Version ‘latest’ nicht kennt
Um mit Composer die aktuellste Version von Hyperledger zu verwenden, muss die aktuellste Version mit dem Tag +latest+ versehen werden. Für die aktuellsten Tags und Version kann im Docker Repository nachgeschaut werden. Zum Zeitpunkt des schreibens war das +x86_64-1.0.4+
Dies sollte aber nicht notwendig sein wenn man alles mit der HyperLedger-Fabric macht…
Hier am Beispiel wie man mit den HyperLedger Fabric-Samples ein ersted Demo-Netzwerk aufbauen kann:
$ docker pull hyperledger/fabric-ordered:x86_64-1.0.4
$ docker tag hyperledger/fabric-ordered:x86_64-1.0.4 hyperledger/fabric-ordered:latest
$ docker pull hyperledger/fabric-peer:x86_64-1.0.4
$ docker tag hyperledger/fabric-peer:x86_64-1.0.4 hyperledger/fabric-peer:latest
$ docker pull hyperledger/fabric-tools:x86_64-1.0.4
$ docker tag hyperledger/fabric-tools:x86_64-1.0.4 hyperledger/fabric-tools:latest