Help us understand the problem. What is going on with this article?

Hyperledger Fabric v1.1.0で遊ぶための環境設定と動作確認方法

注意

2019/02/21現時点では v1.4.0 が最新のため、いろいろ古い。

(2019.02) ぜひこちらの記事群も参考にしてください。
【Hyperledger Fabric 1.2.1を動かして、ブロックチェーンの動作を確認・検証しよう】 https://qiita.com/kyoko7tam/items/6e0eea28ac8340f6897e

概要

Hyperledger Fabric (以下Fabric) のソースコードには動作確認用の e2e_cli (End-to-end CLI) が同梱されている。基本的にはソースをビルド後の動作確認用だが、Dockerイメージを引っ張ってくればビルドしなくても動く。
以下その方法。

Fabric v1.1.0リリース版で実験するための環境設定方法。以下の3ステップを行う。ただサンプルで遊ぶだけならFabricのソースは不要なのでスキップしてよい。Dockerイメージ、platform binaries、fabric-samplesは必要。

  1. Fabric v1.1.0のソースコードをダウンロード
  2. Dockerイメージとplatform binariesのダウンロード
  3. fabric-samplesのダウンロード
  4. 確認のため、basic-networkを動かしてみる
  5. 確認のため、Build Your First Network (BYFN) を試してみる

前提条件

Mac OS X El Capitanで試した。

  • git
  • Docker CE
  • Docker Compose

以下、適当な作業ディレクトリ WORK で行うものとする。

cd $WORK

Fabric v1.1.0のソースコードをダウンロード

Cloneの際、ブランチに release-1.1 を指定するのがポイントである。
注意: タグ v1.1.0 をクローンするのは、いくつかのファイルが古いのでうまくいかない

# --depth=1 を指定すると過去のコミットを取らないので速い
git clone -b release-1.1 --depth=1 https://github.com/hyperledger/fabric.git

Dockerイメージとplatform binariesのダウンロード

# 作業用のディレクトリを別に作っておいたほうがいい 
cd $WORK
mkdir work && cd work

# (ローカルでビルドしない場合) Dockerイメージをpullし、platform binariesをダウンロード
# Fabricのイメージはタグ1.1.0、サードパーティのイメージはタグ0.4.6をpullする
# Pullされたイメージにはdocker tagコマンドによりlatestタグが付くので注意
../fabric/scripts/bootstrap.sh

# Platform binariesにパスを通す
export PATH=$WORK/work/bin:$PATH

Pullされたイメージは以下の通り:

hyperledger/fabric-ca          latest              72617b4fa9b4        2 months ago        299MB
hyperledger/fabric-ca          x86_64-1.1.0        72617b4fa9b4        2 months ago        299MB
hyperledger/fabric-tools       latest              b7bfddf508bc        2 months ago        1.46GB
hyperledger/fabric-tools       x86_64-1.1.0        b7bfddf508bc        2 months ago        1.46GB
hyperledger/fabric-orderer     latest              ce0c810df36a        2 months ago        180MB
hyperledger/fabric-orderer     x86_64-1.1.0        ce0c810df36a        2 months ago        180MB
hyperledger/fabric-peer        latest              b023f9be0771        2 months ago        187MB
hyperledger/fabric-peer        x86_64-1.1.0        b023f9be0771        2 months ago        187MB
hyperledger/fabric-javaenv     latest              82098abb1a17        2 months ago        1.52GB
hyperledger/fabric-javaenv     x86_64-1.1.0        82098abb1a17        2 months ago        1.52GB
hyperledger/fabric-ccenv       latest              c8b4909d8d46        2 months ago        1.39GB
hyperledger/fabric-ccenv       x86_64-1.1.0        c8b4909d8d46        2 months ago        1.39GB
hyperledger/fabric-zookeeper   latest              92cbb952b6f8        2 months ago        1.39GB
hyperledger/fabric-zookeeper   x86_64-0.4.6        92cbb952b6f8        2 months ago        1.39GB
hyperledger/fabric-kafka       latest              554c591b86a8        2 months ago        1.4GB
hyperledger/fabric-kafka       x86_64-0.4.6        554c591b86a8        2 months ago        1.4GB
hyperledger/fabric-couchdb     latest              7e73c828fc5b        2 months ago        1.56GB
hyperledger/fabric-couchdb     x86_64-0.4.6        7e73c828fc5b        2 months ago        1.56GB

また、platform binariesにはpeerコマンド自身も含まれているので、バージョンを表示してみるとこのようになる:

$ peer version
peer:
 Version: 1.1.0
 Go version: go1.9.2
 OS/Arch: darwin/amd64
 Experimental features: false
 Chaincode:
  Base Image Version: 0.4.6
  Base Docker Namespace: hyperledger
  Base Docker Label: org.hyperledger.fabric
  Docker Namespace: hyperledger

2018-05-15 17:11:02.034 JST [main] main -> INFO 001 Exiting.....

たとえばprivate ledger機能を試すには、"Experimental features" がtrueになるように再ビルドする必要がある (たぶん)。

fabric-samplesのダウンロード

cd $WORK
git clone -b release-1.1 --depth=1 https://github.com/hyperledger/fabric-samples.git

確認のため、basic-networkを動かしてみる

cd $WORK
cd fabric-samples/basic-network

# スタート
start.sh

# ストップ。コンテナを止めるだけ
stop.sh

# 停止したコンテナなどを消すなどしたければこちら。`docker rmi`のエラーが出るけど気にしない
# これはこのスクリプトが他のサンプルと共用のため余計なコマンドが入っている
teardown.sh

basic-networkはpeer 1台、CouchDB 1台、orderer 1台、CA 1台を立ち上げるシンプルな設定である。起動されると以下の動作を行う:

  • peer0から唯一のチャネルmychannelpeer channel createコマンドで作成する
  • peer0をそのチャネルにpeer channel joinコマンドで参加させる

特にチェーンコードをデプロイしたり呼び出すということはしていない。

動いているコンテナの確認

$ docker-compose ps
         Name                       Command               State                       Ports                     
----------------------------------------------------------------------------------------------------------------
ca.example.com           sh -c fabric-ca-server sta ...   Up      0.0.0.0:7054->7054/tcp                        
couchdb                  tini -- /docker-entrypoint ...   Up      4369/tcp, 0.0.0.0:5984->5984/tcp, 9100/tcp    
orderer.example.com      orderer                          Up      0.0.0.0:7050->7050/tcp                        
peer0.org1.example.com   peer node start                  Up      0.0.0.0:7051->7051/tcp, 0.0.0.0:7053->7053/tcp

ログの確認

特定のコンテナのログが見たいときはその名前を指定する。-fを指定するとtailモードになる。

$ docker-compose logs
peer0.org1.example.com    | 2018-05-15 08:32:00.738 UTC [nodeCmd] serve -> INFO 001 Starting peer:
peer0.org1.example.com    |  Version: 1.1.0
peer0.org1.example.com    |  Go version: go1.9.2
peer0.org1.example.com    |  OS/Arch: linux/amd64
peer0.org1.example.com    |  Experimental features: false
peer0.org1.example.com    |  Chaincode:
peer0.org1.example.com    |   Base Image Version: 0.4.6
peer0.org1.example.com    |   Base Docker Namespace: hyperledger
peer0.org1.example.com    |   Base Docker Label: org.hyperledger.fabric
peer0.org1.example.com    |   Docker Namespace: hyperledger
peer0.org1.example.com    | 
peer0.org1.example.com    | 2018-05-15 08:32:00.741 UTC [ledgermgmt] initialize -> INFO 002 Initializing ledger mgmt
peer0.org1.example.com    | 2018-05-15 08:32:00.742 UTC [kvledger] NewProvider -> INFO 003 Initializing ledger provider
peer0.org1.example.com    | 2018-05-15 08:32:00.801 UTC [couchdb] handleRequest -> WARN 004 Retrying couchdb request in 125ms. Attempt:1  Error:Get http://couchdb:5984/: dial tcp 172.23.0.3:5984: getsockopt: connection refused
(略)
orderer.example.com       | 2018-05-15 08:32:18.479 UTC [policies] Evaluate -> DEBU 31c Signature set satisfies policy /Channel/Readers
orderer.example.com       | 2018-05-15 08:32:18.480 UTC [policies] Evaluate -> DEBU 31d == Done Evaluating *policies.implicitMetaPolicy Policy /Channel/Readers
orderer.example.com       | 2018-05-15 08:32:18.480 UTC [common/deliver] deliverBlocks -> DEBU 31e [channel: mychannel] Received seekInfo (0xc42010c220) start:<specified:<number:1 > > stop:<specified:<number:18446744073709551615 > >  from 172.23.0.5:38980
orderer.example.com       | 2018-05-15 08:32:18.480 UTC [fsblkstorage] waitForBlock -> DEBU 31f Going to wait for newer blocks. maxAvailaBlockNumber=[0], waitForBlockNum=[1]

peer CLI

peer0が参加しているチャネルの一覧を取得するにはdocker execを使用してpeer channel listコマンドを実行する:

$ docker exec peer0.org1.example.com peer channel list
2018-05-15 08:48:07.033 UTC [channelCmd] InitCmdFactory -> INFO 001 Endorser and orderer connections initialized
Channels peers has joined: 
mychannel
2018-05-15 08:48:07.059 UTC [main] main -> INFO 002 Exiting.....
Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away