Hyperledger Fabric v1.0-alpha2での環境構築手順

NO IMAGE

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:<your_platform> 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つの設定ファイルを作る
    1. orderer bootstrap block
    2. fabric channel configuration transaction
    3. 2つのanchor peer transactions
  • 設定ファイル: configtx.yaml
    • 3つの組織
      • オーダラー組織(OrdererOrg)
      • ピア組織(Org1とOrg2)
    • このファイルが設定するコンソーシアム: SampleConsortium
  • オーダラージェネシスブロック: 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: ハイパーレッジャー、ハイパーレジャー、ファブリック

Techカテゴリの最新記事