Fabric 安装与初步测试
一、环境安装
最终结果
1、前期准备
实验环境,ubuntu18.04
由于各种原因,网络环境在安装好虚拟机的那一刻开始就必须解决好。 我的解决方案:物理机开放代理端口,让虚拟机可以正确上网,用到的软件是clash 和 proxychains4(用来代理命令行)。具体省略
安装软件都尽量安装最新的,意思是都尽量手动安装,尽量别从命令行里直接apt install
2、docker-ce 安装
选择阿里云的源安装
sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
sudo apt install docker-ce
sudo usermod -aG docker wang
注销重新登录后,添加阿里云的Docker Hub镜像
sudo mkdir -p /etc/docker
在daemon.json中添加下面文件。
{
"registry-mirrors": ["https://obou6wyb.mirror.aliyuncs.com"]
}
3、docker-compose安装
从github中的release中直接下载安装
proxychains4 curl -L https://github.com/docker/compose/releases/download/1.25.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
4、go安装
下载安装包,并解压到相关文件夹去。
proxychains4 wget https://dl.google.com/go/go1.13.5.linux-amd64.tar.gz
sudo tar -C /usr/local -zxvf go1.13.5.linux-amd64.tar.gz
如果不能使用wget下载下了,可以先将包通过浏览器下载下来,然后再将其解压到相关文件夹中。
在用户目录中添加环境变量,并在用户目录下创建go文件夹
cd ~
sudo vim .profile
添加如下内容:
export PATH=$PATH:/usr/local/go/bin
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$HOME/go/bin
载入环境并创建文件夹。
source .profile
mkdir go
5、pip安装
ubuntu18.04自带python2 我们只需要按照pip并进行升级就可以了,命令行如下。
sudo apt-get install python-pip
pip install --upgrade pip
pip -V
6、go相关Tools下载
Fabric是使用go开发的,我们需要下载一些相关的工具和库,方便后期使用。
mkdir -p $GOPATH/src/golang.org/x
cd $GOPATH/src/golang.org/x
git clone https://github.com/golang/tools.git
go get github.com/kardianos/govendor
go get github.com/golang/lint/golint
go get golang.org/x/tools/cmd/goimports
go get github.com/onsi/ginkgo/ginkgo
go get github.com/axw/gocov/...
go get github.com/client9/misspell/cmd/misspell
go get github.com/AlekSi/gocov-xml
go get github.com/golang/protobuf/protoc-gen-go
最终这些都会被放在~/go/bin$
下
7、其他第三方库下载
这些库是在编译过程中发现需要的,举例说明一些,总之就是缺撒安装撒。
sudo apt-get install libltdl-dev
到这里,所有环境安装基本安装完毕了。
二、安装Fabric
Fabric 的安装有两种方式,第一种方式使用官方给定的bootstrap.sh脚本进行安装,适合新手。但不适合了解Fabric的工作流程。我们主要使用第二种,手动编译的方式。
1、拉取代码
mkdir -p ~/go/src/github.com/hyperledger
cd ~/go/src/github.com/hyperledger
git clone https://github.com/hyperledger/fabric.git
正常情况下,这个是没有问题的,但是由于我前期设置代理的时候没注意git的代理知识。所有就出现了下面的错误。
fatal: unable to access 'https://github.com/golang/tools.git/': Failed to receive SOCKS4 connect request ack.
读取错误提示,应该是代理问题,网上搜索一下,果然,git的默认代理是socks4,这个不太常用,所以我没设置。解决方法自然有两种,1、在系统中添加可用的socks4代理;2、将git的默认代理设置为socks5。我选择了第二种,在终端中输入如下命令:
git config --global http.proxy 'socks5://192.168.179.1:7891'
2019.12.28最新分支为1.4.4,由于毕设的性质,需要一个成熟和稳定的平台,我们进行分支切换,切换到1.1.0即可。使用git checkout -b <tag>
由于项目的Makefile文件已经写好我们只需要在fabric目录下进行make编译即可。
2、order节点编译
wang@wang:~/go/src/github.com/hyperledger/fabric$ make orderer
Building build/bin/orderer
GOBIN=/home/wang/go/src/github.com/hyperledger/fabric/build/bin go install -tags "" -ldflags "-X github.com/hyperledger/fabric/common/metadata.Version=2.0.0 -X github.com/hyperledger/fabric/common/metadata.CommitSHA=74345bee6 -X github.com/hyperledger/fabric/common/metadata.BaseDockerLabel=org.hyperledger.fabric -X github.com/hyperledger/fabric/common/metadata.DockerNamespace=hyperledger -X github.com/hyperledger/fabric/common/metadata.BaseDockerNamespace=hyperledger" github.com/hyperledger/fabric/cmd/orderer
3、peer节点编译
wang@wang:~/go/src/github.com/hyperledger/fabric$ make peer
Building build/bin/peer
GOBIN=/home/wang/go/src/github.com/hyperledger/fabric/build/bin go install -tags "" -ldflags "-X github.com/hyperledger/fabric/common/metadata.Version=2.0.0 -X github.com/hyperledger/fabric/common/metadata.CommitSHA=74345bee6 -X github.com/hyperledger/fabric/common/metadata.BaseDockerLabel=org.hyperledger.fabric -X github.com/hyperledger/fabric/common/metadata.DockerNamespace=hyperledger -X github.com/hyperledger/fabric/common/metadata.BaseDockerNamespace=hyperledger" github.com/hyperledger/fabric/cmd/peer
可能会出现的错误:
- 错误1
recipe for target '/opt/gotools/obj/gopath/bin/golint' failed
正确上网后,再执行make peer命令!
- 错误2
cp: cannot stat 'build/docker/gotools/bin/protoc-gen-go': No such file or directory
对此,执行下面的命令,下载protoc-gen-go工具,然后将其拷贝到docker/gotools/bin目录里:
go get github.com/golang/protobuf/protoc-gen-go
mkdir -p build/docker/gotools/bin
cp ~/GOPATH/bin/* build/docker/gotools/bin
-
错误3:
在这一步很可能出现错误,这个最大的原因就是网络原因,解决办法,自己将版本号补齐下载,或者通过别的路径下载然后将下载文件拷贝到指定文件。
RUN mkdir -p /usr/share/maven /usr/share/maven/ref && curl -fsSL https://nexus.hyperledger.org/content/repositories/hosted_installers/apache-maven/apache-maven/$MAVEN_VERSION/apache-maven-$MAVEN_VERSION-bin.tar.gz | tar -xzC /usr/share/maven --strip-components=1 && ln -s /usr/share/maven/bin/mvn /usr/bin/mvn
4、Fabric 工具编译
主要有 configtxgen、ceyptogen、configtxlator
wang@wang:~/go/src/github.com/hyperledger/fabric$ make configtxgen
Building build/bin/configtxgen
GOBIN=/home/wang/go/src/github.com/hyperledger/fabric/build/bin go install -tags "" -ldflags "-X github.com/hyperledger/fabric/common/metadata.Version=2.0.0 -X github.com/hyperledger/fabric/common/metadata.CommitSHA=74345bee6 -X github.com/hyperledger/fabric/common/metadata.BaseDockerLabel=org.hyperledger.fabric -X github.com/hyperledger/fabric/common/metadata.DockerNamespace=hyperledger -X github.com/hyperledger/fabric/common/metadata.BaseDockerNamespace=hyperledger" github.com/hyperledger/fabric/cmd/configtxgen
wang@wang:~/go/src/github.com/hyperledger/fabric$ make cryptogen
Building build/bin/cryptogen
GOBIN=/home/wang/go/src/github.com/hyperledger/fabric/build/bin go install -tags "" -ldflags "-X github.com/hyperledger/fabric/common/metadata.Version=2.0.0 -X github.com/hyperledger/fabric/common/metadata.CommitSHA=74345bee6 -X github.com/hyperledger/fabric/common/metadata.BaseDockerLabel=org.hyperledger.fabric -X github.com/hyperledger/fabric/common/metadata.DockerNamespace=hyperledger -X github.com/hyperledger/fabric/common/metadata.BaseDockerNamespace=hyperledger" github.com/hyperledger/fabric/cmd/cryptogen
wang@wang:~/go/src/github.com/hyperledger/fabric$ make configtxlator
Building build/bin/configtxlator
GOBIN=/home/wang/go/src/github.com/hyperledger/fabric/build/bin go install -tags "" -ldflags "-X github.com/hyperledger/fabric/common/metadata.Version=2.0.0 -X github.com/hyperledger/fabric/common/metadata.CommitSHA=74345bee6 -X github.com/hyperledger/fabric/common/metadata.BaseDockerLabel=org.hyperledger.fabric -X github.com/hyperledger/fabric/common/metadata.DockerNamespace=hyperledger -X github.com/hyperledger/fabric/common/metadata.BaseDockerNamespace=hyperledger" github.com/hyperledger/fabric/cmd/configtxlator
5、docker镜像生成
由于有网络文件依赖,所以有的比较慢,需耐心等待。
- orderer镜像生成
make orderer-docker
- peer镜像
make peer-docker
- 客户端
make tools-docker
除了上面我们看到的这些镜像外,实际上我们可能还会用到CouchDB做状态数据库,用Kafka做共识,用Zookeeper做Kafka的高可用支持,这些工具都有对应的Docker镜像,我们仍然可以使用make命令来生成他们。
运行以下命令,系统会给我们生成一整套的Fabric镜像:
make docker
上述过程一般很复杂,成功率极低,但是成功了之后我们就能清楚知道到底整体的编译过程是怎样的了。我们也可我们可以查看生成的docker。
下一步 运行测试网络。
三、测试网络E2E_cli的启动
切换到example/e2e_cli的文件夹下,输入命令./network_setup.sh up
,这个时候前边基本上没问题,但是在加入网络的时候找不到网络的名称,这时候我们需要研究fabric的简单原理,是网络不存在的错误。报错内容如下:
Error: Error endorsing chaincode: rpc error: code = Unknown desc = error starting container: API error (404): {"message":"network e2ecli_default not found"}
原因:e2e_cli目录是固定的,启动后会创建一个docker network以此为名字,这里是e2e_cli
解决方法:退出,更改网络名称。
wang@wang:~/go/src/github.com/hyperledger/fabric/examples/e2e_cli$ ./network_setup.sh down
wang@wang:~/go/src/github.com/hyperledger/fabric/examples/e2e_cli$ vim ./base/peer-base.yaml
- CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=e2ecli_default #修改前的配置
- CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=e2e_cli_default #修改后的配置
重新启动网络即可,成功截图:
四、总结
- 前期环境配置一定要弄好,不然后边麻烦会很多,并且很多错误都是前期环境的原因导致的。
- 网络环境,代理一定要设置好,包括git、curl、proxychain,国内最大的困境就是网络环境问题。
- 错误前人都犯过,放心弄。大胆的网上搜。