这周查阅了大量文档资料,终于在今天把整个网络全部走通,包括通过源代码部署和通过shell脚本一键部署,趟了大量的坑,依然不敢说是全部了解。但也有很多值得注意和以后需要求证的地方,这里写下来备忘。
本文所述的内容是在2019年1月8号开始的,于2019年1月10号结束。在Win10家庭版上装的Ubantu 18.04版本的虚拟机,文档主要参考的是Fabric Release-1.4版本。另外,我喜欢Go,所以接下来关于链码的演示,没有nodejs、python和java什么事,想看这些,可以移步未来我写的文章。Orz...
准备工作(Prerequisites)
在开始之前,检查一下你的准备开发或者测试Fabric的平台是否有安装如下软件。哦,对了,由于我极度不喜欢使用安装包,因为下载的安装包总是会随着时间的流逝而过时,所以我喜欢直接用命令来安装,想下载安装包的,可以去各自的官网上找找。
cURL
下载代码以及docker镜像用的。如果你还没装这个,或者在本文中使用curl命令出现了错误,可以考虑下载最新的版本。
代码语言:javascript复制$ # 检查你的curl版本 - Check your curl version
$ curl --version
curl 7.58.0 (x86_64-pc-linux-gnu) libcurl/7.58.0 OpenSSL/1.1.0g zlib/1.2.11 libidn2/2.0.4 libpsl/0.19.1 ( libidn2/2.0.4) nghttp2/1.30.0 librtmp/2.3
Release-Date: 2018-01-24
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp smb smbs smtp smtps telnet tftp
Features: AsynchDNS IDN IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz TLS-SRP HTTP2 UnixSockets HTTPS-proxy PSL
$ # 如果没有就执行下载 - Download if it doesn't exist
$ sudo apt-get update
$ sudo apt install curl
Reading package lists... Done
Building dependency tree
Reading state information... Done
curl is already the newest version (7.58.0-2ubuntu3.5).
0 upgraded, 0 newly installed, 0 to remove and 26 not upgraded.
Docker and Docker Compose
orderer/peer节点启动,链码安装/实例化/执行/升级等用的。
代码语言:javascript复制$ # 检查你的docker版本 - Check your docker version
$ docker --version
Docker version 18.09.0, build 4d60db4
$ docker-compose --version
docker-compose version 1.17.1, build unknown
$ # 如果没有就执行下载 - Download if it doesn't exist
$ sudo apt-get update
$ sudo apt-get install
apt-transport-https
ca-certificates
curl
software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo apt-key fingerprint 0EBFCD88
$ sudo add-apt-repository
"deb [arch=amd64] https://download.docker.com/linux/ubuntu
$(lsb_release -cs)
stable"
$ sudo apt-get update
$ sudo apt-get install docker-ce
$ # 国内用户因为网络、未
访问国外网站或者其他灵异事件可能hello-world执行不了会失败. 不过这不重要。 - It will be failed in China because the God is watching you. But it doesn't matter. :)
$ sudo docker container run hello-world
$ sudo apt install docker-compose
Go
主要是来写链码(chaincode)的。1.4版本的fabric要求go版本在1.11.x以上。
代码语言:javascript复制$ # 检查你的go版本 - Check your go version
$ go version
go version go1.11.4 linux/amd64
$ # 如果没有就执行下载 - Download if it doesn't exist
$ sudo add-apt-repository ppa:longsleep/golang-backports
$ sudo apt-get update
$ sudo apt-get install golang-go
$ # 配置环境变量,这个很重要,目前来讲,GOPATH是fabric必须有的。
$ vim ~/.bashrc
$ # 如果没有装vim可能会报错,直接按提示安装就好了 sudo apt install vim
$ # 打开文件后,按 i 进入编辑模式,在文件末尾粘贴(Shift Insert)上如下内容:
export PATH=$PATH:$(go env GOPATH)/bin
export GOPATH=$(go env GOPATH)
export GOROOT=$(go env GOROOT)
export GOARCH=amd64
export GOOS=linux
$ # 粘贴完后,按Esc推出编辑模式,输入命令:wq! 保存退出后执行source命令让其立即生效
$ source ~/.bashrc
$ 测试是否设置成功 - Check if it is successful
$ echo $GOPATH
/home/wff/go
构建你的第一个网络(Building Your First Network)
构建你的第一个网络(byfn)方案提供了一个Hyperledger Fabric示例网络,该网络由两个组织组成,每个组织维护两个peer节点,以及一个基于“solo”模式的orderer节点。
安装镜像
鉴于在国内可能不想访问国外网站甚至不会访问国外网站的同志大有人在,我也就直接上不用访问国外网站的命令了。
代码语言:javascript复制$ cd ~
$ mkdir hyperledger-fabric
$ cd hyperledger-fabric
$ curl -sSL https://raw.githubusercontent.com/hyperledger/fabric/master/scripts/bootstrap.sh | bash -s 1.4.0 1.4.0 0.4.14
$ # 这一步耐心很重要,最好是在晚上睡觉的时候,等第二天醒来就下载好了,这就美滋滋,否则,等几个小时还算你网速是好的吧。
$ # 查看是否下载成功
$ configtxlator version
configtxlator:
Version: 1.4.0
Commit SHA: development build
Go version: go1.11.4
OS/Arch: linux/amd64
$ # 如果报错找不到这个命令 - configtxlator: command not found,那么可能你需要手动设置全局命令
$ cd ~/hyperledger-fabric/fabric-samples/bin
$ sudo cp * /usr/local/bin
生成网络构件
生成构件的过程中,会生成包括orderer节点组织和peer节点组织的证书,以及创始块,配置交易块等信息,同时检查docker镜像版本。
代码语言:javascript复制$ cd ~/hyperledger-fabric/fabric-samples/first-network/
$ ./byfn.sh generate
$ # 如果打印出来的日志包含如下内容,则说明工具版本和docker镜像版本不匹配,需要重新下载镜像
=================== WARNING ===================
Local fabric binaries and docker images are
out of sync. This may cause problems.
===============================================
$ # 工具版本
$ configtxlator version | sed -ne 's/ Version: //p'
1.4.0
$ # docker镜像版本
$ docker run --rm hyperledger/fabric-tools:latest peer version | sed -ne 's/ Version: //p' | head -1
1.4.0
$ # 如果不匹配,则删除错误版本的镜像,重新设置版本安装镜像
$ # 删除全部镜像
$ docker images|awk '{printf "%s:%sn",$1,$2}'|xargs docker rmi
$ # 重新设置版本,比如1.3.0
$ curl -sSL https://raw.githubusercontent.com/hyperledger/fabric/master/scripts/bootstrap.sh | bash -s 1.3.0 1.3.0 0.4.14
构建网络
如果上一步的generate没有出现任何问题,那么接下来就可以开始构建简易的fabric网络了。
代码语言:javascript复制$ # 这里的命令不加-l参数,所以默认是go语言
$ ./byfn.sh up
$ # 如果看到如下内容,说明网络已经构建成功并开始启动了。接下来它会完成一个e2e测试告诉你大致的流程
Starting with channel 'mychannel' and CLI timeout of '10'
Continue? [Y/n]
proceeding ...
Creating network "net_byfn" with the default driver
Creating peer0.org1.example.com
Creating peer1.org1.example.com
Creating peer0.org2.example.com
Creating orderer.example.com
Creating peer1.org2.example.com
Creating cli
____ _____ _ ____ _____
/ ___| |_ _| / | _ |_ _|
___ | | / _ | |_) | | |
___) | | | / ___ | _ < | |
|____/ |_| /_/ _ |_| _ |_|
Channel name : mychannel
Creating channel...
$ # 成功执行后,会出现如下内容:
Query Result: 90
2017-05-16 17:08:15.158 UTC [main] main -> INFO 008 Exiting.....
===================== Query successful on peer1.org2 on channel 'mychannel' =====================
===================== All GOOD, BYFN execution completed =====================
_____ _ _ ____
| ____| | | | | _
| _| | | | | | | |
| |___ | | | | |_| |
|_____| |_| _| |____/
你可以滚动这些日志查看交易的流程,如果你并没有得到上面的结果,可以看看官网的错误说明找找原因。
关闭网络
这个会关闭并删除掉所有docker中与之相关的容器,没啥好说的。
代码语言:javascript复制$ ./byfn.sh down
另外,还有个重启命令,可以试试。
代码语言:javascript复制$ ./byfn.sh restart
错误记录
这里会放一些我在启动过程中遇到的,或者别人遇到的错误问题,和一些解决方案,不过目前我有点忘了,下次遇见的时候再记录下来。一般来讲,按照教程走,基本没多大问题。
后记
这篇教程对于fabric建立一个简单认知是没有问题的,但如果想深入研究,你会发现你几无所得。所以,接下来,我会深入写一篇关于手动构建fabric网络,包括自己生成组织,证书,启动排序、对等节点,以及手撸链码的日志。等有空再说吧,现在正在给fabric加密类型增加国密算法,可能懒得写了就。