Fabric 超级账本 1.4.1国密改造版本Centos单机部署及测试流程

Fabric 超级账本 1.4.1国密改造版本Centos单机部署及测试流程

说明:本文主要参考了CSDN上作者为可乐少加冰的记录一次fabric国密版本节点搭建过程 这篇文章。同时也感谢CSDN上小张小张,从不慌张在部署过程中的无私解答与帮助;最后感谢CSDN上dddengyunjie放出了一个国密改造版本及在平常工作中的帮助。

一、准备条件

  • 按照Fabric Hyperledger官方文档的要求安装好git、docker、docker-compose、go等,这里不再叙述。

    • 注意:go语言版本最好1.14.1以上,不然有可能会出问题

    • 注意:docker安装不要yum install安装,这样安装的版本太低(必须在17.06以上)。如果已经安装,下面有一篇文章讲怎么删了重装,当然没有安装也可以看该文章安装。

      CSDN上的Docker安装太慢,使用国内镜像服务快速安装

      推荐使用阿里云数据源。

      或者使用curl -fsSL https://get.docker.com/ | sh安装docker(国内不推荐,速度慢)。

  • 打包镜像时需要使用bzip2工具,如果没有安装,运行yum -y install bzip2

  • 要设置GOPATH,本文假定设置为/root/gopath。注意 GO111MODULE环境变量让它默认为auto就好,不要改成on

二、下载改造好的源码

1、创建目录

mkdir -p $GOPATH/src/github.com/hyperledger

2、下载

cd $GOPATH/src/github.com/hyperledger
git clone https://github.com/dddengyunjie/fabric

注意:国内下载比较慢,可以直接从别处复制一个下载好后的打包文件(如果打包复制过依赖库的更佳,这里我们就不做了)。

打包,解包推荐使用tar命令。

注意:这个改造其实是对Hyperledger Fabric v1.4.2进行的国密改造。

注意:目录结构是固定的,工程目录必须为$GOPATH/src/github.com/hyperledger/fabric

三、安装依赖及构建工具示例

这里演示一下如何下载一些缺少的依赖及构建一下部分工具。

1、golang.org/x 下的依赖

这里需要下载如下两个库:

mkdir -p $GOPATH/src/golang.org/x
cd $GOPATH/src/golang.org/x
git clone https://github.com/golang/crypto.git
git clone https://github.com/golang/sys.git

同时这也是一个下载演示示例。

2、构建protoc-gen-go工具

cd $GOPATH/src
mkdir golang
cd golang
git clone https://github.com/golang/protobuf.git
cd protobuf/protoc-gen-go/
go build
go install
ls $GOPATH/bin

这里同样也是演示一个示例,用于国内服务器等无法直接构建时。当然有更简单的方法,比如直接从别处复制(推荐方法)。

3、构建mockery工具

mkdir -p $GOPATH/src/github.com/vektra
cd $GOPATH/src/github.com/vektra
git clone --branch v1.1.2 https://github.com/vektra/mockery.git
cd mockery/cmd/mockery
go install mockery.go
ls $GOPATH/bin

这里mockery工具单独构建是有用意的。

四、替换源码中脚本中失效url

1、Makefile

切换到工程目录

cd $GOPATH/src/github.com/hyperledger/fabric
vim Makefile

需要将CHAINTOOL_URL的值替换为:

https://hyperledger.jfrog.io/hyperledger/fabric-maven/org/hyperledger/fabric-chaintool/$(CHAINTOOL_RELEASE)/fabric-chaintool-$(CHAINTOOL_RELEASE).jar

原因:原来的网址已经不维护了,所以要进行替换。
关于这个Makefile的详情,见Go语言充电站的文章:通过Fabric 1.4 的Makefile,轻松掌握Fabric构建 。

2、gotools.mk

vim gotools.mk

go.fqp.mockery := github.com/vektra/mockery/cmd/mockery 这一行改为go.fqp.mockery := github.com/vektra/mockery/cmd。去掉最后的mockery,因为它在github上的目录已经发生了改变。然而此处更改只能让它在make时不中断,并不能实际构建出mockery工具。具体细节后面make docker时再讲

五、编译二进制文件

chmod +x scripts/*.sh
make release

make时会提示少一些golang的工具库,少什么库通过前面3.1中的方法进行下载,也可以从别处拷贝。注意看提示,它是从本工程vendor、GOPATH和GOROOT目录中查找的。下载好后也可以将缺少的依赖库复制到vendor目录中对应的位置(下一步make docker要使用)。

本次make时缺少的包有(这里不一一列举):

golang.org/x/crypto/chacha20poly1305
golang.org/x/sys/cpu
......

这里只需要按上面的方法安装cryptosys包就可以了。
然后我们重新make

cd $GOPATH/src/github.com/hyperledger/fabric
make release
tree release

如果没有安装tree命令,就一层一层ls好了。

生成的文件在 release/linux-amd64/bin目录下。

注意:先将该目录复制别处去,因为如果执行make clean会删除这个目录,虽然我们一般不会执行,但万一有时需要呢。

cp -r release/linux-amd64/bin ~/
ls ~/bin

可以看到,我们已经复制成功了。

六、编译镜像

make docker

第一步,它会下载一些基础镜像,漫长的等待…不推荐使用代理镜像仓库,让它自己下完就好。

第二步,它首先编译peer,然后会提示少一些依赖库。如果该依赖库在make release时未复制到项目vendor目录下,这里需要先复制。注意这查找依赖的顺序是本地vendor,后面的两个是虚拟目录,不是本机的GOPATH与GOROOT。
少什么其它库同样通过前面3.1中的方法进行下载,然后复制到vendor中对应的目录去。当然,也可以从别的机器使用scp命令复制。注意,这里少什么库就复制什么库,同一目录下的其它库不用复制。

由于在前面我们已经进行过golang.org/x/下的cryptosys包的下载,所以我们本次操作中缺少的库就从本机$GOPATH目录中复制就好:

mkdir -p vendor/golang.org/x/crypto/internal/
cp -r $GOPATH/src/golang.org/x/crypto/chacha20poly1305 vendor/golang.org/x/crypto/
cp -r $GOPATH/src/golang.org/x/crypto/curve25519 vendor/golang.org/x/crypto/
cp -r $GOPATH/src/golang.org/x/crypto/chacha20 vendor/golang.org/x/crypto/
cp -r $GOPATH/src/golang.org/x/crypto/internal/subtle vendor/golang.org/x/crypto/internal/
cp -r $GOPATH/src/golang.org/x/crypto/poly1305 vendor/golang.org/x/crypto/
cp -r $GOPATH/src/golang.org/x/sys/cpu vendor/golang.org/x/sys/

接着make docker 构建peer-image成功。

第三步,它会构建order-image

第四步,它会构建gotools工具。 有时会因为网络问题在构建第一个工具counterfeiter或者其它工具时会提示获取依赖库连接超时,这个我们后面会讲怎么手动解决该问题。此时为了节省时间,可以直接ctrl + c 关掉它。

如果没有失败,则会构建成功。然后会跳到第五步。

如果中间构建某个工具失败了,请接着往下看:

运行ls -a,可以看到工程目录下多了.build目录。该目录初始时并不存在,脚本运行到此处时会自动创建,构建好的工具生成在.build/docker/gotools/bin/目录。

重点来了:

可乐少加冰的记录一次fabric国密版本节点搭建过程 这篇文章中提到了一个方法,就是将缺少的工具使用前面的示例方法(比如 mockery,protoc-gen-go工具)进行手构建,然后复制到.build/docker/gotools/bin/目录中去。但是这个方法我多次尝试后,发现存在一个问题:
复制过去后接着make docker它会跳过gotools中部分工具的构建(这样做也能运行),直接会跳到第五步。因此,推荐的做法是:从别处复制已经构建好的全部工具(比如在香港服务器上构建好,作为复制源)而不是只复制其中一个工具。下面的示例操作一次性从别的服务器上复制了所有的工具:

cd .build/docker/gotools/bin/
scp useranme@hostname:/opt/gopath/src/github.com/hyperledger/fabric/.build/docker/gotools/bin/* ./

输入密码后等待复制完成。

这个所有构建好的工具我计划放在gitee上让大家下载,等做好了再将仓库地址补充进来。

仓库地址为: https://gitee.com/TianCaoJiangLin/gotools-bin

第五步,接着运行make docker,它会出现下载chaintool工具的界面,国内下载速度很慢。这时可以ctrl + c 关掉它,将别处构建发的工具复制到对应的.build/bin/目录。具体操作不再叙述。

注:这个工具我那个仓库也放进去了。

第六步,接着再运行make docker,它会编译build-envimage-tool等等,一般不会有问题,直至最后成功。

此时,使用docker images会列出所有镜像,会看到一些没有名字或者名字为的镜像,应该是失败的过程中产生的一些无用镜像,我们可以使用下面的命令进行删除:

docker rmi image_id -f

这里image_id是指镜像ID,记住不要轻易使用make clean

这里有一个不完美的地方:
构建完成之后我们运行

tree .build/docker/gotools/bin/

会发现只列出了10个工具,而不是gotools.mk中的11个工具,少了一个mockery,怎么办?大致原因我在替换失效URL中提到了,然而具体详请我也不清楚(能力有限)。

这里少一个mockery并不影响实际运行,但如果你是完美主义者,这里肯定是过不去了,怎么办?
.build/docker/gotools/bin中所有工具复制出去,再将前面构建的mockery工具加进去。然后重新构建,手动复制构建工具:

mkdir -p ~/docker/gotools
cp -r .build/docker/gotools/bin ~/docker/gotools
cp $GOPATH/bin/mockery ~/docker/gotools/bin/
tree ~/docker/gotools/bin
make clean
make docker

在构建gotoolsctrl + c关掉它,然后:

cp ~/docker/gotools/bin/* .build/docker/gotools/bin/
make docker

注意:这里再次构建同样需要检查一些没有名字或者名字为的镜像,然而删除它。

七、下载fabric-sample并进行测试

1、下载1.4.2版本的fabric-sample

因为我们以后可能使用CA(虽然本文并未涉及CA的国密版本),我们使用 fabric-sample v1.4.2版本测试。fabric-sample v1.4.1示例网络中启动脚本不包含CA,要自己写,比较麻烦。

cd ~
git clone --branch v1.4.2 https://github.com/hyperledger/fabric-samples.git

2、将上面编译好的二进制文件复制到fabric-sample目录下

make release这一步生成的已经拷贝到根目录的bin目录复制到fabirc-sample目录下,可以使用下面的命令

cp -r bin fabric-samples

3、修改configtx.yaml

因为该国密版本的order节点不支持OrdererCapabilities V1_4_2,所以我们将其修改为和fabric-sample v1.4.1相同的设置:

vim first-network/configtx.yaml
  • 将第Capabilities部分的ChannelV1_4_2: true改为V1_3: true
  • 将第Capabilities部分的OrdererV1_4_2: true改为V1_1: true
  • 将第Capabilities部分的ApplicationV1_4_2: true注释掉。
  • 将第Capabilities部分的ApplicationV1_3: false改为V1_3: true

4、运行测试

cd fabirc-sample/first-network
./byfn.sh up

如果这过程中报错peer节点一直崩溃无法运行(有的机器上或者centos版本上会有这种情况),有可能是因为当前版本存在一些问题,在某些centos版本(或者服务器设置)下需要设置一个peer的环境变量。具体详情见阿里云的一篇文章:阿里云环境部署Hyperledger Fabric之SIGSEGV问题分析和解决经验分享

这里要更改base/peer-base.yaml,在节点的环境变量设置中增加:- GODEBUG=netdns=go

然后:

./byfn.sh down
./byfn.sh up

八 、镜像导出与导入

如果需要在多台机器上部署改造后国密版本,不可能每台机器都按这这个步骤来,太浪费时间。个人设想是将编译好的镜像导出为本地文件,复制到另一台机器后再导入镜像,同时还需复制上面make release生成的bin文件夹。

参考文章:docker 拷贝镜像文件

这个设想别人已经实现了,可行的,速度比make快多了。

最后:由于部署测试是个步骤很多的操作,因此写的比较简略,并且有些步骤也语焉不详,特别是构建工具的那个步骤。如果文章有什么错误或者大家操作中遇到什么问题,欢迎留言一起交流探讨。

你可能感兴趣的:(Fabric)