安装过程参照Hyperledger Fabric的官方文档,文档地址:http://hyperledger-fabric.readthedocs.io/en/latest/prereqs.html
0x00 环境介绍,升级系统软件
搭建了一个vm,操作系统版本:
[root@fd240 ~]# cat /proc/version
Linux version 4.11.5-200.fc25.x86_64 (mockbuild@bkernel02.phx2.fedoraproject.org) (gcc version 6.3.1 20161221 (Red Hat 6.3.1-1) (GCC) ) #1 SMP Wed Jun 14 17:17:29 UTC 2017
搭建完毕,配置好网络后,升级系统软件:
[root@fd240 ~]# dnf update
0x01 安装依赖项
安装docker
此步骤参照官方文档:https://docs.docker.com/engine/installation/linux/fedora/#os-requirements
基本步骤如下:
添加docker的源:
$ sudo dnf config-manager \
--add-repo \
https://download.docker.com/linux/fedora/docker-ce.repo
更新dnf的包的索引:
sudo dnf makecache fast
安装:
sudo dnf install docker-ce
至少需要 Docker v1.12 以上版本。安装完之后检查版本号:
[root@fd240 ~]# docker -v
Docker version 17.03.1-ce, build c6d412e
然后安装docker-compose:
使用curl方式安装,安装过程中会出错,安装过程及解决办法参考我的这篇博客。
安装完毕后查看版本号:
[root@fd240 ~]# docker-compose version
docker-compose version 1.14.0-rc2, build 24dae73
docker-py version: 2.3.0
CPython version: 2.7.13
OpenSSL version: OpenSSL 1.0.1t 3 May 2016
安装go:
go的下载需要*,我安装的是这个版本:https://storage.googleapis.com/golang/go1.8.3.linux-amd64.tar.gz
下载完毕后,解压缩:
tar -C /usr/local -xzf go1.8.3.linux-amd64.tar.gz
解压缩完毕后,配置环境变量:
[root@fd240 ~]# vim /etc/profile
增加下列配置:
export PATH=$PATH:/usr/local/go/bin
export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin
保存退出后,使之生效:
source /etc/profile
安装node.js,目前只支持 6.9.x版本的node.js, 但是7.x不支持。
我安装的是这个版本:https://nodejs.org/dist/v6.11.0/node-v6.11.0.tar.gz
从上面的官方下载地址下载巨慢,我依然选择了正确的上网姿势。
下载完毕后,解压缩:
tar -xJvf node-v6.11.0-linux-x64.tar.xz
我是放到$HOME 下的,因为我使用的是root用户,所以是在/root目录下。这不是个好习惯,所以操作的时候你一定要谨慎,因为正如Fedora所说”权力越大,责任就越大“。
cd node-v6.11.0-linux-x64/
然后创建软连接:
ln -s /root/node-v6.11.0-linux-x64/bin/node /usr/local/bin/node
ln -s /root/node-v6.11.0-linux-x64/bin/npm /usr/local/bin/npm
然后更新npm:
npm install npm@latest -g
查看已安装的node的版本:
[root@fd240 ~]# node -v
v6.11.0
0x02 安装Hyperledger Fabric
按照"搭建第一个网络"里的介绍来测试:
下面的这些步骤都需要你用正确的姿势上网, 我目前的搭配是: 安装ss的客户端,然后使用proxychains来代理shell, 安装proxychains的方法:http://www.tuicool.com/articles/rUNFF3
安装并设置完毕后, 运行:
proxychains4 bash
之后,你的本次shell会话中所有的连接都走了代理了.
好的,接下来继续:
迁出示例代码:
git clone https://github.com/hyperledger/fabric-samples.git
然后进入代码目录:
cd fabric-samples
然后下来安装二进制文件;
curl -sSL https://goo.gl/PabWJX | bash
这个时间是看你和你的服务器之间的速度了, 等待结束即可,一定得确保你是用正确的姿势上网的,不然这两步你都没办法成功.
我下载的已经是rc1版本的包了,前几天同时的还是alpha和beta,并且官方文档也在同步更改.
我本地库里下载好的镜像:
[root@fd240 ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
hyperledger/fabric-tools latest 85d6d3ca0a30 2 days ago 1.32 GB
hyperledger/fabric-tools x86_64-1.0.0-rc1 85d6d3ca0a30 2 days ago 1.32 GB
hyperledger/fabric-kafka latest dbb5796d915f 2 days ago 1.3 GB
hyperledger/fabric-kafka x86_64-1.0.0-rc1 dbb5796d915f 2 days ago 1.3 GB
hyperledger/fabric-zookeeper latest d2efbb01a999 2 days ago 1.31 GB
hyperledger/fabric-zookeeper x86_64-1.0.0-rc1 d2efbb01a999 2 days ago 1.31 GB
hyperledger/fabric-orderer latest 5ec6333eae10 2 days ago 179 MB
hyperledger/fabric-orderer x86_64-1.0.0-rc1 5ec6333eae10 2 days ago 179 MB
hyperledger/fabric-peer latest cf6bedc2935e 2 days ago 182 MB
hyperledger/fabric-peer x86_64-1.0.0-rc1 cf6bedc2935e 2 days ago 182 MB
hyperledger/fabric-javaenv latest 7cbe6aca3956 2 days ago 1.42 GB
hyperledger/fabric-javaenv x86_64-1.0.0-rc1 7cbe6aca3956 2 days ago 1.42 GB
hyperledger/fabric-ca latest cea779a46670 2 days ago 238 MB
hyperledger/fabric-ca x86_64-1.0.0-rc1 cea779a46670 2 days ago 238 MB
hyperledger/fabric-ccenv latest 13ed472038d2 2 days ago 1.29 GB
hyperledger/fabric-ccenv x86_64-1.0.0-rc1 13ed472038d2 2 days ago 1.29 GB
0x03 测试
先进入first-network目录:
cd first-network
看一下脚本使用说明:
./byfn.sh -h
如果您选择不提供频道名称,则脚本将使用默认的mychannel名称。 CLI超时参数(用-t标志指定)是可选值; 如果您选择不设置它,则CLI脚本结束后将退出CLI容器。
创建:
./byfn.sh -m generate
启动:
./byfn.sh -m up
默认是60秒后退出. 使用-t 参数可以指定时间,例如:
./byfn.sh -m up -t 864000
我这里在执行上面两条命令的时候都出现了一些警告信息.但是最终还是成功执行完毕了:
========= All GOOD, BYFN execution completed =========== _____ _ _ ____
| ____| | \ | | | _ \
| _| | \| | | | | |
| |___ | |\ | | |_| |
|_____| |_| \_| |____/
如果你想停止网络的话, 运行下面的命令即可,当然现在我们不停止,继续测试:
./byfn.sh -m down
[root@fd240 first-network]# ./byfn.sh -m down
Stopping with channel 'mychannel' and CLI timeout of ''
Continue (y/n)? y
proceeding ...
WARNING: The CHANNEL_NAME variable is not set. Defaulting to a blank string.
WARNING: The TIMEOUT variable is not set. Defaulting to a blank string.
Stopping peer0.org1.example.com ... done
Stopping peer1.org1.example.com ... done
Stopping peer0.org2.example.com ... done
Stopping orderer.example.com ... done
Stopping peer1.org2.example.com ... done
Removing cli ... done
Removing peer0.org1.example.com ... done
Removing peer1.org1.example.com ... done
Removing peer0.org2.example.com ... done
Removing orderer.example.com ... done
Removing peer1.org2.example.com ... done
Removing network net_byfn
1529eb06e34a
b3a370df312e
273c5a467ebe
Untagged: dev-peer1.org2.example.com-mycc-1.0:latest
Deleted: sha256:8956d45d168352dea31d87f04edc1d9f34bc3ca0eb252b84cb44a607cf467e13
Deleted: sha256:a300ff593826845fc3f37020f7d58e7d437d7f73c6c4b65ea8c69917466b10c2
Deleted: sha256:e2dd4be84d6e44020ae7b5bdd39b79d79c27e0a9968accbaf836ad1343af84e9
Deleted: sha256:0e0313aa04f0bb0f36ad20dcc0ef7a551c3c367c33a494c5e612166887a7c034
Deleted: sha256:2bf6cb6e8ac1fb3ba3e57ba0c68c501a5ad33fed5e8c12499f30d5663d190062
Deleted: sha256:418485d6bf1587104a8da149f0aca34c39d2f918bbe46ebb99faff5c6e3fcb51
Deleted: sha256:888f5aa1c8a2ac0c77f603d4615596d029283cb7bde123eb091453c75fabd861
Untagged: dev-peer0.org1.example.com-mycc-1.0:latest
Deleted: sha256:b58a292485c9c5b4da68f386f16e68293acd359291de6b91366d91723ffb4539
Deleted: sha256:559e3d2ed00a62d04391098816f7e64fae22d570387e7803ce219e4dcf9740d8
Deleted: sha256:d4ef0076f7bd41a531adf905797ddf9adcef1293d08a70dbb5390b6fbdb9af8f
Deleted: sha256:353bc73b0c1820dad8a843dc45adcdac91fcfc60fb7b4b5a9285c135304ee000
Deleted: sha256:c3a93a92e095820188f28ec7c3da9321395440575a0ebddc6bb132611e67563f
Deleted: sha256:e5adc4ad9fb7421406a1569d289c2d28719fa0e701c0b11be2bc700c5055eb36
Deleted: sha256:c67868aa025bfa7d183c5a1ba247d69be1a27cda71965deb37dc1c457167d09d
Untagged: dev-peer0.org2.example.com-mycc-1.0:latest
Deleted: sha256:7b936afdf0318126c3717970e8de7a16f015357b1c7049a68e85e38fa4bae233
Deleted: sha256:699ed77d140a2ea756a3640deac9ffd974ffc6171255426c0733d8a69859e4d7
Deleted: sha256:abcee9f3c60732acfc3c7d4726880869c5b9baea4ac208a6c47c2103cbe6cf2e
Deleted: sha256:26729e91b6f4a9ab8178eb214faeec74cd06105c8e908125fbf2f111b8c8e0ca
Deleted: sha256:de987082ebc0969410072f3bf55bb1ca7f094b0e47540b23e905b483a8119e64
Deleted: sha256:9cfd630b066875bb3c9677fd67a905dfee4b4a8269b3d06cdc372da270569383
Deleted: sha256:d41355d4700c66467e926e121197428ae9150ca11369ca18caaa4b6b58cfcd89
进入节点的cli:
[root@fd240 first-network]# docker exec -it cli bash
root@33e3432d74b8:/opt/gopath/src/github.com/hyperledger/fabric/peer#
设置环境变量:
export CHANNEL_NAME=mychannel
byfn.sh中往这个 mychannel里初始化了两个变量,a和b, 默认值是90. 就类似执行了下列命令:
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/tlscacerts/tlsca.example.com-cert.pem -C $CHANNEL_NAME -n mycc -v 1.0 -c '{"Args":["init","a", "100", "b","200"]}' -P "OR ('Org1MSP.member','Org2MSP.member')"
下面我们执行一些操作:
查询:
peer chaincode query -C $CHANNEL_NAME -n mycc -c '{"Args":["query","a"]}'
应该返回90
减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/tlscacerts/tlsca.example.com-cert.pem -C $CHANNEL_NAME -n mycc -c '{"Args":["invoke","a","b","10"]}'
应该返回200 OK
再查询:
peer chaincode query -C $CHANNEL_NAME -n mycc -c '{"Args":["query","a"]}'
应该返回80
升级1.0.0之后遇到的问题:
在执行
./byfn.sh -m up
时,遇到一个错误提示:
[root@fedora26test first-network]# ./byfn.sh -m up
Starting with channel 'mychannel' and CLI timeout of ''
Continue (y/n)? y
proceeding ...
Starting peer1.org2.example.com ...
Starting peer1.org1.example.com ...
Starting peer1.org2.example.com
Starting peer0.org2.example.com ...
Starting peer1.org1.example.com
Starting peer0.org2.example.com
Starting peer0.org1.example.com ...
Starting orderer.example.com ...
Starting peer0.org1.example.com
Starting peer1.org2.example.com ... done
Starting cli ...
Starting cli ... done
/bin/bash: ./scripts/script.sh: Permission denied
我尝试把所有文件及子文件夹的权限都改为777,重新尝试执行脚本依然报这个错误。于是就怀疑是否是SELinux的问题,打开Fedora的SELinux的错误报告程序,果然发现了,关掉SELinux,重启机器,OK。