はじめに
以前の記事で Ethereum をRaspberry Pi上で動作させるものがありました。
今回は、「医薬品のデッドストック販売プラットフォーム PoC」で利用した “Hyperledger Fabric” を Raspberry Pi上に構築し、Hyperledger FabricのチュートリアルにあるBuilding Your First Network
の動作を確認してみます。
このページの目次
セットアップ
各種ツールインストール
Prerequisites — hyperledger-fabricdocs master documentation
こちらで必要とされているものを順次インストールします。
Docer / Docker-Compose
1 2 3 4 5 |
$ apt update && apt -y upgrade $ sudo apt-get install -y git curl gcc libc6-dev libltdl3-dev $ python-setuptools $ sudo -H pip install pip --upgrade $ curl -sSL get.docker.com | sh
$ sudo usermod -aG docker pi $ sudo pip install docker-compose |
Node.js
1 2 3 4 |
$ sudo apt install -y nodejs npm $ sudo npm install n -g $ sudo n 6.9.5 $ npm install npm@3.10.10 -g |
Go
1 2 3 4 5 6 7 |
$ cd ~ $ wget https://dl.google.com/go/go1.9.2.linux-armv6l.tar.gz $ tar xzvf go1.9.2.linux-armv6l.tar.gz $ mkdir -p /home/pi/golang/src/github.com/hyperledger $ echo 'export PATH=${HOME}/go/bin:${PATH}' >> .bashrc $ echo 'export GOPATH=${HOME}/golang' >> .bashrc $ source .bashrc |
FabricのDockerイメージビルド
Fabricとしての動作と、チュートリアルの実行のために、いくつかのリポジトリのクローンと、Dockerイメージのビルドを行ないます。
最初のfabric-baseimage
のmakeには4時間程度必要でした。それ以外は、数分程度で終わりました。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$ cd /home/pi/golang/src/github.com/hyperledger $ git clone https://github.com/hyperledger/fabric-baseimage.git $ git clone https://github.com/hyperledger/fabric.git $ git clone https://github.com/hyperledger/fabric-ca $ cd fabric-baseimage
$ make docker $ cd ../fabric $ grep "^VERSION" ../fabric-baseimage/Makefile | awk '{print $3}' > .baseimage-release $ make peer peer-docker orderer-docker tools-docker $ cd ../fabric-ca $ sed -i -e "s/BASEIMAGE_RELEASE = 0.3.1/BASEIMAGE_RELEASE = $(grep '^VERSION' ../fabric-baseimage/Makefile | awk '{print $3}')/" Makefile $ make docker |
すべて完了すると、下記のようにイメージが作成されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE hyperledger/fabric-tools armv7l-1.0.6-snapshot-78e18d17 b19bcd1e079c 7 days ago 1.21GB hyperledger/fabric-tools latest b19bcd1e079c 7 days ago 1.21GB hyperledger/fabric-orderer armv7l-1.0.6-snapshot-78e18d17 014095631d8c 7 days ago 190MB hyperledger/fabric-orderer latest 014095631d8c 7 days ago 190MB hyperledger/fabric-ca armv7l-1.0.6-snapshot-cd93c3c fe9fd405a49a 7 days ago 240MB hyperledger/fabric-ca latest fe9fd405a49a 7 days ago 240MB hyperledger/fabric-peer armv7l-1.0.6-snapshot-78e18d17 6f9c0afad670 7 days ago 193MB hyperledger/fabric-peer latest 6f9c0afad670 7 days ago 193MB hyperledger/fabric-javaenv armv7l-1.0.6-snapshot-78e18d17 5f622df562a0 7 days ago 1.27GB hyperledger/fabric-javaenv latest 5f622df562a0 7 days ago 1.27GB hyperledger/fabric-ccenv armv7l-1.0.6-snapshot-78e18d17 183dc85596cd 7 days ago 1.18GB hyperledger/fabric-ccenv latest 183dc85596cd 7 days ago 1.18GB hyperledger/fabric-baseimage armv7l-0.4.3 66a760f165db 7 days ago 1.16GB hyperledger/fabric-baseimage latest 66a760f165db 7 days ago 1.16GB hyperledger/fabric-basejvm armv7l-0.4.3 a85a0e1e2141 7 days ago 456MB hyperledger/fabric-basejvm latest a85a0e1e2141 7 days ago 456MB hyperledger/fabric-baseos armv7l-0.4.3 dafd89d7e4b3 7 days ago 171MB hyperledger/fabric-baseos latest dafd89d7e4b3 7 days ago 171MB armv7/armhf-ubuntu latest 4d7ccbc584c8 14 months ago 122MB |
チュートリアル実施
チュートリアルの内容は、Hyperledger Fabricのオフィシャルサイトにあります。
Building Your First Network — hyperledger-fabricdocs master documentation
実行
チュートリアルに必要なリポジトリをクローンし、実行してみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
$ cd /home/pi/golang/src/github.com/hyperledger $ git clone https://github.com/hyperledger/fabric-samples.git $ cd fabric-samples/first-network $ ./byfn.sh -m generate $ ./byfn.sh -m up ...(snip) Instantiating chaincode on org2/peer2... CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key CORE_PEER_LOCALMSPID=Org2MSP CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt CORE_PEER_TLS_ENABLED=true CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp CORE_PEER_ID=cli CORE_LOGGING_LEVEL=DEBUG CORE_PEER_ADDRESS=peer0.org2.example.com:7051 2018-01-21 09:57:47.941 UTC [msp] GetLocalMSP -> DEBU 001 Returning existing local MSP 2018-01-21 09:57:47.942 UTC [msp] GetDefaultSigningIdentity -> DEBU 002 Obtaining default signing identity 2018-01-21 09:57:48.015 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 003 Using default escc 2018-01-21 09:57:48.030 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 004 Using default vscc 2018-01-21 09:57:48.034 UTC [msp/identity] Sign -> DEBU 005 Sign: plaintext: 0A94070A6608031A0B089CC891D30510...324D53500A04657363630A0476736363 2018-01-21 09:57:48.034 UTC [msp/identity] Sign -> DEBU 006 Sign: digest: ACF7E0FD999ED7341483F3210408818BE98264EE2619B69CB7E7E245B65FF8B8 Error: Error endorsing chaincode: rpc error: code = Unknown desc = Error starting container: API error (400): {"message":"Minimum memory limit allowed is 4MB"} ...(snip) !!!!!!!!!!!!!!! Chaincode instantiation on PEER2 on channel 'mychannel' failed !!!!!!!!!!!!!!!! ========= ERROR !!! FAILED to execute End-2-End Scenario =========== $ |
しばらくは進んで行きますが、途中でエラーが発生してしまいました。
エラーを解決して再実行
原因を調査していくと、解決方法に関する情報を見つけました。
エラーメッセージにあるようにDockerで利用できるメモリ量が少ないため、これを多くするための調整を行なえば良いようです。
こちらの内容を元に、fabric-samples/first-network/base/docker-compose-base.yaml
の各サービスのenvironment
へCORE_VM_DOCKER_HOSTCONFIG_MEMORY=536870912
を追加します。
これで、再び実行してみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$ ./byfn.sh -m generate $ ./byfn.sh -m up ...(snip) ========= All GOOD, BYFN execution completed =========== _____ _ _ ____ | ____| | \ | | | _ \ | _| | \| | | | | | | |___ | |\ | | |_| | |_____| |_| \_| |____/ $ |
無事に終了しました!
これで、Raspberry Piでも Hyperledger Fabric を動作させられることを確認できました。
課題
とはいえ、課題も感じています。
Raspberry Pi にとって、1台で Hyperledger Fabric フルセットの実行はかなりの負荷となっています。実行中のロードアベレージは概ね”10”前後となっており、本来のRaspberry Piの許容範囲の2〜3倍程度の処理が必要でした。
当然実行時間も長くなり、上記のチュートリアルの実行時間がおよそ8.5分でした。
同じ内容を手元のMacBook Proで実行すると概ね1.5分程度ですので、およそ5〜6倍程度の時間がかかることになります。
まとめ
エッジコンピューティングの環境として、Raspberry Pi でブロックチェーンが使えることは非常に夢があると思います。
IoTデバイスの入力をエッジサーバでブロックチェーンへ格納し、それが他のエッジサーバとリアルタイムに連携されていく、また、チェインコードの結果が低レイテンシーでIoTデバイスへ反映されていく、ということを低コストで実現できる可能性を個人的には感じています。
どういう構成、どういう処理であれば、現実的にRaspberry Piでブロックチェーンを使えるのか、引き続き調査を進めて行きたいと思います。
- 【速習】AWS Blockchain Templatesを使ってHyperledger Fabricを構築してみる - 2018年4月24日
- Hyperledger Fabric 1.0.6 を Raspberry Pi で実行する環境の構築 - 2018年1月22日
- JSON-RPC API で geth を便利に使う - 2017年2月15日
本記事に対するコメントはまだありません