Hyperledger Fabric v1.0-alpha2での環境構築手順
公式のマニュアル見たり、ネットの記事や本を見ても全く動かないことばっかりのHyperledger Fabricですが、マニュアルのバージョンと、ソフトウェアのバージョンが合わないと、エラーになって全然動かないので、それが起きないようにバージョン固定にしてセットアップ・メモ
v1.0-alpha2は、2017年5月17日位にリリースされた
前提知識
- 基本的なブロックチェーンの用語と意味を知っている (genesis blockなど)
- Hyperledger Fabricの基礎用語と意味を知っている (オーダラー、チャンネルなどの意味と役割)
v1.0-alpha2の公式手順書
https://github.com/hyperledger/fabric/blob/59ec440d3f51aef510b149b8b3b0909ef093c8f4/docs/source/getting_started.rst
上記のマニュアル固定で実施する
作成される環境
- 2つの組織が、それぞれ2つのピアを管理 (=4ピア)
- 一つのオーダラー (ソロorderingサービス)
docker psするとこんな感じ
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ede0870c2393 dev-peer0.org1.example.com-mycc-1.0 "chaincode -peer.a..." 4 hours ago Up 4 hours dev-peer0.org1.example.com-mycc-1.0
14e41648eb86 hyperledger/fabric-peer "peer node start" 4 hours ago Up 4 hours cli
97cda571f1d1 hyperledger/fabric-peer "peer node start -..." 4 hours ago Up 4 hours 0.0.0.0:7051->7051/tcp, 0.0.0.0:7053->7053/tcp peer0.org1.example.com
68989aa76773 hyperledger/fabric-peer "peer node start -..." 4 hours ago Up 4 hours 0.0.0.0:10051->7051/tcp, 0.0.0.0:10053->7053/tcp peer1.org2.example.com
7fbfcc700a63 hyperledger/fabric-peer "peer node start -..." 4 hours ago Up 4 hours 0.0.0.0:9051->7051/tcp, 0.0.0.0:9053->7053/tcp peer0.org2.example.com
3484189fbe37 hyperledger/fabric-orderer "orderer" 4 hours ago Up 4 hours 0.0.0.0:7050->7050/tcp orderer.example.com
4181dc9514e7 hyperledger/fabric-peer "peer node start -..." 4 hours ago Up 4 hours 0.0.0.0:8051->7051/tcp, 0.0.0.0:8053->7053/tcp peer1.org1.example.com
ツール
- cryptogen: x509証明書を作成と鍵の作成
- configtxgen: 必要な設定ファイルを作る (オーダラー・ブートストラップとチャンネル作成)
必須条件
- Docker – v1.12以上
- Docker Compose – v1.8以上
- Docker Toolbox – Windowsユーザのみ
- Go – 1.7以上
- Git Bash – Windowsユーザのみ。ウィンドウズコマンドプロンプトより良い選択肢として
手順
バイナリとDockerイメージをpull
まず、作業用ディレクトリの作成
mkdir fabric-sample
cd fabric-sample
Dockerを立ち上げておく。
以下のコマンドを実行…となっているが、バージョンが同じであるbootstrap.shを使う
curl -sS https://raw.githubusercontent.com/hyperledger/fabric/master/examples/e2e_cli/bootstrap.sh | bash
v1.0-alpha2用のbootstrap.shはこちら
#!/bin/bash
export ARCH=$(echo "$(uname -s|tr '[:upper:]' '[:lower:]'|sed 's/mingw64_nt.*/windows/')-$(uname -m | sed 's/x86_64/amd64/g')" | awk '{print tolower($0)}')
curl https://nexus.hyperledger.org/content/repositories/releases/org/hyperledger/fabric/fabric-binary/${ARCH}-1.0.0-alpha2/fabric-binary-${ARCH}-1.0.0-alpha2.tar.gz | tar xz
cd release/${ARCH}
sh download-dockerimages.sh -c $(uname -m)-1.0.0-alpha2 -f $(uname -m)-1.0.0-alpha2
上記をbootstrap.shとして保存して、chmod755などして実行する。
結果、releaseというディレクトリ以下に設定ファイルなどが配置される。
そして、dockerイメージがダウンロードされる
docker imagesを実行すると以下の様に表示される
jdoe-mbp: johndoe$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hyperledger/fabric-couchdb latest 3d89ac4895f9 3 days ago 1.51 GB
hyperledger/fabric-couchdb x86_64-1.0.0-alpha2 3d89ac4895f9 3 days ago 1.51 GB
hyperledger/fabric-ca latest 86f4e4280690 3 days ago 241 MB
hyperledger/fabric-ca x86_64-1.0.0-alpha2 86f4e4280690 3 days ago 241 MB
hyperledger/fabric-kafka latest b77440c116b3 3 days ago 1.3 GB
hyperledger/fabric-kafka x86_64-1.0.0-alpha2 b77440c116b3 3 days ago 1.3 GB
hyperledger/fabric-zookeeper latest fb8ae6cea9bf 3 days ago 1.31 GB
hyperledger/fabric-zookeeper x86_64-1.0.0-alpha2 fb8ae6cea9bf 3 days ago 1.31 GB
hyperledger/fabric-orderer latest 9a63e8bac1f5 3 days ago 182 MB
hyperledger/fabric-orderer x86_64-1.0.0-alpha2 9a63e8bac1f5 3 days ago 182 MB
hyperledger/fabric-peer latest 23b4aedef57f 3 days ago 185 MB
hyperledger/fabric-peer x86_64-1.0.0-alpha2 23b4aedef57f 3 days ago 185 MB
hyperledger/fabric-javaenv latest a9ca2c90a6bf 3 days ago 1.43 GB
hyperledger/fabric-javaenv x86_64-1.0.0-alpha2 a9ca2c90a6bf 3 days ago 1.43 GB
hyperledger/fabric-ccenv latest c984ae2a1936 3 days ago 1.29 GB
hyperledger/fabric-ccenv x86_64-1.0.0-alpha2 c984ae2a1936 3 days ago 1.29 GB
設定
generateArtifacts.sh により、以下の2つのツールで作成される暗号設定と4つの設定ファイルを作成できる。
channel-artifacts
Crypto Generator
証明書や鍵のジェネレータ
- x509証明書
- crypto-config.yaml: ネットワークトポロジ
- ca-cert: ユニークなルート証明書
- keystore: プライベート鍵
- signcerts: パブリック鍵
- /crypto-config/: 保存先
Configuration Transaction Generator
設定ファイルを作成する
- configtxgenツール: fabric/configtxgen.rst at master · hyperledger/fabric
- 4つの設定ファイルを作る
- orderer bootstrap block
- fabric channel configuration transaction
- 2つのanchor peer transactions
- 設定ファイル: configtx.yaml
- 3つの組織
- オーダラー組織(OrdererOrg)
- ピア組織(Org1とOrg2)
- このファイルが設定するコンソーシアム: SampleConsortium
- 3つの組織
- オーダラージェネシスブロック: TwoOrgsOrdererGenesis
- チャンネル: TwoOrgsChannel
- 各ピア組織用のアンカー・ピア(peer0.org1.example.comとpeer0.org2.example.com)
設定ファイルを手動で作成
- 今回はやらない
設定ファイルを自動で作成
もし手動で作成してしまっていたら
- /crypto-config/ ディレクトリを削除する
- /channel-artifacts/ ディレクトリから4つの設定ファイルを削除する
スクリプトのあるプラットフォームのディレクトリに行く。
./generateArtifacts.sh <チャンネルID>
すると、以下のようなものが表示される
##########################################################
##### Generate certificates using cryptogen tool #########
##########################################################
##########################################################
######### Generating Orderer Genesis block ##############
##########################################################
#################################################################
### Generating channel configuration transaction 'channel.tx' ###
#################################################################
#################################################################
####### Generating anchor peer update for Org0MSP ##########
#################################################################
#################################################################
####### Generating anchor peer update for Org1MSP ##########
#################################################################
ネットワークの開始
始める前に、docker-compose-cli.yamlのscript.shの部分をコメントアウトする。
コメントアウト後は、以下のような形になる。
working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
# command: /bin/bash -c './scripts/script.sh ${CHANNEL_NAME}; sleep $TIMEOUT'
volumes
ネットワークを開始する。<チャンネルID>は、自分の好きな値を入れる。
CHANNEL_NAME=<チャンネルID> TIMEOUT=60 docker-compose -f docker-compose-cli.yaml up -d
タイムアウトは、60秒に設定しています。
環境変数の設定
CLIコマンドをpeer0.org1.example.comに実行するために以下の4つの環境変数を設定する。面倒なので個人的には、シェルスクリプトにしました。
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
CORE_PEER_ADDRESS=peer0.org1.example.com:7051
CORE_PEER_LOCALMSPID="Org1MSP"
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
上記のパスを確認したい場合は、docker-compose-base.yamlを参照
Dockerに入る
以下を実行する
docker exec -it cli bash
以下が表示される
root@0d78bb69300d:/opt/gopath/src/github.com/hyperledger/fabric/peer#
チャンネルの作成と参加
channel.txをオーダラーに渡す
dockerの中で、channel-artifactsディレクトリはマウントされているので、dockerの中で以下を行う
その前にチャンネルIDを以下のように環境変数に設定しておく
CHANNEL_NAME=チャンネルID
チャンネルの作成
peer channel create -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/channel.tx --tls $CORE_PEER_TLS_ENABLED --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/cacerts/ca.example.com-cert.pem
これによって <チャンネルID.block>が返ってくる。これを使ってチャンネルに参加する。
peer channel join -b <チャンネルID.block>
chaincodeのインストールと初期化
インストール
まず、サンプルのGo言語のコードを4つの内の1つのピアノードにインストールする。
peer chaincode install -n mycc -v 1.0 -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02
初期化
チャンネル上のチェーンコードを初期化する
peer chaincode instantiate -o orderer.example.com:7050 --tls $CORE_PEER_TLS_ENABLED --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/cacerts/ca.example.com-cert.pem -C $CHANNEL_NAME -n mycc -v 1.0 -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02 -c '{"Args":["init","a", "100", "b","200"]}' -P "OR ('Org1MSP.member','Org2MSP.member')"
Query #1
peer chaincode query -C $CHANNEL_NAME -n mycc -c '{"Args":["query","a"]}'
Invoke #2
100持っているaからbに10移動する
peer chaincode invoke -o orderer.example.com:7050 --tls $CORE_PEER_TLS_ENABLED --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/cacerts/ca.example.com-cert.pem -C $CHANNEL_NAME -n mycc -c '{"Args":["invoke","a","b","10"]}'
Query #2
peer chaincode query -C $CHANNEL_NAME -n mycc -c '{"Args":["query","a"]}'
結果として90が返ってくる
Query Result: 90
とりあえず、ここまで。
用語
- ブロックチェーン
- Hyperledger Fabric v1.0: ハイパーレッジャー、ハイパーレジャー、ファブリック