チェーンコードがワールドステートにKVS情報を登録する際、デフォルトでは平文で登録される。
Fabricが提供するチェーンコード関数(shim)において、暗号化・復号化関数を使ってKVS情報を暗号化・復号化してみる。
➀最初に、必要なパッケージをgovendorでインストールする。
# cd /opt/src/github.com/hyperledger/fabric-samples/chaincode/enccc_example
# go get github.com/kardianos/govendor
# govendor init
# govendor add +external
# ls -l vendor/
合計 44
drwxr-xr-x. 22 root root 4096 12月 24 16:06 github.com
drwxr-xr-x. 5 root root 47 12月 24 16:06 go.uber.org
drwxr-xr-x. 3 root root 15 12月 24 16:06 golang.org
drwxr-xr-x. 4 root root 34 12月 24 16:06 google.golang.org
drwxr-xr-x. 3 root root 21 12月 24 16:06 gopkg.in
-rw-r--r--. 1 root root 39682 12月 24 16:06 vendor.json
②チェーンコードをインストールする。ここでは、Fabric付属のサンプルソースを利用する。
#peer chaincode install -n bushido -v 1.0 -l golang -p github.com/chaincode/enccc_example
#
# peer chaincode instantiate -o orderer.example.com:7050 -C bushido -n bushido -l golang -v 1.0 -c '{"Args":[]}' -P "OR ('Org1MSP.peer','Org2MSP.peer')" --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/msp/tlscacerts/tlsca.example.com-cert.pem
③共通鍵を作成する。サポートしてる暗号アルゴリズムはAES 256bit。
# ENCKEY=`openssl rand 32 -base64` && DECKEY=$ENCKEY
# echo $ENCKEY
hVhA7CxStLauw9/aLBnieoC9dM237fQHPvU8ibS1MyY=
#
# IV=`openssl rand 16 -base64`
➃データを暗号化してワールドステートに登録する。
transientオプションに暗号化鍵を指定する。暗号化鍵はワールドステートには登録されない。
# peer chaincode invoke -n bushido -C bushido -c '{"Args":["ENCRYPT","key2","value2"]}' --transient "{\"ENCKEY\":\"$ENCKEY\",\"IV\":\"$IV\"}" --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/msp/tlscacerts/tlsca.example.com-cert.pem
⑤復号化してワールドステートから値を取得する。
transientオプションに復号化鍵(=暗号化鍵)を指定する。
# peer chaincode query -n bushido -C bushido -c '{"Args":["DECRYPT","key2"]}' --transient "{\"DECKEY\":\"$DECKEY\"}"
value2
ためしに、復号化鍵(DECKEY)に誤った値を指定した場合、以下のエラーが発生する。
・hogeとした場合
# peer chaincode query -n bushido -C bushido -c '{"Args":["DECRYPT","key2"]}' --transient "{\"DECKEY\":\"hoge\"}"
failed: Failed importing key with opts [&{true}]: Invalid Key Length [3]. Must be 32 bytes"
・32バイトの適用な値を指定した場合
# peer chaincode query -n bushido -C bushido -c '{"Args":["DECRYPT","key2"]}' --transient "{\"DECKEY\":\"111222xStLauw9/aLBnieoC9dM237fQHPvU8ibS1MyY=\"}"
Error: endorsement failure during query. response: status:500 message:"getStateAndDecrypt failed, err Invalid pkcs7 padding (unpadding > aes.BlockSize || unpadding == 0)\nFailed decrypting with opts [&{[] <nil>}]\ngithub.com/chaincode/enccc_example/vendor/github.com/hyperledger/fabric/bccsp/sw.(*CSP).Decrypt\n\t/chaincode/input/src/github.com/chaincode/enccc_example/vendor/github.com/hyperledger/fabric/bccsp/sw/impl.go:303\ngithub.com/chaincode/enccc_example/vendor/github.com/hyperledger/fabric/core/chaincode/shim/ext/entities.(*BCCSPEncrypterEntity).Decrypt\n\t/chaincode/input/src/github.com/chaincode/enccc_example/vendor/github.com/hyperledger/fabric/core/chaincode/shim/ext/entities/entities.go:246\nmain.getStateAndDecrypt\n\t/chaincode/input/src/github.com/chaincode/enccc_example/utils.go:40\nmain.(*EncCC).Decrypter\n\t/chaincode/input/src/github.com/chaincode/enccc_example/enccc_example.go:76\nmain.(*EncCC).Invoke\n\t/chaincode/input/src/github.com/chaincode/enccc_example/enccc_example.go:182\ngithub.com/chaincode/enccc_example/vendor/github.com/hyperledger/fabric/core/chaincode/shim.(*Handler).handleTransaction.func1\n\t/chaincode/input/src/github.com/chaincode/enccc_example/vendor/github.com/hyperledger/fabric/core/chaincode/shim/handler.go:273\nruntime.goexit\n\t/opt/go/src/runtime/asm_amd64.s:1333"
2018年12月24日月曜日
2018年12月9日日曜日
Fabric Javaチェーンコードをつかってみる
Hyperledger Fabric 1.3から、Java版チェーンコードが正式サポートされた。
Java版チェーンコードを使ってみる。
Javaチェーンコードを利用する際の前提条件は以下のとおり。
・JDK 1.8がインストール済みであること。
・gradle 2.12以上がインストール済みであること。
➀各PeerにJavaチェーンコードをインストールする。
※Fabricでは、Javaチェーンコードのサンプルが提供されており、今回はそれを利用する。
# peer chaincode install -n bushido -v 1.0 -l java -p /opt/gopath/src/github.com/chaincode/chaincode_example02/java/
#
# CORE_PEER_ADDRESS="peer0.org2.example.com:7051"
# CORE_PEER_LOCALMSPID="Org2MSP"
# CORE_PEER_MSPCONFIGPATH="/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp"
# CORE_PEER_TLS_CERT_FILE="/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/server.crt"
# CORE_PEER_TLS_KEY_FILE="/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/server.key"
# 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"
# peer chaincode install -n bushido -v 1.0 -l java -p /opt/gopath/src/github.com/chaincode/chaincode_example02/java/
②チェーンコードのinstantiateを行う。
# peer chaincode instantiate -o orderer.example.com:7050 --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/tls/ca.crt -C bushido -n bushido -l java -v 1.0 -c '{"Args":["init","a","100","b","200"]}' -P "AND ('Org1MSP.peer','Org2MSP.peer')"
Java版チェーンコードを使ってみる。
Javaチェーンコードを利用する際の前提条件は以下のとおり。
・JDK 1.8がインストール済みであること。
・gradle 2.12以上がインストール済みであること。
➀各PeerにJavaチェーンコードをインストールする。
※Fabricでは、Javaチェーンコードのサンプルが提供されており、今回はそれを利用する。
# peer chaincode install -n bushido -v 1.0 -l java -p /opt/gopath/src/github.com/chaincode/chaincode_example02/java/
#
# CORE_PEER_ADDRESS="peer0.org2.example.com:7051"
# CORE_PEER_LOCALMSPID="Org2MSP"
# CORE_PEER_MSPCONFIGPATH="/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp"
# CORE_PEER_TLS_CERT_FILE="/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/server.crt"
# CORE_PEER_TLS_KEY_FILE="/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/server.key"
# 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"
# peer chaincode install -n bushido -v 1.0 -l java -p /opt/gopath/src/github.com/chaincode/chaincode_example02/java/
②チェーンコードのinstantiateを行う。
# peer chaincode instantiate -o orderer.example.com:7050 --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/tls/ca.crt -C bushido -n bushido -l java -v 1.0 -c '{"Args":["init","a","100","b","200"]}' -P "AND ('Org1MSP.peer','Org2MSP.peer')"
③Javaチェーンコードのコンテナが作成されていることを確認する。
# docker ps | grep bushido
84bb5c2aa994 dev-peer0.org1.example.com-bushido-1.0-92aca216667084484fba82d74149bf26ec36672612d5608a67bb2b0694ade7d7 "/root/chaincode-jav…" 5 minutes ago Up 5 minutes dev-peer0.org1.example.com-bushido-1.0
➃QUERYやINVOKEを行うことができることを確認する。
# peer chaincode query -C bushido -n bushido -c '{"Args":["query","a"]}'
100
# peer chaincode query -C bushido -n bushido -c '{"Args":["query","b"]}'
200
<補足>
Javaチェーンコードのログを閲覧すると、以下のようなログが出力される。
[root@localhost first-network]# docker logs -f --tail 30 dev-peer0.org1.example.com-bushido-1.0
Dec 09, 2018 3:43:12 AM org.hyperledger.fabric.shim.ChaincodeBase newChannelBuilder
INFO: Configuring channel connection to peer.
Dec 09, 2018 3:43:14 AM org.hyperledger.fabric.example.SimpleChaincode init
INFO: Init java simple chaincode
Dec 09, 2018 3:43:14 AM org.hyperledger.fabric.example.SimpleChaincode init
INFO: account a, value = 100; account b, value 200
Dec 09, 2018 3:45:52 AM org.hyperledger.fabric.example.SimpleChaincode invoke
INFO: Invoke java simple chaincode
Dec 09, 2018 3:45:52 AM org.hyperledger.fabric.example.SimpleChaincode query
INFO: Query Response:
Name: a, Amount: 100
Dec 09, 2018 3:45:57 AM org.hyperledger.fabric.example.SimpleChaincode invoke
INFO: Invoke java simple chaincode
Dec 09, 2018 3:45:57 AM org.hyperledger.fabric.example.SimpleChaincode query
INFO: Query Response:
Name: a, Amount: 100
Dec 09, 2018 3:46:03 AM org.hyperledger.fabric.example.SimpleChaincode invoke
INFO: Invoke java simple chaincode
Dec 09, 2018 3:46:03 AM org.hyperledger.fabric.example.SimpleChaincode query
INFO: Query Response:
Name: a, Amount: 100
Dec 09, 2018 3:46:52 AM org.hyperledger.fabric.example.SimpleChaincode invoke
INFO: Invoke java simple chaincode
Dec 09, 2018 3:46:52 AM org.hyperledger.fabric.example.SimpleChaincode query
INFO: Query Response:
Name: b, Amount: 200
Linux gradleインストール手順
CentOS上にgradleをインストールする。
➀以下のサイトからgradleのインストール媒体をダウンロードする。
https://gradle.org/next-steps/?version=4.10.3&format=bin
②gradle用のフォルダを作成する。
# mkdir /opt/gradle
# mv /tmp/gradle-4.10.3-bin.zip /opt/gradle
# cd /opt/gradle
③インストール媒体を解凍する。
# unzip -d /opt/gradle gradle-4.10.3-bin.zip
➃ 解凍後、中身を確認する。
# ls -l /opt/gradle/gradle-4.10.3
合計 216
-rw-rw-r--. 1 root root 55261 11月 29 01:04 LICENSE
-rw-rw-r--. 1 root root 802 11月 29 01:04 NOTICE
drwxr-xr-x. 2 root root 38 12月 5 01:54 bin
-rw-rw-r--. 1 root root 151483 12月 5 01:53 getting-started.html
drwxrwxr-x. 2 root root 24 11月 29 01:04 init.d
drwxr-xr-x. 3 root root 4096 12月 5 01:54 lib
drwxrwxr-x. 2 root root 263 11月 29 01:04 media
⑤gradleのパスを通す。
# export PATH=$PATH:/opt/gradle/gradle-4.10.3/bin
⑥gradleのバージョンを確認する。
# gradle -v
Welcome to Gradle 4.10.3!
Here are the highlights of this release:
- Incremental Java compilation by default
- Periodic Gradle caches cleanup
- Gradle Kotlin DSL 1.0-RC6
- Nested included builds
- SNAPSHOT plugin versions in the `plugins {}` block
For more details see https://docs.gradle.org/4.10.3/release-notes.html
------------------------------------------------------------
Gradle 4.10.3
------------------------------------------------------------
Build time: 2018-12-05 00:50:54 UTC
Revision: e76905e3a1034e6f724566aeb985621347ff43bc
Kotlin DSL: 1.0-rc-6
Kotlin: 1.2.61
Groovy: 2.4.15
Ant: Apache Ant(TM) version 1.9.11 compiled on March 23 2018
JVM: 1.8.0_191 (Oracle Corporation 25.191-b12)
OS: Linux 3.10.0-862.el7.x86_64 amd64
➀以下のサイトからgradleのインストール媒体をダウンロードする。
https://gradle.org/next-steps/?version=4.10.3&format=bin
②gradle用のフォルダを作成する。
# mkdir /opt/gradle
# mv /tmp/gradle-4.10.3-bin.zip /opt/gradle
# cd /opt/gradle
③インストール媒体を解凍する。
# unzip -d /opt/gradle gradle-4.10.3-bin.zip
➃ 解凍後、中身を確認する。
# ls -l /opt/gradle/gradle-4.10.3
合計 216
-rw-rw-r--. 1 root root 55261 11月 29 01:04 LICENSE
-rw-rw-r--. 1 root root 802 11月 29 01:04 NOTICE
drwxr-xr-x. 2 root root 38 12月 5 01:54 bin
-rw-rw-r--. 1 root root 151483 12月 5 01:53 getting-started.html
drwxrwxr-x. 2 root root 24 11月 29 01:04 init.d
drwxr-xr-x. 3 root root 4096 12月 5 01:54 lib
drwxrwxr-x. 2 root root 263 11月 29 01:04 media
⑤gradleのパスを通す。
# export PATH=$PATH:/opt/gradle/gradle-4.10.3/bin
⑥gradleのバージョンを確認する。
# gradle -v
Welcome to Gradle 4.10.3!
Here are the highlights of this release:
- Incremental Java compilation by default
- Periodic Gradle caches cleanup
- Gradle Kotlin DSL 1.0-RC6
- Nested included builds
- SNAPSHOT plugin versions in the `plugins {}` block
For more details see https://docs.gradle.org/4.10.3/release-notes.html
------------------------------------------------------------
Gradle 4.10.3
------------------------------------------------------------
Build time: 2018-12-05 00:50:54 UTC
Revision: e76905e3a1034e6f724566aeb985621347ff43bc
Kotlin DSL: 1.0-rc-6
Kotlin: 1.2.61
Groovy: 2.4.15
Ant: Apache Ant(TM) version 1.9.11 compiled on March 23 2018
JVM: 1.8.0_191 (Oracle Corporation 25.191-b12)
OS: Linux 3.10.0-862.el7.x86_64 amd64
Hyperledger Fabric バッチサイズ変更手順
FabricのOrdererがブロックを生成する際、デフォルト設定では、以下のタイミングでブロックが作られる。
タイムアウト時間:2秒
または
トランザクション数:10個
ブロックチェーンコンソーシアムを構築した後、運用中にトランザクション数を変更する手順を説明する。
➀CONFIGブロックを取得する。
# docker exec -it cli bash
# peer channel fetch config config.bc -o orderer.example.com:7050 -c bushido --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/tls/ca.crt
②CONFIGブロック(バイナリ)をJSON形式にデコードする。このとき、Envelopeメッセージ等は除外する。
# configtxlator proto_decode --input config.bc --type common.Block | jq .data.data[0].payload.data.config > config.json
③今回はトランザクション数を10→5に変更することにする。
# jq ".channel_group.groups.Orderer.values.BatchSize.value.max_message_count" "config.json"
10
# jq ".channel_group.groups.Orderer.values.BatchSize.value.max_message_count = 5" "config.json" > "update_config.json"
# jq ".channel_group.groups.Orderer.values.BatchSize.value.max_message_count" "update_config.json"
5
➃「config.json」と「update_config.json」の差分値をシミレーションする。
#configtxlator proto_encode --input config.json --type common.Config > config.bc
#configtxlator proto_encode --input update_config.json --type common.Config > update_config.bc
#configtxlator compute_update --channel_id bushido --original config.bc --updated update_config.bc --output update_config_2.bc
⑤シミレーション結果で生成された「update_config_2.bc」をJSON形式にデコードする。
#configtxlator proto_decode --input update_config_2.bc --type common.ConfigUpdate | jq . > update_config_2.json
⑥Envelopeメッセージをラッピングする。
#echo '{"payload":{"header":{"channel_header":{"channel_id":"bushido", "type":2}},"data":{"config_update":'$(cat update_config_2.json)'}}}' | jq . > update_config_2_envelope.json
タイムアウト時間:2秒
または
トランザクション数:10個
ブロックチェーンコンソーシアムを構築した後、運用中にトランザクション数を変更する手順を説明する。
➀CONFIGブロックを取得する。
# docker exec -it cli bash
# peer channel fetch config config.bc -o orderer.example.com:7050 -c bushido --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/tls/ca.crt
②CONFIGブロック(バイナリ)をJSON形式にデコードする。このとき、Envelopeメッセージ等は除外する。
# configtxlator proto_decode --input config.bc --type common.Block | jq .data.data[0].payload.data.config > config.json
③今回はトランザクション数を10→5に変更することにする。
# jq ".channel_group.groups.Orderer.values.BatchSize.value.max_message_count" "config.json"
10
# jq ".channel_group.groups.Orderer.values.BatchSize.value.max_message_count = 5" "config.json" > "update_config.json"
# jq ".channel_group.groups.Orderer.values.BatchSize.value.max_message_count" "update_config.json"
5
➃「config.json」と「update_config.json」の差分値をシミレーションする。
#configtxlator proto_encode --input config.json --type common.Config > config.bc
#configtxlator proto_encode --input update_config.json --type common.Config > update_config.bc
#configtxlator compute_update --channel_id bushido --original config.bc --updated update_config.bc --output update_config_2.bc
⑤シミレーション結果で生成された「update_config_2.bc」をJSON形式にデコードする。
#configtxlator proto_decode --input update_config_2.bc --type common.ConfigUpdate | jq . > update_config_2.json
⑥Envelopeメッセージをラッピングする。
#echo '{"payload":{"header":{"channel_header":{"channel_id":"bushido", "type":2}},"data":{"config_update":'$(cat update_config_2.json)'}}}' | jq . > update_config_2_envelope.json
⑦「update_config_2_envelope.json」をバイナリ形式にエンコードする。
#configtxlator proto_encode --input update_config_2_envelope.json --type common.Envelope --output update_config_2_envelope.bc
⑧「update_config_2_envelope.bc」に対して、PEERの署名を行う。
(Endorsing Policyを満たす分、署名を付与する必要あり)
# peer channel signconfigtx -f update_config_2_envelope.bc
⑨チャネルを更新する。
# peer channel update -f update_config_2_envelope.bc -c bushido -o orderer.example.com:7050 --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/tls/ca.crt
# peer channel update -f update_config_2_envelope.bc -c bushido -o orderer.example.com:7050 --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/tls/ca.crt
2018年8月19日日曜日
Hyperledger Fabric 1.2.0 Release版 インストール
インストールの流れは、1.1.0 Release版とほぼ同じである。
v1.1.0 Release版の手順は以下を参照。
http://memoyasu.blogspot.com/2018/04/hyperledger-fabric-110relase.html
1.1.0と1.2.0の手順の差分は以下。
①Fabaricソース一式をクローンする際、ブランチ名を変更すること。
# git clone -b v1.2.0 https://github.com/hyperledger/fabric.git
# git clone -b v1.2.0 https://github.com/hyperledger/fabric-ca.git
②サードパーティDockerイメージをダウンロードする必要がある。
コマンドは以下を実行する。
# make docker-thirdparty
なお、make dockerコマンドで作成されるDockerイメージは以下。
<補足>
・Goのバージョンは1.10.Xを利用すること。
・環境変数には以下を設定すること。
GOROOT=/usr/local/go/bin (GOのビルドパス)
GOPATH=/opt (Fabricのソースパス)
v1.1.0 Release版の手順は以下を参照。
http://memoyasu.blogspot.com/2018/04/hyperledger-fabric-110relase.html
1.1.0と1.2.0の手順の差分は以下。
①Fabaricソース一式をクローンする際、ブランチ名を変更すること。
# git clone -b v1.2.0 https://github.com/hyperledger/fabric.git
# git clone -b v1.2.0 https://github.com/hyperledger/fabric-ca.git
②サードパーティDockerイメージをダウンロードする必要がある。
コマンドは以下を実行する。
# make docker-thirdparty
なお、make dockerコマンドで作成されるDockerイメージは以下。
<補足>
・Goのバージョンは1.10.Xを利用すること。
・環境変数には以下を設定すること。
GOROOT=/usr/local/go/bin (GOのビルドパス)
GOPATH=/opt (Fabricのソースパス)
2018年7月8日日曜日
Hyperledger FabricのCapability機能
Hyperledger Fabric では、大規模なブロックチェーンネットワークを構成することを想定し、異なるバージョンのPEERとORDERERが混在できるように、プロトコルの互換性を確保している (Capability機能という)。
Fabric Java SDKはv1.1を利用し、PEER/ORDERER/CAはv1.2を利用するブロックチェーン環境において、ユーザのenroll、チェーンコードをINVOKE/QUERYできるかを実機検証してみる。
実機確認結果
全てのインターフェースで、互換性を確認できた。
PEERに対するINVOKE:OK
Fabric SDKからPEERへのプロポーザル送信
DEBUG Channel - Channel mychannel got back from peer peer0.org1.example.com status: 200, message:
Fabric SDKからOrdererへのトランザクション送信
DEBUG OrdererClient - resp status value: 200, resp: SUCCESS
PEERからFabric SDKへのブロック通知
DEBUG EventHub - EventHub eventhub01 got event type: BLOCK
PEERに対するQUERY:OK
INFO HFJavaSDKBasicExample - [{"Key":"CAR0", "Record":{"colour":"blue","make":"Toyota","model":"Prius","owner":"Tomoko"}},{"Key":"CAR1", "Record":{"colour":"red","make":"Ford","model":"Mustang","owner":"Brad"}},{"Key":"CAR12", "Record":{"colour":"Black","make":"Honda","model":"Accord","owner":"Tom"}},{"Key":"CAR13", "Record":{"colour":"Black","make":"Honda","model":"Accord","owner":"Tom"}},{"Key":"CAR2", "Record":{"colour":"green","make":"Hyundai","model":"Tucson","owner":"Jin Soo"}},{"Key":"CAR3", "Record":{"colour":"yellow","make":"Volkswagen","model":"Passat","owner":"Max"}},{"Key":"CAR4", "Record":{"colour":"black","make":"Tesla","model":"S","owner":"Adriana"}},{"Key":"CAR5", "Record":{"colour":"purple","make":"Peugeot","model":"205","owner":"Michel"}},{"Key":"CAR6", "Record":{"colour":"white","make":"Chery","model":"S22L","owner":"Aarav"}},{"Key":"CAR7", "Record":{"colour":"violet","make":"Fiat","model":"Punto","owner":"Pari"}},{"Key":"CAR8", "Record":{"colour":"indigo","make":"Tata","model":"Nano","owner":"Valeria"}},{"Key":"CAR9", "Record":{"colour":"brown","make":"Holden","model":"Barina","owner":"Shotaro"}}]
CAでのユーザ認証: OK
DEBUG HFClient - Setting user context to MSPID: Org1MSP user: admin
Fabric Java SDKはv1.1を利用し、PEER/ORDERER/CAはv1.2を利用するブロックチェーン環境において、ユーザのenroll、チェーンコードをINVOKE/QUERYできるかを実機検証してみる。
実機確認結果
全てのインターフェースで、互換性を確認できた。
PEERに対するINVOKE:OK
Fabric SDKからPEERへのプロポーザル送信
DEBUG Channel - Channel mychannel got back from peer peer0.org1.example.com status: 200, message:
Fabric SDKからOrdererへのトランザクション送信
DEBUG OrdererClient - resp status value: 200, resp: SUCCESS
PEERからFabric SDKへのブロック通知
DEBUG EventHub - EventHub eventhub01 got event type: BLOCK
PEERに対するQUERY:OK
INFO HFJavaSDKBasicExample - [{"Key":"CAR0", "Record":{"colour":"blue","make":"Toyota","model":"Prius","owner":"Tomoko"}},{"Key":"CAR1", "Record":{"colour":"red","make":"Ford","model":"Mustang","owner":"Brad"}},{"Key":"CAR12", "Record":{"colour":"Black","make":"Honda","model":"Accord","owner":"Tom"}},{"Key":"CAR13", "Record":{"colour":"Black","make":"Honda","model":"Accord","owner":"Tom"}},{"Key":"CAR2", "Record":{"colour":"green","make":"Hyundai","model":"Tucson","owner":"Jin Soo"}},{"Key":"CAR3", "Record":{"colour":"yellow","make":"Volkswagen","model":"Passat","owner":"Max"}},{"Key":"CAR4", "Record":{"colour":"black","make":"Tesla","model":"S","owner":"Adriana"}},{"Key":"CAR5", "Record":{"colour":"purple","make":"Peugeot","model":"205","owner":"Michel"}},{"Key":"CAR6", "Record":{"colour":"white","make":"Chery","model":"S22L","owner":"Aarav"}},{"Key":"CAR7", "Record":{"colour":"violet","make":"Fiat","model":"Punto","owner":"Pari"}},{"Key":"CAR8", "Record":{"colour":"indigo","make":"Tata","model":"Nano","owner":"Valeria"}},{"Key":"CAR9", "Record":{"colour":"brown","make":"Holden","model":"Barina","owner":"Shotaro"}}]
CAでのユーザ認証: OK
DEBUG HFClient - Setting user context to MSPID: Org1MSP user: admin
Ubuntu 16.04にGo 1.10.1 をインストール
# sudo apt-get update
# sudo apt-get -y upgrade
★apt-get update実行中に以下のエラーが発生したら、PGPキーをインストールする
E: コマンドラインオプション 'y' [-y から] は、ほかのオプションとの組み合わせで理解できません。
root@bushidoyasu-VirtualBox:/opt/fabric/src/github.com/hyperledger/fabric/examples/e2e_cli# upgradeapt-key adv --keyserver keyserver.ubuntu.com --r
ecv-keys 308C15A29AD198E9
# apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 308C15A29AD198E9
Executing: /tmp/tmp.W5FVqzn8iJ/gpg.1.sh --keyserver
keyserver.ubuntu.com
--recv-keys
308C15A29AD198E9
gpg: 鍵9AD198E9をhkpからサーバkeyserver.ubuntu.comに要求
gpg: 鍵9AD198E9: 公開鍵"Launchpad PPA for The Go Language Gophers"をインポートしました
gpg: 処理数の合計: 1
gpg: インポート: 1 (RSA: 1)
# sudo curl -O https://storage.googleapis.com/golang/go1.10.1.linux-amd64.tar.gz
# sudo tar -xvf go1.10.1.linux-amd64.tar.gz
# sudo mv go /usr/local
# vi ~/.profile
★以下のパスを追加する
export PATH=$PATH:/usr/local/go/bin
export GOROOT=$HOME/go
export PATH=$PATH:$GOROOT/bin
# source ~/.profile
# go version
go version go1.10.1 linux/amd64
# sudo apt-get -y upgrade
★apt-get update実行中に以下のエラーが発生したら、PGPキーをインストールする
E: コマンドラインオプション 'y' [-y から] は、ほかのオプションとの組み合わせで理解できません。
root@bushidoyasu-VirtualBox:/opt/fabric/src/github.com/hyperledger/fabric/examples/e2e_cli# upgradeapt-key adv --keyserver keyserver.ubuntu.com --r
ecv-keys 308C15A29AD198E9
# apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 308C15A29AD198E9
Executing: /tmp/tmp.W5FVqzn8iJ/gpg.1.sh --keyserver
keyserver.ubuntu.com
--recv-keys
308C15A29AD198E9
gpg: 鍵9AD198E9をhkpからサーバkeyserver.ubuntu.comに要求
gpg: 鍵9AD198E9: 公開鍵"Launchpad PPA for The Go Language Gophers"をインポートしました
gpg: 処理数の合計: 1
gpg: インポート: 1 (RSA: 1)
# sudo curl -O https://storage.googleapis.com/golang/go1.10.1.linux-amd64.tar.gz
# sudo tar -xvf go1.10.1.linux-amd64.tar.gz
# sudo mv go /usr/local
# vi ~/.profile
★以下のパスを追加する
export PATH=$PATH:/usr/local/go/bin
export GOROOT=$HOME/go
export PATH=$PATH:$GOROOT/bin
# source ~/.profile
# go version
go version go1.10.1 linux/amd64
Hyperledger Fabric 1.1以降で追加されたPEERコマンド
Hyperledger Fabric 1.1以降では、PEERコマンドの機能が大幅に強化された。
新規に追加されたPEERコマンドを使ってみる。
ピアにInstalledされたチェーンコード一覧の取得
# peer chaincode list --installed -C mychannel
Get installed chaincodes on peer:
Name: fabcar, Version: 1.0, Path: github.com/fabcar/go, Id: 4846dcee8e67da7d20eac366587b897cf3906c5fc90a2357f4849aec01fc5358
<解説>
対象のPEERに、以下のチェーンコード名、バージョン、パス、チェーンコードIDがインストールされている
チェーンコード名:fabcar
バージョン:1.0
パス:github.com/fabcar/go
チェーンコードID:4846dcee8e67da7d20eac366587b897cf3906c5fc90a2357f4849aec01fc5358
ピアにInstantiatedされたチェーンコード一覧の取得
# peer chaincode list --instantiated -C mychannel
Get instantiated chaincodes on channel mychannel:
Name: fabcar, Version: 1.0, Path: github.com/fabcar/go, Escc: escc, Vscc: vscc
<解説>
対象のPEERに、以下のチェーンコード名、バージョン、パス、ESCC名、VSCC名がinstantiateされている。
チェーンコード名:fabcar
バージョン:1.0
パス:github.com/fabcar/go
ESCC名:escc (デフォルトのシステムチェーンコード)
VSCC名:vscc(デフォルトのシステムチェーンコード)
PEERが所属するチャネル名一覧の取得
# peer channel list
2018-07-08 05:59:01.746 UTC [channelCmd] InitCmdFactory -> INFO 001 Endorser and orderer connections initialized
Channels peers has joined:
mychanne
#
ブロックチェーン情報の取得
# peer channel getinfo -c mychannel
2018-07-08 06:01:37.432 UTC [channelCmd] InitCmdFactory -> INFO 001 Endorser and orderer connections initialized
Blockchain info: {"height":3,"currentBlockHash":"01gwIBF3LEjesqG/FPAx43jtFFLZv0isOXYXqvbZTPY=","previousBlockHash":"PpP80dqWT2gS8Cwalw8JtIkD0eP5YkxuEih9syr9fSE="}
#
PEERの起動状況の確認
#peer node status
status:STARTED
PEERの起動
# peer node start
そのほか
新規に追加されたPEERコマンドを使ってみる。
ピアにInstalledされたチェーンコード一覧の取得
# peer chaincode list --installed -C mychannel
Get installed chaincodes on peer:
Name: fabcar, Version: 1.0, Path: github.com/fabcar/go, Id: 4846dcee8e67da7d20eac366587b897cf3906c5fc90a2357f4849aec01fc5358
<解説>
対象のPEERに、以下のチェーンコード名、バージョン、パス、チェーンコードIDがインストールされている
チェーンコード名:fabcar
バージョン:1.0
パス:github.com/fabcar/go
チェーンコードID:4846dcee8e67da7d20eac366587b897cf3906c5fc90a2357f4849aec01fc5358
ピアにInstantiatedされたチェーンコード一覧の取得
# peer chaincode list --instantiated -C mychannel
Get instantiated chaincodes on channel mychannel:
Name: fabcar, Version: 1.0, Path: github.com/fabcar/go, Escc: escc, Vscc: vscc
<解説>
対象のPEERに、以下のチェーンコード名、バージョン、パス、ESCC名、VSCC名がinstantiateされている。
チェーンコード名:fabcar
バージョン:1.0
パス:github.com/fabcar/go
ESCC名:escc (デフォルトのシステムチェーンコード)
VSCC名:vscc(デフォルトのシステムチェーンコード)
PEERが所属するチャネル名一覧の取得
# peer channel list
2018-07-08 05:59:01.746 UTC [channelCmd] InitCmdFactory -> INFO 001 Endorser and orderer connections initialized
Channels peers has joined:
mychanne
#
ブロックチェーン情報の取得
# peer channel getinfo -c mychannel
2018-07-08 06:01:37.432 UTC [channelCmd] InitCmdFactory -> INFO 001 Endorser and orderer connections initialized
Blockchain info: {"height":3,"currentBlockHash":"01gwIBF3LEjesqG/FPAx43jtFFLZv0isOXYXqvbZTPY=","previousBlockHash":"PpP80dqWT2gS8Cwalw8JtIkD0eP5YkxuEih9syr9fSE="}
#
PEERの起動状況の確認
#peer node status
status:STARTED
PEERの起動
# peer node start
そのほか
- チェーンコードをアンインストールするコマンドは現時点では提供されていない。
- PEERを停止するコマンドは現時点では提供されていない。
- 2つ以上のEndorsing Peerの署名が必要なINVOKEは、PEERコマンドでは実行できない(1つのEndorsing Peerしかプロポーザルをなげることができないため)。
Node.jsとnpmを最新バージョンにアップグレード
現状のバージョン
# npm -v
3.5.2
# node --version
v4.2.6
nのインストール
#npm install -g n
nodeの安定版と最新版のバージョン確認
# n --stable
10.6.0
#n --latest
10.6.0
最新バージョンのnodeへアップグレード
# n latest
install : node-v10.6.0
mkdir : /usr/local/n/versions/node/10.6.0
fetch : https://nodejs.org/dist/v10.6.0/node-v10.6.0-linux-x64.tar.gz
######################################################################## 100.0%
installed : v10.6.0
#
最新バージョンのnpmへアップグレード
#npm update -g npm
# npm -v
3.5.6
2018年4月1日日曜日
Hyperledger Fabric 1.1.0 Relase版 インストール
2018/3/20に公開されたHyperledger Fabric 1.1.0 Release版を、ソースからビルドする。
<前提>
・DockerおよびGOがインストール済みであること。
①FabricとFabric-caのソース一式をクローンする。
# git clone -b v1.1.0 https://github.com/hyperledger/fabric.git
# git clone -b v1.1.0 https://github.com/hyperledger/fabric-ca.git
# mkdir -p /opt/fabric/src/github.com/hyperledger/
# cp -rf fabric /opt/fabric/src/github.com/hyperledger
# cp -rf fabric-ca /opt/fabric/src/github.com/hyperledger
②環境変数を設定する。
# export GOPATH=/opt/fabric
# export GOHOME=/opt/fabric
③Fabricのdockerイメージを作成する
# cd $GOHOME/src/github.com/hyperledger/fabric/
# make docker
以下のエラーが発生した場合は、
protoc-gen-goを手動でダウンロードする。
------
cp build/docker/gotools/bin/protoc-gen-go build/bin/chaintool build/goshim.tar.bz2 build/image/ccenv/payload
cp: cannot stat `build/docker/gotools/bin/protoc-gen-go': そのようなファイルやディレクトリはありません
make: *** [build/image/ccenv/payload] エラー 1
------
# go get -u github.com/golang/protobuf/protoc-gen-go
# cp $GOPATH/bin/protoc-gen-go build/docker/gotools/bin/
➃Fabric-caのdockerイメージを作成する
# cd $GOHOME/src/github.com/hyperledger/fabric-ca/
# make docker
<前提>
・DockerおよびGOがインストール済みであること。
①FabricとFabric-caのソース一式をクローンする。
# git clone -b v1.1.0 https://github.com/hyperledger/fabric.git
# git clone -b v1.1.0 https://github.com/hyperledger/fabric-ca.git
# mkdir -p /opt/fabric/src/github.com/hyperledger/
# cp -rf fabric /opt/fabric/src/github.com/hyperledger
# cp -rf fabric-ca /opt/fabric/src/github.com/hyperledger
②環境変数を設定する。
# export GOPATH=/opt/fabric
# export GOHOME=/opt/fabric
③Fabricのdockerイメージを作成する
# cd $GOHOME/src/github.com/hyperledger/fabric/
# make docker
以下のエラーが発生した場合は、
protoc-gen-goを手動でダウンロードする。
------
cp build/docker/gotools/bin/protoc-gen-go build/bin/chaintool build/goshim.tar.bz2 build/image/ccenv/payload
cp: cannot stat `build/docker/gotools/bin/protoc-gen-go': そのようなファイルやディレクトリはありません
make: *** [build/image/ccenv/payload] エラー 1
------
# go get -u github.com/golang/protobuf/protoc-gen-go
# cp $GOPATH/bin/protoc-gen-go build/docker/gotools/bin/
➃Fabric-caのdockerイメージを作成する
# cd $GOHOME/src/github.com/hyperledger/fabric-ca/
# make docker
⑤Dockerイメージが作成されていることを確認する。
2017年11月14日火曜日
最新のOpenSSL 1.1.0シリーズにアップデート
最新のOpenSSL 1.1.0シリーズにアップデートする手順を説明する。
# cd /usr/local/src/
# wget https://www.openssl.org/source/openssl-1.1.0g.tar.gz
# tar xvzf openssl-1.1.0g.tar.gz
# cd openssl-1.1.0g/
# ./config -fPIC shared --prefix=/usr
# make
# make install
# openssl version
OpenSSL 1.1.0g 2 Nov 2017
# cd /usr/local/src/
# wget https://www.openssl.org/source/openssl-1.1.0g.tar.gz
# tar xvzf openssl-1.1.0g.tar.gz
# cd openssl-1.1.0g/
# ./config -fPIC shared --prefix=/usr
# make
# make install
# openssl version
OpenSSL 1.1.0g 2 Nov 2017
2017年11月12日日曜日
KeycloakをPostgreSQLに対応させる
KeycloakはデフォルトではH2が利用される。
今回は、PostgreSQLを利用するように環境設定を変更する。
前提
・「http://memoyasu.blogspot.jp/2017/11/ssoosskeycloak.html」の手順でKeycloakが動作していること。
・PostgreSQLが動作していること。
・PostgreSQLのログインユーザを作成済みであること。
postgres=# CREATE USER loginuser WITH PASSWORD 'password' CREATEDB;
CREATE ROLE
・「keycloak」というデータベースを作成済みであること。
postgres=# CREATE DATABASE keycloak OWNER loginuser;
CREATE DATABASE
postgres=#
手順
①PostgreSQL用のJDBCドライバをダウンロードする。
今回は「postgresql-9.4.1212.jar」を利用する。
https://jdbc.postgresql.org/download.html
②ドライバJARをモジュールにパッケージ化し、このモジュールをサーバーにインストールする。
「modules\system\layers\keycloak」ディレクトリ配下に「org\postgresql\main」ディレクトリを作成する。
> mkdir modules\system\layers\keycloak\org\postgresql\main
> copy postgresql-9.4.1212.jar modules\system\layers\keycloak\org\postgresql\main
③サーバの設定プロファイルでJDBCドライバを利用するようにする。
「modules\system\layers\keycloak\org\postgresql\main」ディレクトリ配下にmodule.xmlを作成する。
<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.3" name="org.postgresql">
<resources>
<resource-root path="postgresql-9.4.1212.jar"/>
</resources>
<dependencies>
<module name="javax.api"/>
<module name="javax.transaction.api"/>
</dependencies>
</module>
➃PostgreSQLのJDBCドライバを使用するようにデータソース設定を変更する。
standaloneモードで動作している場合は「standalone/configuration/standalone.xml」を修正する。
・・・
<datasources>
・・・
<drivers>
<driver name="postgresql" module="org.postgresql"> ★追加
<xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class> ★追加
</driver> ★追加
<driver name="h2" module="com.h2database.h2">
<xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
</driver>
</drivers>
</datasources>
・・・
⑤PostgreSQLへの接続パラメータを定義するようにデータソース設定を変更する。
<subsystem xmlns="urn:jboss:domain:datasources:5.0">
<datasources>
・・・
<!-- ★コメントアウト
<datasource jndi-name="java:jboss/datasources/KeycloakDS" pool-name="KeycloakDS" enabled="true" use-java-context="true">
<connection-url>jdbc:h2:${jboss.server.data.dir}/keycloak;AUTO_SERVER=TRUE</connection-url>
<driver>h2</driver>
<security>
<user-name>sa</user-name>
<password>sa</password>
</security>
</datasource>
-->
<datasource jndi-name="java:jboss/datasources/KeycloakDS" pool-name="KeycloakDS" enabled="true" use-java-context="true">
<connection-url>jdbc:postgresql://localhost:5432/keycloak</connection-url>
<driver>postgresql</driver>
<pool>
<max-pool-size>20</max-pool-size>
</pool>
<security>
<user-name>loginuser</user-name>
<password>XXX</password>
</security>
</datasource>
<drivers>
<driver name="postgresql" module="org.postgresql">
<xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class>
</driver>
<driver name="h2" module="com.h2database.h2">
<xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
</driver>
</drivers>
</datasources>
</subsystem>
⑥Keycloakを再起動する。
⑦以下のURLにアクセスし、ユーザを作成した後、ログインできることを確認する。
http://localhost:8080/auth/
今回は、PostgreSQLを利用するように環境設定を変更する。
前提
・「http://memoyasu.blogspot.jp/2017/11/ssoosskeycloak.html」の手順でKeycloakが動作していること。
・PostgreSQLが動作していること。
・PostgreSQLのログインユーザを作成済みであること。
postgres=# CREATE USER loginuser WITH PASSWORD 'password' CREATEDB;
CREATE ROLE
・「keycloak」というデータベースを作成済みであること。
postgres=# CREATE DATABASE keycloak OWNER loginuser;
CREATE DATABASE
postgres=#
手順
①PostgreSQL用のJDBCドライバをダウンロードする。
今回は「postgresql-9.4.1212.jar」を利用する。
https://jdbc.postgresql.org/download.html
②ドライバJARをモジュールにパッケージ化し、このモジュールをサーバーにインストールする。
「modules\system\layers\keycloak」ディレクトリ配下に「org\postgresql\main」ディレクトリを作成する。
> mkdir modules\system\layers\keycloak\org\postgresql\main
> copy postgresql-9.4.1212.jar modules\system\layers\keycloak\org\postgresql\main
③サーバの設定プロファイルでJDBCドライバを利用するようにする。
「modules\system\layers\keycloak\org\postgresql\main」ディレクトリ配下にmodule.xmlを作成する。
<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.3" name="org.postgresql">
<resources>
<resource-root path="postgresql-9.4.1212.jar"/>
</resources>
<dependencies>
<module name="javax.api"/>
<module name="javax.transaction.api"/>
</dependencies>
</module>
➃PostgreSQLのJDBCドライバを使用するようにデータソース設定を変更する。
standaloneモードで動作している場合は「standalone/configuration/standalone.xml」を修正する。
・・・
<datasources>
・・・
<drivers>
<driver name="postgresql" module="org.postgresql"> ★追加
<xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class> ★追加
</driver> ★追加
<driver name="h2" module="com.h2database.h2">
<xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
</driver>
</drivers>
</datasources>
・・・
⑤PostgreSQLへの接続パラメータを定義するようにデータソース設定を変更する。
<subsystem xmlns="urn:jboss:domain:datasources:5.0">
<datasources>
・・・
<!-- ★コメントアウト
<datasource jndi-name="java:jboss/datasources/KeycloakDS" pool-name="KeycloakDS" enabled="true" use-java-context="true">
<connection-url>jdbc:h2:${jboss.server.data.dir}/keycloak;AUTO_SERVER=TRUE</connection-url>
<driver>h2</driver>
<security>
<user-name>sa</user-name>
<password>sa</password>
</security>
</datasource>
-->
<datasource jndi-name="java:jboss/datasources/KeycloakDS" pool-name="KeycloakDS" enabled="true" use-java-context="true">
<connection-url>jdbc:postgresql://localhost:5432/keycloak</connection-url>
<driver>postgresql</driver>
<pool>
<max-pool-size>20</max-pool-size>
</pool>
<security>
<user-name>loginuser</user-name>
<password>XXX</password>
</security>
</datasource>
<drivers>
<driver name="postgresql" module="org.postgresql">
<xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class>
</driver>
<driver name="h2" module="com.h2database.h2">
<xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
</driver>
</drivers>
</datasources>
</subsystem>
⑥Keycloakを再起動する。
⑦以下のURLにアクセスし、ユーザを作成した後、ログインできることを確認する。
http://localhost:8080/auth/
<補足>
・PostgreSQLのテーブルを参照し、作成したユーザが表示されることを確認してみる。
keycloak=>
keycloak=> select * from user_entity;
id | email | email_constraint | email_verified | enabled | federation_link | first_name | last_name | realm_id | username | created_timestamp | service_account_client_link | not_before --------------------------------------+-------+--------------------------------------+----------------+---------+-----------------+------------+-----------+----------+----------+-------------------+-----------------------------+------------ 721569fb-860e-4343-98a6-7da4e1810c5e | | 273582fe-df93-4c92-a80d-1dead0c0b192 | f | t | | | | master | test | 1510489536041 | | 0
(1 行)
SSOのOSSである「Keycloak」を動かしてみる
要件
・Java 8 JDK
・RAM: 512MB以上
・ディスク容量: 1GB以上
・データベース:Postgres, MySql, Oracle, etc
★クラスターで運用したい場合はRDBの冗長化が必須。
・Linux OSでインストールする場合、十分なエントロピーを確保するため、/dev/urandomを利用すること。
・Keycloackでは、standaloneモードとクラスターモードをサポートしている。今回はstandaloneモードで起動する。
・standaloneモードで起動すると、バンドルしているWildFlyが起動する。
・デフォルトのDBは、バンドルしているH2が利用される。
インストール手順
①以下のサイトからKeyclockの資材をダウンロードする。
(3.4.0が最新版)
https://downloads.jboss.org/keycloak/3.4.0.Final/keycloak-3.4.0.Final.zip
②「keycloak-3.4.0.Final.zip 」を解凍する。
③keycloakを起動する。
> cd C:\Users\bushidoyasu\Downloads\keycloak-3.4.0.Final\keycloak-3.4.0.Final\bin
> standalone.bat
上記のバッチを実行すると、デフォルトではポート9990で起動する。
➃管理ユーザを作成する。
C:\Users\bushidoyasu\Downloads\keycloak-3.4.0.Final\keycloak-3.4.0.Final\bin>add-user.bat
What type of user do you wish to add?
a) Management User (mgmt-users.properties)
b) Application User (application-users.properties)
(a): a
Enter the details of the new user to add.
Using realm 'ManagementRealm' as discovered from the existing property files.
Username : keycloakadmin
Password recommendations are listed below. To modify these restrictions edit the add-user.properties configuration file.
- The password should be different from the username
- The password should not be one of the following restricted values {root, admin, administrator}
- The password should contain at least 8 characters, 1 alphabetic character(s), 1 digit(s), 1 non-alphanumeric symbol(s)
Password :
Re-enter Password :
What groups do you want this user to belong to? (Please enter a comma separated list, or leave blank for none)[ ]:
About to add user 'keycloakadmin' for realm 'ManagementRealm'
Is this correct yes/no? yes
Added user 'keycloakadmin' to file 'C:\Users\bushidoyasu\Downloads\keycloak-3.4.0.Final\keycloak-3.4.0.Final\standalone\configuration\mgmt-users.properties'
Added user 'keycloakadmin' to file 'C:\Users\bushidoyasu\Downloads\keycloak-3.4.0.Final\keycloak-3.4.0.Final\domain\configuration\mgmt-users.properties'
Added user 'keycloakadmin' with groups to file 'C:\Users\bushidoyasu\Downloads\keycloak-3.4.0.Final\keycloak-3.4.0.Final\standalone\configuration\mgmt-groups.properties'
Added user 'keycloakadmin' with groups to file 'C:\Users\bushidoyasu\Downloads\keycloak-3.4.0.Final\keycloak-3.4.0.Final\domain\configuration\mgmt-groups.properties'
Is this new user going to be used for one AS process to connect to another AS process?
e.g. for a slave host controller connecting to the master or for a Remoting connection for server to server EJB calls.
yes/no? yes
To represent the user add the following to the server-identities definition <secret value="XXX" />
続行するには何かキーを押してください . . .
⑤以下のURLにアクセスすると、BASIC認証が求められる。
http://localhost:9990/console/App.html
BASIC認証に成功すると、以下の管理画面が表示される。
⑥Keycloak用の管理ユーザを作成する。
>add-user-keycloak.bat -u test -p password
Added 'test' to 'C:\Users\bushidoyasu\Downloads\keycloak-3.4.0.Final\keycloak-3.4.0.Final\standalone\configuration\keycloak-add-user.json', restart server to load user
⑦Keycloakを再起動する。
⑧以下のURLにアクセスし、ログインできることを確認する。
<補足>
H2コンソールを起動し、データベースの中身をみてみる。
> java -cp ..\modules\system\layers\base\com\h2database\h2\main\h2-1.4.193.jar org.h2.tools.Server -webAllowOthers
keycloakというデータベースをのぞいてみても、何もテーブルが作られていない。。。
・Java 8 JDK
・RAM: 512MB以上
・ディスク容量: 1GB以上
・データベース:Postgres, MySql, Oracle, etc
★クラスターで運用したい場合はRDBの冗長化が必須。
・Linux OSでインストールする場合、十分なエントロピーを確保するため、/dev/urandomを利用すること。
・Keycloackでは、standaloneモードとクラスターモードをサポートしている。今回はstandaloneモードで起動する。
・standaloneモードで起動すると、バンドルしているWildFlyが起動する。
・デフォルトのDBは、バンドルしているH2が利用される。
インストール手順
①以下のサイトからKeyclockの資材をダウンロードする。
(3.4.0が最新版)
https://downloads.jboss.org/keycloak/3.4.0.Final/keycloak-3.4.0.Final.zip
②「keycloak-3.4.0.Final.zip 」を解凍する。
③keycloakを起動する。
> cd C:\Users\bushidoyasu\Downloads\keycloak-3.4.0.Final\keycloak-3.4.0.Final\bin
> standalone.bat
上記のバッチを実行すると、デフォルトではポート9990で起動する。
➃管理ユーザを作成する。
C:\Users\bushidoyasu\Downloads\keycloak-3.4.0.Final\keycloak-3.4.0.Final\bin>add-user.bat
What type of user do you wish to add?
a) Management User (mgmt-users.properties)
b) Application User (application-users.properties)
(a): a
Enter the details of the new user to add.
Using realm 'ManagementRealm' as discovered from the existing property files.
Username : keycloakadmin
Password recommendations are listed below. To modify these restrictions edit the add-user.properties configuration file.
- The password should be different from the username
- The password should not be one of the following restricted values {root, admin, administrator}
- The password should contain at least 8 characters, 1 alphabetic character(s), 1 digit(s), 1 non-alphanumeric symbol(s)
Password :
Re-enter Password :
What groups do you want this user to belong to? (Please enter a comma separated list, or leave blank for none)[ ]:
About to add user 'keycloakadmin' for realm 'ManagementRealm'
Is this correct yes/no? yes
Added user 'keycloakadmin' to file 'C:\Users\bushidoyasu\Downloads\keycloak-3.4.0.Final\keycloak-3.4.0.Final\standalone\configuration\mgmt-users.properties'
Added user 'keycloakadmin' to file 'C:\Users\bushidoyasu\Downloads\keycloak-3.4.0.Final\keycloak-3.4.0.Final\domain\configuration\mgmt-users.properties'
Added user 'keycloakadmin' with groups to file 'C:\Users\bushidoyasu\Downloads\keycloak-3.4.0.Final\keycloak-3.4.0.Final\standalone\configuration\mgmt-groups.properties'
Added user 'keycloakadmin' with groups to file 'C:\Users\bushidoyasu\Downloads\keycloak-3.4.0.Final\keycloak-3.4.0.Final\domain\configuration\mgmt-groups.properties'
Is this new user going to be used for one AS process to connect to another AS process?
e.g. for a slave host controller connecting to the master or for a Remoting connection for server to server EJB calls.
yes/no? yes
To represent the user add the following to the server-identities definition <secret value="XXX" />
続行するには何かキーを押してください . . .
⑤以下のURLにアクセスすると、BASIC認証が求められる。
http://localhost:9990/console/App.html
BASIC認証に成功すると、以下の管理画面が表示される。
⑥Keycloak用の管理ユーザを作成する。
>add-user-keycloak.bat -u test -p password
Added 'test' to 'C:\Users\bushidoyasu\Downloads\keycloak-3.4.0.Final\keycloak-3.4.0.Final\standalone\configuration\keycloak-add-user.json', restart server to load user
⑦Keycloakを再起動する。
⑧以下のURLにアクセスし、ログインできることを確認する。
<補足>
H2コンソールを起動し、データベースの中身をみてみる。
> java -cp ..\modules\system\layers\base\com\h2database\h2\main\h2-1.4.193.jar org.h2.tools.Server -webAllowOthers
keycloakというデータベースをのぞいてみても、何もテーブルが作られていない。。。
Hyperledger Fabric v1.1.0-preview ソースからdockerイメージをビルドする。
Fabric v1.1.0-previewをソースからdockerイメージをビルドする手順。
①FabricとFabric-caのソース一式をクローンする。
# git clone -b v1.1.0-preview https://github.com/hyperledger/fabric.git
# git clone -b v1.1.0-preview https://github.com/hyperledger/fabric-ca.git
# mkdir -p /opt/fabric/src/github.com/hyperledger/
# cp -rf fabric /opt/fabric/src/github.com/hyperledger
# cp -rf fabric-ca /opt/fabric/src/github.com/hyperledger
②環境変数を設定する。
# export GOPATH=/opt/fabric
# export GOHONE=/opt/fabric
③Fabricのdockerイメージを作成する。
# cd $GOHOME/src/github.com/hyperledger/fabric/
# make docker
以下のエラーが発生した。。。
・・・
+ wget -q http://www.apache.org/dist/zookeeper/zookeeper-3.4.9/zookeeper-3.4.9.tar.gz
The command '/bin/sh -c set -x && cd / && wget -q "http://www.apache.org/dist/zookeeper/$DISTRO_NAME/$DISTRO_NAME.tar.gz" && tar -xzf "$DISTRO_NAME.tar.gz" && mv "$DISTRO_NAME/conf/"* "$ZOO_CONF_DIR" && rm -r "$DISTRO_NAME.tar.gz"' returned a non-zero code: 8
Makefile:205: recipe for target 'build/image/zookeeper/.dummy-x86_64-0.7.0-snapshot-c7b3fe0' failed
http://www.apache.org/dist/zookeeper にアクセスしてみると
zookeeper-3.4.9.tar.gzがなく、バージョンが3.4.10以降しかなかった。。。
とりあえず、3.4.10でダウンロードするようにDockerfileを修正する。
# vi build/image/zookeeper/Dockerfile
★以下を変更。
ARG DISTRO_NAME=zookeeper-3.4.10
# make docker
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hyperledger/fabric-tools latest fdd9c70d1af3 27 seconds ago 1.42GB
hyperledger/fabric-tools x86_64-1.1.0-preview fdd9c70d1af3 27 seconds ago 1.42GB
hyperledger/fabric-couchdb latest 866f7fc6e93e 35 seconds ago 1.58GB
hyperledger/fabric-couchdb x86_64-1.1.0-preview 866f7fc6e93e 35 seconds ago 1.58GB
hyperledger/fabric-kafka latest e9f5f8d5f1d4 About a minute ago 1.37GB
hyperledger/fabric-kafka x86_64-1.1.0-preview e9f5f8d5f1d4 About a minute ago 1.37GB
hyperledger/fabric-zookeeper latest f9fe6dffc638 2 minutes ago 1.39GB
hyperledger/fabric-zookeeper x86_64-1.1.0-preview f9fe6dffc638 2 minutes ago 1.39GB
<none> <none> d72c30ec06cb 3 minutes ago 1.33GB
hyperledger/fabric-testenv latest 6bf3e40d7f08 3 minutes ago 1.52GB
hyperledger/fabric-testenv x86_64-1.1.0-preview 6bf3e40d7f08 3 minutes ago 1.52GB
hyperledger/fabric-buildenv latest 0824a7249f44 3 minutes ago 1.41GB
hyperledger/fabric-buildenv x86_64-1.1.0-preview 0824a7249f44 3 minutes ago 1.41GB
hyperledger/fabric-orderer latest 76603b1f0f3e 4 minutes ago 159MB
hyperledger/fabric-orderer x86_64-1.1.0-preview 76603b1f0f3e 4 minutes ago 159MB
hyperledger/fabric-peer latest fcc5a0e8ea59 4 minutes ago 165MB
hyperledger/fabric-peer x86_64-1.1.0-preview fcc5a0e8ea59 4 minutes ago 165MB
hyperledger/fabric-javaenv latest fb70e2629d32 4 minutes ago 1.49GB
hyperledger/fabric-javaenv x86_64-1.1.0-preview fb70e2629d32 4 minutes ago 1.49GB
hyperledger/fabric-ccenv latest 9203193f9935 5 minutes ago 1.35GB
hyperledger/fabric-ccenv x86_64-1.1.0-preview 9203193f9935 5 minutes ago 1.35GB
hyperledger/fabric-baseimage x86_64-0.4.2 76daf60aeff4 6 weeks ago 1.33GB
hyperledger/fabric-baseos x86_64-0.4.2 6be1916d236d 6 weeks ago 130MB
➃Fabric-caのdockerイメージを作成する。
# cd $GOHOME/src/github.com/hyperledger/fabric-ca/
# make docker
# docker images | grep fabric-ca
hyperledger/fabric-ca-tools latest 6164429ffed0 2 hours ago 1.5GB
hyperledger/fabric-ca-tools x86_64-1.1.0-preview 6164429ffed0 2 hours ago 1.5GB
hyperledger/fabric-ca-peer latest 13e583a4648b 2 hours ago 206MB
hyperledger/fabric-ca-peer x86_64-1.1.0-preview 13e583a4648b 2 hours ago 206MB
hyperledger/fabric-ca-orderer latest a88ff1f89153 2 hours ago 200MB
hyperledger/fabric-ca-orderer x86_64-1.1.0-preview a88ff1f89153 2 hours ago 200MB
hyperledger/fabric-ca latest 0a056a6cbdc1 2 hours ago 218MB
hyperledger/fabric-ca x86_64-1.1.0-preview 0a056a6cbdc1 2 hours ago 218MB
<補足>
チェーンコードのコンテナ作成時に利用されるfabric-ccenvにおいて、shimのソースが解凍されていない問題が発生した。
fabric-ccenvコンテナを作成してログインし、確認してみてみる。
root@7c26bd340479:/opt/gopath# ls -l $GOPATH/src/
total 0
-rw-r--r-- 1 root root 0 Nov 12 14:36 goshim.tar.bz2
解凍されないまま、tar.bz2ファイルがある。
しかも、0バイトになっている。。。。
上記の事象が発生した場合は、make peerでコンパイルしてgoshim.tar.bz2を作成した後、所定の位置にコピーする。
その後、make docker-clean&make dockerを実行する。
# apt-get install libltdl-dev
# make peer
# cp build/goshim.tar.bz2 build/image/ccenv/payload/
# make docker-clean
# make docker
①FabricとFabric-caのソース一式をクローンする。
# git clone -b v1.1.0-preview https://github.com/hyperledger/fabric.git
# git clone -b v1.1.0-preview https://github.com/hyperledger/fabric-ca.git
# mkdir -p /opt/fabric/src/github.com/hyperledger/
# cp -rf fabric /opt/fabric/src/github.com/hyperledger
# cp -rf fabric-ca /opt/fabric/src/github.com/hyperledger
②環境変数を設定する。
# export GOPATH=/opt/fabric
# export GOHONE=/opt/fabric
③Fabricのdockerイメージを作成する。
# cd $GOHOME/src/github.com/hyperledger/fabric/
# make docker
以下のエラーが発生した。。。
・・・
+ wget -q http://www.apache.org/dist/zookeeper/zookeeper-3.4.9/zookeeper-3.4.9.tar.gz
The command '/bin/sh -c set -x && cd / && wget -q "http://www.apache.org/dist/zookeeper/$DISTRO_NAME/$DISTRO_NAME.tar.gz" && tar -xzf "$DISTRO_NAME.tar.gz" && mv "$DISTRO_NAME/conf/"* "$ZOO_CONF_DIR" && rm -r "$DISTRO_NAME.tar.gz"' returned a non-zero code: 8
Makefile:205: recipe for target 'build/image/zookeeper/.dummy-x86_64-0.7.0-snapshot-c7b3fe0' failed
http://www.apache.org/dist/zookeeper にアクセスしてみると
zookeeper-3.4.9.tar.gzがなく、バージョンが3.4.10以降しかなかった。。。
とりあえず、3.4.10でダウンロードするようにDockerfileを修正する。
# vi build/image/zookeeper/Dockerfile
★以下を変更。
ARG DISTRO_NAME=zookeeper-3.4.10
# make docker
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hyperledger/fabric-tools latest fdd9c70d1af3 27 seconds ago 1.42GB
hyperledger/fabric-tools x86_64-1.1.0-preview fdd9c70d1af3 27 seconds ago 1.42GB
hyperledger/fabric-couchdb latest 866f7fc6e93e 35 seconds ago 1.58GB
hyperledger/fabric-couchdb x86_64-1.1.0-preview 866f7fc6e93e 35 seconds ago 1.58GB
hyperledger/fabric-kafka latest e9f5f8d5f1d4 About a minute ago 1.37GB
hyperledger/fabric-kafka x86_64-1.1.0-preview e9f5f8d5f1d4 About a minute ago 1.37GB
hyperledger/fabric-zookeeper latest f9fe6dffc638 2 minutes ago 1.39GB
hyperledger/fabric-zookeeper x86_64-1.1.0-preview f9fe6dffc638 2 minutes ago 1.39GB
<none> <none> d72c30ec06cb 3 minutes ago 1.33GB
hyperledger/fabric-testenv latest 6bf3e40d7f08 3 minutes ago 1.52GB
hyperledger/fabric-testenv x86_64-1.1.0-preview 6bf3e40d7f08 3 minutes ago 1.52GB
hyperledger/fabric-buildenv latest 0824a7249f44 3 minutes ago 1.41GB
hyperledger/fabric-buildenv x86_64-1.1.0-preview 0824a7249f44 3 minutes ago 1.41GB
hyperledger/fabric-orderer latest 76603b1f0f3e 4 minutes ago 159MB
hyperledger/fabric-orderer x86_64-1.1.0-preview 76603b1f0f3e 4 minutes ago 159MB
hyperledger/fabric-peer latest fcc5a0e8ea59 4 minutes ago 165MB
hyperledger/fabric-peer x86_64-1.1.0-preview fcc5a0e8ea59 4 minutes ago 165MB
hyperledger/fabric-javaenv latest fb70e2629d32 4 minutes ago 1.49GB
hyperledger/fabric-javaenv x86_64-1.1.0-preview fb70e2629d32 4 minutes ago 1.49GB
hyperledger/fabric-ccenv latest 9203193f9935 5 minutes ago 1.35GB
hyperledger/fabric-ccenv x86_64-1.1.0-preview 9203193f9935 5 minutes ago 1.35GB
hyperledger/fabric-baseimage x86_64-0.4.2 76daf60aeff4 6 weeks ago 1.33GB
hyperledger/fabric-baseos x86_64-0.4.2 6be1916d236d 6 weeks ago 130MB
➃Fabric-caのdockerイメージを作成する。
# cd $GOHOME/src/github.com/hyperledger/fabric-ca/
# make docker
# docker images | grep fabric-ca
hyperledger/fabric-ca-tools latest 6164429ffed0 2 hours ago 1.5GB
hyperledger/fabric-ca-tools x86_64-1.1.0-preview 6164429ffed0 2 hours ago 1.5GB
hyperledger/fabric-ca-peer latest 13e583a4648b 2 hours ago 206MB
hyperledger/fabric-ca-peer x86_64-1.1.0-preview 13e583a4648b 2 hours ago 206MB
hyperledger/fabric-ca-orderer latest a88ff1f89153 2 hours ago 200MB
hyperledger/fabric-ca-orderer x86_64-1.1.0-preview a88ff1f89153 2 hours ago 200MB
hyperledger/fabric-ca latest 0a056a6cbdc1 2 hours ago 218MB
hyperledger/fabric-ca x86_64-1.1.0-preview 0a056a6cbdc1 2 hours ago 218MB
<補足>
チェーンコードのコンテナ作成時に利用されるfabric-ccenvにおいて、shimのソースが解凍されていない問題が発生した。
fabric-ccenvコンテナを作成してログインし、確認してみてみる。
root@7c26bd340479:/opt/gopath# ls -l $GOPATH/src/
total 0
-rw-r--r-- 1 root root 0 Nov 12 14:36 goshim.tar.bz2
解凍されないまま、tar.bz2ファイルがある。
しかも、0バイトになっている。。。。
上記の事象が発生した場合は、make peerでコンパイルしてgoshim.tar.bz2を作成した後、所定の位置にコピーする。
その後、make docker-clean&make dockerを実行する。
# apt-get install libltdl-dev
# make peer
# cp build/goshim.tar.bz2 build/image/ccenv/payload/
# make docker-clean
# make docker
Docker 便利コマンドメモ
- dockerイメージ 全削除
# docker rmi -f $(docker images -q)
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
#
- dockerコンテナ 全削除
# docker rm -f $(docker ps -aq)
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
#
2017年11月3日金曜日
Hyperledger Fabric Exploreを動かしてみる
Hyperledger Fabric ExploreがFabric 1.0.0に対応したということなので動かしてみる。
1.要件
・nodejs 6.9.x
・mysql 5.7 以上
2.インストール手順
①blockchain-explore資材のダウンロード
# git clone https://github.com/hyperledger/blockchain-explorer.git
# cd blockchain-explorer
②MySQLのインストール
# sudo apt install mysql-server
※インストール中にrootのパスワードを設定する。
③MySQLにrootでログインできることを確認する。
# mysql -u root -p
Enter password: XXX
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.7.20-0ubuntu0.16.04.1 (Ubuntu)
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
➃MySQL用のデータベースを作成する。「fabricexplorer」というExplore専用のデータベースが作成される。
# mysql -u root -p < db/fabricexplorer.sql
Enter password: XXX
# vi config.json
★Fabricの環境にあわせて設定する
{
"host":"localhost",
"port":"8080", ★外部に公開するポート
"channelsList": ["mychannel"], ★チャネルのリストを設定
"GOPATH":"/usr/bin/go",
"keyValueStore":"/tmp/fabric-client-kvs",
"eventWaitTime":"30000",
"enableTls":false,
"users":[
{
"username":"admin", ★CA管理ユーザ
"secret":"XXX"
}
],
"mysql":{ ★MySQLの環境設定
"host":"127.0.0.1",
"port":"3306",
"database":"fabricexplorer",
"username":"root",
"passwd":"XXX"
}
}
# vi ./app/network-config.json
★以下を環境に合わせて修正する。
★TLS通信を利用する場合は「network-config-tls.json」を修正する。
{
"network-config": {
"orderer": [{
"url": "grpc://127.0.0.1:7050",
"server-hostname": "orderer0.example.com"
},{
"url": "grpc://127.0.0.1:8050",
"server-hostname": "orderer1.example.com"
},{
"url": "grpc://127.0.0.1:9050",
"server-hostname": "orderer2.example.com"
}],
"org1": {
"name": "peerOrg1",
"mspid": "Org1MSP",
"ca": "http://127.0.0.1:7054",
"peer1": {
"requests": "grpc://127.0.0.1:7051",
"events": "grpc://127.0.0.1:7053",
"server-hostname": "peer0.org1.example.com"
},
"peer2": {
"requests": "grpc://127.0.0.1:8051",
"events": "grpc://127.0.0.1:8053",
"server-hostname": "peer1.org1.example.com"
},
"admin": {
"key": "/fabric-docker-compose-svt/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore",
"cert": "/fabric-docker-compose-svt/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/signcerts"
}
},
"org2": {
"name": "peerOrg2",
"mspid": "Org2MSP",
"ca": "http://127.0.0.1:8054",
"peer1": {
"requests": "grpc://127.0.0.1:9051",
"events": "grpc://127.0.0.1:9053",
"server-hostname": "peer0.org2.example.com"
},
"peer2": {
"requests": "grpc://127.0.0.1:10051",
"events": "grpc://127.0.0.1:10053",
"server-hostname": "peer1.org2.example.com"
},
"admin": {
"key": "/fabric-docker-compose-svt/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/keystore",
"cert": "/fabric-docker-compose-svt/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/signcerts"
}
}
}
}
⑥ npmパッケージをインストールする。
# npm install
★失敗するときは、npm rebuild コマンドを実行し、全てリビルド。
⑦ 起動コマンドを実行する。
# ./start.sh
★ポート8080でnodeプロセスが起動する。
★停止したい場合は、pkill node コマンドを実行する。
★ログは同フォルダ配下のlog.logに出力される。
⑧ http://XXX.XXX.XXX.XXX:8080 にアクセスすると以下のようなダッシュボード画面が表示される。
★現状、認証機能はないため、だれでも閲覧可能である。
★PEERLISTに正しいPEER情報が表示されない。
★2つチャネルを作成しているのに、1つしかチャネルが表示されない。
1.要件
・nodejs 6.9.x
・mysql 5.7 以上
2.インストール手順
①blockchain-explore資材のダウンロード
# git clone https://github.com/hyperledger/blockchain-explorer.git
# cd blockchain-explorer
②MySQLのインストール
# sudo apt install mysql-server
※インストール中にrootのパスワードを設定する。
③MySQLにrootでログインできることを確認する。
# mysql -u root -p
Enter password: XXX
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.7.20-0ubuntu0.16.04.1 (Ubuntu)
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
➃MySQL用のデータベースを作成する。「fabricexplorer」というExplore専用のデータベースが作成される。
# mysql -u root -p < db/fabricexplorer.sql
Enter password: XXX
ue'
Password: eiMiKcDTWwyJ⑤Fabric向けの環境情報を設定する。
# vi config.json
★Fabricの環境にあわせて設定する
{
"host":"localhost",
"port":"8080", ★外部に公開するポート
"channelsList": ["mychannel"], ★チャネルのリストを設定
"GOPATH":"/usr/bin/go",
"keyValueStore":"/tmp/fabric-client-kvs",
"eventWaitTime":"30000",
"enableTls":false,
"users":[
{
"username":"admin", ★CA管理ユーザ
"secret":"XXX"
}
],
"mysql":{ ★MySQLの環境設定
"host":"127.0.0.1",
"port":"3306",
"database":"fabricexplorer",
"username":"root",
"passwd":"XXX"
}
}
# vi ./app/network-config.json
★以下を環境に合わせて修正する。
★TLS通信を利用する場合は「network-config-tls.json」を修正する。
{
"network-config": {
"orderer": [{
"url": "grpc://127.0.0.1:7050",
"server-hostname": "orderer0.example.com"
},{
"url": "grpc://127.0.0.1:8050",
"server-hostname": "orderer1.example.com"
},{
"url": "grpc://127.0.0.1:9050",
"server-hostname": "orderer2.example.com"
}],
"org1": {
"name": "peerOrg1",
"mspid": "Org1MSP",
"ca": "http://127.0.0.1:7054",
"peer1": {
"requests": "grpc://127.0.0.1:7051",
"events": "grpc://127.0.0.1:7053",
"server-hostname": "peer0.org1.example.com"
},
"peer2": {
"requests": "grpc://127.0.0.1:8051",
"events": "grpc://127.0.0.1:8053",
"server-hostname": "peer1.org1.example.com"
},
"admin": {
"key": "/fabric-docker-compose-svt/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore",
"cert": "/fabric-docker-compose-svt/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/signcerts"
}
},
"org2": {
"name": "peerOrg2",
"mspid": "Org2MSP",
"ca": "http://127.0.0.1:8054",
"peer1": {
"requests": "grpc://127.0.0.1:9051",
"events": "grpc://127.0.0.1:9053",
"server-hostname": "peer0.org2.example.com"
},
"peer2": {
"requests": "grpc://127.0.0.1:10051",
"events": "grpc://127.0.0.1:10053",
"server-hostname": "peer1.org2.example.com"
},
"admin": {
"key": "/fabric-docker-compose-svt/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/keystore",
"cert": "/fabric-docker-compose-svt/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/signcerts"
}
}
}
}
⑥ npmパッケージをインストールする。
# npm install
★失敗するときは、npm rebuild コマンドを実行し、全てリビルド。
⑦ 起動コマンドを実行する。
# ./start.sh
★ポート8080でnodeプロセスが起動する。
★停止したい場合は、pkill node コマンドを実行する。
★ログは同フォルダ配下のlog.logに出力される。
⑧ http://XXX.XXX.XXX.XXX:8080 にアクセスすると以下のようなダッシュボード画面が表示される。
★現状、認証機能はないため、だれでも閲覧可能である。
★PEERLISTに正しいPEER情報が表示されない。
★2つチャネルを作成しているのに、1つしかチャネルが表示されない。
2017年11月2日木曜日
Hyperledger Fabric CAのDBの中身をみてみる
Fabric CAは、デフォルトではSqlite3にユーザ情報や証明書情報が格納される。
Sqlite3のテーブルには実際にどんな情報が格納されているかを確認してみる。
①(事前準備)ホストOS側でsqlite3コマンドをインストールする。
# sudo apt-get install sqlite3 libsqlite3-dev
②CAコンテナからホストOSにsqlite3のdbファイルをコピーする
# sudo docker cp ca_peerOrg2:/etc/hyperledger/fabric-ca-server/fabric-ca-server.db ./fabric-ca-server.db
③sqlite3コマンドでテーブルを参照する。
★「users」、「certificates」、「affiliations」という3つのテーブルが存在している。
# sqlite3 fabric-ca-server.db
SQLite version 3.11.0 2016-02-15 17:29:24
Enter ".help" for usage hints.
sqlite>.table
affiliations certificates users
➃テーブルのスキーマ情報を参照する。
sqlite> .schema
CREATE TABLE users (id VARCHAR(64), token bytea, type VARCHAR(64), affiliation VARCHAR(64), attributes VARCHAR(256), state INTEGER, max_enrollments INTEGER);
CREATE TABLE affiliations (name VARCHAR(64) NOT NULL UNIQUE, prekey VARCHAR(64));
CREATE TABLE certificates (id VARCHAR(64), serial_number blob NOT NULL, authority_key_identifier blob NOT NULL, ca_label blob, status blob NOT NULL, reason int, expiry timestamp, revoked_at timestamp, pem blob NOT NULL, PRIMARY KEY(serial_number, authority_key_identifier));
■usersテーブル
id VARCHAR(64):ユーザID
token bytea:パスワード(暗号化されているっぽい)
type VARCHAR(64):ユーザ種別
affiliation VARCHAR(64):アフィリエーション情報
attributes VARCHAR(256):属性情報
state INTEGER:ステータス
max_enrollments INTEGER:最大ENROLLMENT数。デフォルトは-1(無制限)
■affiationsテーブル
name VARCHAR(64):アフィリエーション名
prekey VARCHAR(64):上位階層のアフィリエーション名
■certificatesテーブル
id VARCHAR(64):ユーザID
serial_number blob:証明書シリアル番号
authority_key_identifier blob:認証局鍵識別子(CA公開鍵のハッシュ値)
ca_label blob:CAの名前
status blob:証明書のステータス
reason int:証明書失効の理由
expiry timestamp:証明書有効期限
revoked_at timestamp:証明書失効日時
pem blob:証明書情報(PEM形式)
<実際の値>
■usersテーブル
sqlite> SELECT * FROM users;
admin|$2a$10$C5UFCN0iFS9PnMkhohevYu3uJPc9pGgY9rb1M77ZWM07gOUKnQ8z6|client||[{"name":"hf.Registrar.Roles","value":"client,user,peer,validator,auditor"},{"name":"hf.Registrar.DelegateRoles","value":"client,user,validator,auditor"},{"name":"hf.Revoker","value":"1"},{"name":"hf.IntermediateCA","value":"1"}]|0|-1
■affiationsテーブル
sqlite> SELECT * FROM affiliations;
org2|
org2.department1|org2
org1|
org1.department1|org1
org1.department2|org1
■certificatesテーブル
Sqlite3のテーブルには実際にどんな情報が格納されているかを確認してみる。
①(事前準備)ホストOS側でsqlite3コマンドをインストールする。
# sudo apt-get install sqlite3 libsqlite3-dev
②CAコンテナからホストOSにsqlite3のdbファイルをコピーする
# sudo docker cp ca_peerOrg2:/etc/hyperledger/fabric-ca-server/fabric-ca-server.db ./fabric-ca-server.db
③sqlite3コマンドでテーブルを参照する。
★「users」、「certificates」、「affiliations」という3つのテーブルが存在している。
# sqlite3 fabric-ca-server.db
SQLite version 3.11.0 2016-02-15 17:29:24
Enter ".help" for usage hints.
sqlite>.table
affiliations certificates users
➃テーブルのスキーマ情報を参照する。
sqlite> .schema
CREATE TABLE users (id VARCHAR(64), token bytea, type VARCHAR(64), affiliation VARCHAR(64), attributes VARCHAR(256), state INTEGER, max_enrollments INTEGER);
CREATE TABLE affiliations (name VARCHAR(64) NOT NULL UNIQUE, prekey VARCHAR(64));
CREATE TABLE certificates (id VARCHAR(64), serial_number blob NOT NULL, authority_key_identifier blob NOT NULL, ca_label blob, status blob NOT NULL, reason int, expiry timestamp, revoked_at timestamp, pem blob NOT NULL, PRIMARY KEY(serial_number, authority_key_identifier));
■usersテーブル
id VARCHAR(64):ユーザID
token bytea:パスワード(暗号化されているっぽい)
type VARCHAR(64):ユーザ種別
affiliation VARCHAR(64):アフィリエーション情報
attributes VARCHAR(256):属性情報
state INTEGER:ステータス
max_enrollments INTEGER:最大ENROLLMENT数。デフォルトは-1(無制限)
■affiationsテーブル
name VARCHAR(64):アフィリエーション名
prekey VARCHAR(64):上位階層のアフィリエーション名
■certificatesテーブル
id VARCHAR(64):ユーザID
serial_number blob:証明書シリアル番号
authority_key_identifier blob:認証局鍵識別子(CA公開鍵のハッシュ値)
ca_label blob:CAの名前
status blob:証明書のステータス
reason int:証明書失効の理由
expiry timestamp:証明書有効期限
revoked_at timestamp:証明書失効日時
pem blob:証明書情報(PEM形式)
<実際の値>
■usersテーブル
sqlite> SELECT * FROM users;
admin|$2a$10$C5UFCN0iFS9PnMkhohevYu3uJPc9pGgY9rb1M77ZWM07gOUKnQ8z6|client||[{"name":"hf.Registrar.Roles","value":"client,user,peer,validator,auditor"},{"name":"hf.Registrar.DelegateRoles","value":"client,user,validator,auditor"},{"name":"hf.Revoker","value":"1"},{"name":"hf.IntermediateCA","value":"1"}]|0|-1
■affiationsテーブル
sqlite> SELECT * FROM affiliations;
org2|
org2.department1|org2
org1|
org1.department1|org1
org1.department2|org1
■certificatesテーブル
2017年9月18日月曜日
Hyperledger Fabric v1.0.0 monitoring blockchainを使ってみる
EPCPノードの監視ツールであるmonitoring blockchainを使ってみる。
ざっとソースを眺めると以下のことが分かった。
・ダッシュボードはOSS Grafanaを利用している模様。
・WebサーバはOSS Spring Bootを利用している模様。
・Grafanaが利用するDBはOSS InfuxDBを利用している模様。
・EPCPノードやCAへの接続処理は、Fabric SDK for Javaは利用している模様。
以下の手順では、EPCPノード、OS、CAは構築済みの 前提。
ざっとソースを眺めると以下のことが分かった。
・ダッシュボードはOSS Grafanaを利用している模様。
・WebサーバはOSS Spring Bootを利用している模様。
・Grafanaが利用するDBはOSS InfuxDBを利用している模様。
・EPCPノードやCAへの接続処理は、Fabric SDK for Javaは利用している模様。
以下の手順では、EPCPノード、OS、CAは構築済みの 前提。
- monitoring blockchainのDockerコンテナをPULLする。
# docker pull blockchainmonitoring/blockchain-monitoring:latest - Dockerコンテナがダウンロードされたことを確認する。
# docker images | grep monitoring
blockchainmonitoring/blockchain-monitoring latest f44f980e709e 35 hours ago 1.1GB - docker-compose.yamlを準備する。
- Fabric向けのネットワーク設定ファイル(net-config.yaml)を準備する。
MSPの設定やCAやEPCPノードのURLを設定する。また、管理ユーザであるadminのprivkeyには秘密鍵、certには公開鍵証明書を指定する。 - FABRIC_NET_CONFIGとCERTS_ADMIN環境変数のパスを設定する。
# export FABRIC_NET_CONFIG=/root/monitoring/net-config.yaml
# export CERTS_ADMIN=/root/monitoring/certs - docker-composeコマンドでコンテナを作成する。
# docker-compose up - 以下のURLにアクセスする(XXXは環境に合わせて指定する)。
http://XXX.XXX.XXX.XXX:3000 - ダッシュボード画面が表示されることを確認する。
EPCPのステータス(UP/DOWN)、チャネル情報、配備されたチェーンコードを確認することができる。INVOKE/QUERYの実行履歴等も表示されるはずだがされていない。。。時間があったらしらべてみよう。
2017年7月23日日曜日
Spring Tool Suite (STS)をつかってみる
統合開発環境に Spring Tool Suite(STS)を利用し、 Spring MVC + Spring Boot のWebアプリケーションを動かしてみます。
WebサーバはTomcatを使います(Tomcatがインストール済みであることが前提)
<Tomcatのダウンロード先>
http://tomcat.apache.org/download-80.cgi
WebサーバはTomcatを使います(Tomcatがインストール済みであることが前提)
<Tomcatのダウンロード先>
http://tomcat.apache.org/download-80.cgi
- 以下のサイトからSTSをダウンロードする。
https://spring.io/tools/sts/all - ZIPファイルを解凍する。「STS.exe」を実行し、STSを起動する。
- File メニュー > New > Spring Legacy Project をクリックする。
Project nameは「WebApp」、Templates:は「Simple Spring Web Maven」を選択。「Finish」ボタンを押下する。 - 作成したプロジェクト「WebApp」を右クリックし、Maven > Update Project… をクリックする。
- 作成したプロジェクト「WebApp」を右クリックし、Run As > 9 Maven install をクリックする。
- Helpメニュー>Eclipse MarketPlaceを選択する。Eclipse Tomcatで検索し、Tomcatプラグラインをインストールする。
- Windowメニュー>Preferenceを選択し、Tomcat環境情報を設定する。
- 「http://127.0.0.1:8080/WebApp/」にアクセスし、以下の画面が表示されることを確認する。
Hyperdeger Fabric 1.0.0付属のサンプルコードを動かしてみる
Hyperdeger Fabric 1.0.0付属のサンプルコードを動かしてみます。
サンプルコードのイメージ図
(https://hyperledger-fabric.readthedocs.io/en/latest/write_first_app.htmlより抜粋)

query.jsソースをのぞいてみると、だいたい以下のことを実行している。
ユーザID'PeerAdmin’を利用する。チャネル名'mychannel'を指定する。また、チェーンコードID'fabcar'を指定して、7051ポートにアクセスする
var options = {
wallet_path: path.join(__dirname, './creds'),
user_id: 'PeerAdmin',
channel_id: 'mychannel',
chaincode_id: 'fabcar',
network_url: 'grpc://localhost:7051',
};
Fabric Client SDKを呼び出し、認証に必要なKeyValueStoreを作成する。
client = new hfc();
return hfc.newDefaultKeyValueStore({ path: options.wallet_path });
チャネルを作成し、Peerノードに追加する。
channel = client.newChannel(options.channel_id);
channel.addPeer(client.newPeer(options.network_url));
トランザクションIDを生成し、'queryAllCars'という関数を呼び出す。
var transaction_id = client.newTransactionID();
console.log("Assigning transaction_id: ", transaction_id._transaction_id);
// queryCar - requires 1 argument, ex: args: ['CAR4'],
// queryAllCars - requires no arguments , ex: args: [''],
const request = {
chaincodeId: options.chaincode_id,
txId: transaction_id,
fcn: 'queryAllCars',
args: ['']
};
return channel.queryByChaincode(request);
サンプルコードのイメージ図
(https://hyperledger-fabric.readthedocs.io/en/latest/write_first_app.htmlより抜粋)
- ブロックチェーンネットワークの分散台帳に書き込むには、スマートコントラクトが必要。
- 業務側のアプリケーションは、Fabricのネットワークエンドポイントにアクセスし、スマートコンストラクトを実行する
- サンプルでは、台帳として車情報を管理し、アプリケーションに返す
- 言語はJavaScriptを利用
- サンプルのダウンロード
# git clone https://github.com/hyperledger/fabric-samples.git
# cd fabric-samples/fabcar
# ls
creds invoke.js package.json query.js startFabric.sh - startFabric.shの実行
#./startFabric.sh
このシェルを実行すると、サンプルを動かす環境を自動的に構築してくれる。
シェルの中身をみてみると、だいたい以下のことを実行している。
・まず最初に、必要なDockerイメージのダウンロード
・Docker-composeでDockerコンテナの立ち上げ。以下の4つのコンテナを作成している。
Creating orderer.example.com
Creating ca.example.com
Creating couchdb
Creating peer0.org1.example.com
・ブロックチェーンネットワークを構成するチャネルの作成
・「peer0.org1.example.com」というノードをチャネルへ追加
・CLIコンテナの作成
・サンプルチェーンコードのインストール
・サンプルチェーンコードのイニシエト
・サンプルチェーンコードの実行
docker psで確認してみると、以下のコンテナが起動されている。 - fabric-samples/fabcar配下で以下のコマンドを実行し、必要なパッケージをダウンロード
# npm install - クエリーから実行してみる。10データ分の車情報を取得できる。
query.jsソースをのぞいてみると、だいたい以下のことを実行している。
ユーザID'PeerAdmin’を利用する。チャネル名'mychannel'を指定する。また、チェーンコードID'fabcar'を指定して、7051ポートにアクセスする
var options = {
wallet_path: path.join(__dirname, './creds'),
user_id: 'PeerAdmin',
channel_id: 'mychannel',
chaincode_id: 'fabcar',
network_url: 'grpc://localhost:7051',
};
Fabric Client SDKを呼び出し、認証に必要なKeyValueStoreを作成する。
client = new hfc();
return hfc.newDefaultKeyValueStore({ path: options.wallet_path });
チャネルを作成し、Peerノードに追加する。
channel = client.newChannel(options.channel_id);
channel.addPeer(client.newPeer(options.network_url));
トランザクションIDを生成し、'queryAllCars'という関数を呼び出す。
var transaction_id = client.newTransactionID();
console.log("Assigning transaction_id: ", transaction_id._transaction_id);
// queryCar - requires 1 argument, ex: args: ['CAR4'],
// queryAllCars - requires no arguments , ex: args: [''],
const request = {
chaincodeId: options.chaincode_id,
txId: transaction_id,
fcn: 'queryAllCars',
args: ['']
};
return channel.queryByChaincode(request);
登録:
投稿 (Atom)