Fabric 环境安装

Fabric 环境安装

我安装的时候遇到很多问题,也不会解决,我就是将fabric文件夹删除重新下,然后一步步再按,反正最后是能运行。

官网的安装方法http://hyperledger-fabric.readthedocs.io/en/latest/build_network.html

1.Go语言安装

sudo apt-get install golang

sudo vim ~/.bashrc   

结尾输入以下

export GOBIN=$GOROOT/bin
export PATH=$PATH:$GOBIN
export GOPATH=$HOME/MyGo

重启终端输入go env 查看配置是否成功

<!--[if gte vml 1]><v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"> <v:stroke joinstyle="miter"/> <v:formulas> <v:f eqn="if lineDrawn pixelLineWidth 0"/> <v:f eqn="sum @0 1 0"/> <v:f eqn="sum 0 0 @1"/> <v:f eqn="prod @2 1 2"/> <v:f eqn="prod @3 21600 pixelWidth"/> <v:f eqn="prod @3 21600 pixelHeight"/> <v:f eqn="sum @0 0 1"/> <v:f eqn="prod @6 1 2"/> <v:f eqn="prod @7 21600 pixelWidth"/> <v:f eqn="sum @8 21600 0"/> <v:f eqn="prod @7 21600 pixelHeight"/> <v:f eqn="sum @10 21600 0"/> </v:formulas> <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/> <o:lock v:ext="edit" aspectratio="t"/> </v:shapetype><v:shape id="图片_x0020_6" o:spid="_x0000_i1043" type="#_x0000_t75" style='width:414.75pt;height:249.75pt;visibility:visible;mso-wrap-style:square'> <v:imagedata src="file:///C:\Users\ADMINI~1.BJX\AppData\Local\Temp\msohtmlclip1\01\clip_image001.png" o:title=""/> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->

具体环境变量配置参考window上的

2.Docker安装

扫描二维码关注公众号,回复: 221713 查看本文章

sudo apt install docker.io   //docker安装

sudo usermod -aG docker $USER   //更改用户权限

sudo service docker start   //启动docker

chmod 777 /var/run/docker.sock  //进入root操作

 

3.Docker-compose安装

sudo apt install python-pip

sudo pip install docker-compose

4.Fabric安装

4.1.Fabric源码下载

先在GOPATH路径下建立以下文件夹

<!--[if gte vml 1]><v:shape id="图片_x0020_8" o:spid="_x0000_i1042" type="#_x0000_t75" style='width:320.25pt;height:31.5pt;visibility:visible;mso-wrap-style:square'> <v:imagedata src="file:///C:\Users\ADMINI~1.BJX\AppData\Local\Temp\msohtmlclip1\01\clip_image003.png" o:title=""/> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->

进入hyperLedger文件夹下在终端输入:

git clone https://github.com/hyperledger/fabric.git  //github上下载fabric

下载完成后hyperLedger文件夹下会多出一个fabric文件夹

4.2. Fabric Docker镜像的下载

进入如下文件夹

<!--[if gte vml 1]><v:shape id="图片_x0020_9" o:spid="_x0000_i1041" type="#_x0000_t75" style='width:369pt;height:33.75pt;visibility:visible;mso-wrap-style:square'> <v:imagedata src="file:///C:\Users\ADMINI~1.BJX\AppData\Local\Temp\msohtmlclip1\01\clip_image005.png" o:title=""/> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->

输入

source download-dockerimages.sh -c x86_64-1.0.0 -f x86_64-1.0.0

文件较大,等待

下载完成后输入  docker images  可查看下载好的镜像

<!--[if gte vml 1]><v:shape id="图片_x0020_10" o:spid="_x0000_i1040" type="#_x0000_t75" style='width:414.75pt;height:198.75pt;visibility:visible;mso-wrap-style:square'> <v:imagedata src="file:///C:\Users\ADMINI~1.BJX\AppData\Local\Temp\msohtmlclip1\01\clip_image007.png" o:title=""/> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->

4.3. 启动Fabric网络并完成ChainCode的测试

依旧在e2e_cli文件夹下运行终端输入

./network_setup.sh up
正常运行完出现如下界面,其中运行内容参考hyperledger技术与应用一书

<!--[if gte vml 1]><v:shape id="图片_x0020_1" o:spid="_x0000_i1039" type="#_x0000_t75" style='width:414.75pt;height:185.25pt;visibility:visible;mso-wrap-style:square'> <v:imagedata src="file:///C:\Users\ADMINI~1.BJX\AppData\Local\Temp\msohtmlclip1\01\clip_image009.png" o:title=""/> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->

4.4. 测试Fabric网络

在官方例子中,channel名字是mychannel,链码的名字是mycc。我们首先进入CLI,我们重新打开一个命令行窗口,输入:

docker exec -it cli bash

查询a账户的余额:

peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'

可看出现在余额为90

 

 

 

<!--[if gte vml 1]><v:rect id="矩形_x0020_12" o:spid="_x0000_s1027" style='position:absolute;left:0;text-align:left; margin-left:.3pt;margin-top:95.5pt;width:69pt;height:9.75pt;z-index:251658240; visibility:visible;mso-wrap-style:square;mso-wrap-distance-left:9pt; mso-wrap-distance-top:0;mso-wrap-distance-right:9pt; mso-wrap-distance-bottom:0;mso-position-horizontal:absolute; mso-position-horizontal-relative:text;mso-position-vertical:absolute; mso-position-vertical-relative:text;v-text-anchor:middle' o:gfxdata="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 SwUGAAAAAAUABQBnAQAAnwwAAAAA " filled="f" strokecolor="red" strokeweight="2.25pt"/><![endif]--><!--[if !vml]--><!--[endif]--><!--[if gte vml 1]><v:shape id="图片_x0020_2" o:spid="_x0000_i1038" type="#_x0000_t75" style='width:414.75pt;height:119.25pt;visibility:visible;mso-wrap-style:square'> <v:imagedata src="file:///C:\Users\ADMINI~1.BJX\AppData\Local\Temp\msohtmlclip1\01\clip_image012.png" o:title=""/> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->

a账户的余额再转20元给b账户

peer chaincode invoke -o orderer.example.com:7050  --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem  -C mychannel -n mycc -c '{"Args":["invoke","a","b","20"]}'

<!--[if gte vml 1]><v:shape id="图片_x0020_3" o:spid="_x0000_i1037" type="#_x0000_t75" style='width:414.75pt;height:167.25pt;visibility:visible;mso-wrap-style:square'> <v:imagedata src="file:///C:\Users\ADMINI~1.BJX\AppData\Local\Temp\msohtmlclip1\01\clip_image014.png" o:title=""/> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->

再次查询a的余额

<!--[if gte vml 1]><v:rect id="矩形_x0020_13" o:spid="_x0000_s1026" style='position:absolute;left:0;text-align:left; margin-left:1.05pt;margin-top:92.65pt;width:69pt;height:9.75pt;z-index:251659264; visibility:visible;mso-wrap-style:square;mso-wrap-distance-left:9pt; mso-wrap-distance-top:0;mso-wrap-distance-right:9pt; mso-wrap-distance-bottom:0;mso-position-horizontal:absolute; mso-position-horizontal-relative:text;mso-position-vertical:absolute; mso-position-vertical-relative:text;v-text-anchor:middle' o:gfxdata="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 c1BLBQYAAAAABQAFAGcBAAChDAAAAAA= " filled="f" strokecolor="red" strokeweight="2.25pt"/><![endif]--><!--[if !vml]--><!--[endif]--><!--[if gte vml 1]><v:shape id="图片_x0020_4" o:spid="_x0000_i1036" type="#_x0000_t75" style='width:414.75pt;height:110.25pt;visibility:visible;mso-wrap-style:square'> <v:imagedata src="file:///C:\Users\ADMINI~1.BJX\AppData\Local\Temp\msohtmlclip1\01\clip_image017.png" o:title=""/> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->

4.5. 关闭fabric网络

依旧在e2e_cli文件夹下运行终端输入

./network_setup.sh down

 

<!--[if gte vml 1]><v:shape id="图片_x0020_5" o:spid="_x0000_i1035" type="#_x0000_t75" style='width:414.75pt;height:153pt;visibility:visible;mso-wrap-style:square'> <v:imagedata src="file:///C:\Users\ADMINI~1.BJX\AppData\Local\Temp\msohtmlclip1\01\clip_image019.png" o:title=""/> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->

5. 生成公私钥和证书

进入fabric文件夹下运行

make cryptogen

<!--[if gte vml 1]><v:shape id="图片_x0020_11" o:spid="_x0000_i1034" type="#_x0000_t75" style='width:414.75pt;height:93.75pt;visibility:visible;mso-wrap-style:square'> <v:imagedata src="file:///C:\Users\ADMINI~1.BJX\AppData\Local\Temp\msohtmlclip1\01\clip_image021.png" o:title=""/> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->

进入examples/e2e_cli/文件夹下运行
../../build/bin/cryptogen generate --config=./crypto-config.yaml

<!--[if gte vml 1]><v:shape id="图片_x0020_12" o:spid="_x0000_i1033" type="#_x0000_t75" style='width:414.75pt;height:42pt;visibility:visible;mso-wrap-style:square'> <v:imagedata src="file:///C:\Users\ADMINI~1.BJX\AppData\Local\Temp\msohtmlclip1\01\clip_image023.png" o:title=""/> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->

<!--[if !supportLists]-->6. <!--[endif]-->生成创世区块和Channel配置区块

进入fabric文件夹下运行

make configtxgen

<!--[if gte vml 1]><v:shape id="图片_x0020_13" o:spid="_x0000_i1032" type="#_x0000_t75" style='width:414.75pt;height:89.25pt;visibility:visible;mso-wrap-style:square'> <v:imagedata src="file:///C:\Users\ADMINI~1.BJX\AppData\Local\Temp\msohtmlclip1\01\clip_image025.png" o:title=""/> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->

6.1. 生成创世区块

进入examples/e2e_cli/文件夹下运行
../../build/bin/configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./channel-artifacts/genesis.block

6.2. 生成Channel配置区块

../../build/bin/configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID mychannel
 
../../build/bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID mychannel -asOrg Org1MSP
 
../../build/bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -channelID mychannel -asOrg Org2MSP
 
运行完后可在channel-artifacts文件夹中看见如下文件

<!--[if gte vml 1]><v:shape id="图片_x0020_15" o:spid="_x0000_i1031" type="#_x0000_t75" style='width:308.25pt;height:84.75pt;visibility:visible;mso-wrap-style:square'> <v:imagedata src="file:///C:\Users\ADMINI~1.BJX\AppData\Local\Temp\msohtmlclip1\01\clip_image027.png" o:title=""/> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->

<!--[if !supportLists]-->7. <!--[endif]-->配置Fabric环境的docker-compose文件

Orderer的配置是在base/docker-compose-base.yaml里面

Peer的配置是在base/docker-compose-base.yamlpeer-base.yaml里面

CLI在整个Fabric网络中扮演客户端的角色,我们在开发测试的时候可以用CLI来代替SDK,执行各种SDK能执行的操作。CLI会和Peer相连,把指令发送给对应的Peer执行。CLI的配置在docker-compose-cli.yaml

 

我们这里全部采用默认配置,只把CLI中的command: /bin/bash -c './scripts/script.sh ${CHANNEL_NAME}; sleep $TIMEOUT' 这行注释掉,后面我们手动执行。

 

我们要安装的ChainCode都是在fabric/examples/chaincode/go目录下,以后我们要开发自己的ChainCode,只需要把我们的代码复制到该目录即可

 

<!--[if !supportLists]-->8. <!--[endif]-->初始化Fabric环境

8.1. 启动Fabric环境的容器

docker-compose -f docker-compose-cli.yaml up -d

<!--[if gte vml 1]><v:shape id="图片_x0020_16" o:spid="_x0000_i1030" type="#_x0000_t75" style='width:414.75pt;height:165.75pt;visibility:visible;mso-wrap-style:square'> <v:imagedata src="file:///C:\Users\ADMINI~1.BJX\AppData\Local\Temp\msohtmlclip1\01\clip_image029.png" o:title=""/> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->

8.2. 创建Channel

现在我们要进入cli容器内部,在里面创建Channel。先用以下命令进入CLI内部Bash

docker exec -it cli bash
 
创建Channel的命令是peer channel create,我们前面创建Channel的配置区块时,指定了Channel的名字是mychannel,那么这里我们必须创建同样名字的Channel
 
ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
 
peer channel create -o orderer.example.com:7050 -c mychannel -f ./channel-artifacts/channel.tx --tls true --cafile $ORDERER_CA

<!--[if gte vml 1]><v:shape id="图片_x0020_17" o:spid="_x0000_i1029" type="#_x0000_t75" style='width:414.75pt;height:33.75pt;visibility:visible;mso-wrap-style:square'> <v:imagedata src="file:///C:\Users\ADMINI~1.BJX\AppData\Local\Temp\msohtmlclip1\01\clip_image031.png" o:title="" croptop="55726f"/> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->

8.3. 各个Peer加入Channel

CLI默认连接的是peer0.org1  那么将其加入运行如下
peer channel join -b mychannel.block

其他的就需要修改CLI的环境变量,使其指向另外的Peer。比如我们要把peer1.org1加入mychannel

 

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 
 
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/[email protected]/msp 
 
CORE_PEER_ADDRESS=peer1.org1.example.com:7051
 
peer channel join -b mychannel.block
 

<!--[if gte vml 1]><v:shape id="图片_x0020_18" o:spid="_x0000_i1028" type="#_x0000_t75" style='width:414.75pt;height:42.75pt;visibility:visible;mso-wrap-style:square'> <v:imagedata src="file:///C:\Users\ADMINI~1.BJX\AppData\Local\Temp\msohtmlclip1\01\clip_image033.png" o:title=""/> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->

 
同样的方法,将peer0.org2加入mychannel
 
CORE_PEER_LOCALMSPID="Org2MSP" 
 
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_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/[email protected]/msp 
 
CORE_PEER_ADDRESS=peer0.org2.example.com:7051
 
peer channel join -b mychannel.block
 
最后把peer1.org2加入mychannel
 
CORE_PEER_LOCALMSPID="Org2MSP" 
 
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/ca.crt 
 
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/[email protected]/msp 
 
CORE_PEER_ADDRESS=peer1.org2.example.com:7051
 
peer channel join -b mychannel.block
 

<!--[if !supportLists]-->9. <!--[endif]-->链上代码的安装与运行

以上,整个Fabric网络和Channel都准备完毕,接下来我们来安装和运行ChainCode

链上代码的安装需要在各个相关的Peer上进行,对于我们现在这种Fabric网络,如果4Peer都想对Example02进行操作,那么就需要安装4次。

我们先切换到peer0.org1这个节点

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 
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/[email protected]/msp 
CORE_PEER_ADDRESS=peer0.org1.example.com:7051
 
使用peer chaincode install命令可以安装指定的ChainCode并对其命名:
 
peer chaincode install -n mycc -v 1.0 -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02

9.1 Instantiate ChainCode实例化链上代码

实例化链上代码主要是在Peer所在的机器上对前面安装好的链上代码进行包装,生成对应ChannelDocker镜像和Docker容器。并且在实例化时我们可以指定背书策略。我们运行以下命令完成实例化:

 

 

peer chaincode instantiate -o orderer.example.com:7050 --tls true --cafile $ORDERER_CA -C mychannel -n mycc -v 1.0 -c '{"Args":["init","a","100","b","200"]}' -P "OR      ('Org1MSP.member','Org2MSP.member')"
<!--[if gte vml 1]><v:shape
 id="图片_x0020_19" o:spid="_x0000_i1027" type="#_x0000_t75" style='width:415.5pt;
 height:39pt;visibility:visible;mso-wrap-style:square'>
 <v:imagedata src="file:///C:\Users\ADMINI~1.BJX\AppData\Local\Temp\msohtmlclip1\01\clip_image035.png"
  o:title=""/>
</v:shape><![endif]--><!--[if !vml]--><!--[endif]-->

9.2 在一个Peer上查询并发起交易

查询a账户

peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'
<!--[if gte vml 1]><v:shape
 id="图片_x0020_20" o:spid="_x0000_i1026" type="#_x0000_t75" style='width:415.5pt;
 height:57.75pt;visibility:visible;mso-wrap-style:square'>
 <v:imagedata src="file:///C:\Users\ADMINI~1.BJX\AppData\Local\Temp\msohtmlclip1\01\clip_image037.png"
  o:title=""/>
</v:shape><![endif]--><!--[if !vml]--><!--[endif]-->
a账户的10元转给b
peer chaincode invoke -o orderer.example.com:7050  --tls true --cafile $ORDERER_CA -C mychannel -n mycc -c '{"Args":["invoke","a","b","10"]}'

<!--[if gte vml 1]><v:shape id="图片_x0020_21" o:spid="_x0000_i1025" type="#_x0000_t75" style='width:414.75pt; height:47.25pt;visibility:visible;mso-wrap-style:square'> <v:imagedata src="file:///C:\Users\ADMINI~1.BJX\AppData\Local\Temp\msohtmlclip1\01\clip_image039.png" o:title=""/> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->

 

同样我们可以在org2节点下操作,首先给peer0.org2安装链上代码:

CORE_PEER_LOCALMSPID="Org2MSP"
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_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/[email protected]/msp 
CORE_PEER_ADDRESS=peer0.org2.example.com:7051
 
peer chaincode install -n mycc -v 1.0 -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02

 

其他操作同上

猜你喜欢

转载自weishiym.iteye.com/blog/2413553