Fabric 安装与初步测试

Fabric 安装与初步测试

一、环境安装

最终结果
1.1

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文件夹

扫描二维码关注公众号,回复: 8981879 查看本文章
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,国内最大的困境就是网络环境问题。
  • 错误前人都犯过,放心弄。大胆的网上搜。
发布了12 篇原创文章 · 获赞 3 · 访问量 6019

猜你喜欢

转载自blog.csdn.net/qq_40185499/article/details/103820514