必须要安装64位系统,系统下载地址https://github.com/chainsx/cxcore
初始用户:ubuntu,密码:ubuntu。登录系统后通过命令sudo passwd设置root用户密码。
sudo apt-get update && sudo apt-get upgrade -y
本系统是已经安装好的,如需安装请执行
Apt-get install vim
apt-get install gcc
apt-get install git
apt-get install curl
apt-get install python-pip
apt-get install docker
apt-get install docker-compose
添加阿里云docker hub镜像,执行
sudo vi /etc/docker/daemon.json
将以下内容添加到daemon.json中:
{
"registry-mirrors": ["https://obou6wyb.mirror.aliyuncs.com"]
}
执行以下命令,若不报错则添加成功,并重启docker
systemctl daemon-reload
systemctl restart docker
执行以下命令,下载go压缩包。
curl -o -sSL https://storage.googleapis.com/golang/go1.12.7.linux-arm64.tar.gz
mv /root/-sSL go.tar.gz
tar -C /usr/local -xzf go.tar.gz
将go添加到环境变量中,并设置GOPATH。
sudo vi ~/.profile
添加以下内容
export PATH=$PATH:/usr/local/go/bin
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin
使配置文件生效
source ~/.profile
建立go工作目录,并查看go是否安装成功
安装 protobuf服务,后面编译镜像的时候没有这个会报错
apt install protobuf-compiler
安装protoc-gen-go
go get -u github.com/golang/protobuf/protoc-gen-go
命令执行后会在$GOPATH/bin目录下发现这个工具
apt-get install libc6-dev libltdl3-dev python-setuptools
至此一切准备工作就绪,下面将进行与fabric相关的开发工作。
Node.js为选装内容,为支持Node.js的 SDK做准备。
apt-get install nodejs
apt-get install npm
增加内存交互空间,树莓派RAM只有1G,编译会报内存不足的错误。
apt install build-essential
dd if=/dev/zero of=/swapfile count=2048 bs=1M
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
设置开机自动启动
vi /etc/fstab
在最后添加以下内容
/swapfile none swap sw 0 0
新建源码工程目录,执行
mkdir -p $GOPATH/src/github.com/hyperledger/
进入hyperledger目录,通过git clone fabric源代码,下载速度较慢,根据网络情况该部分代码需要下载一个小时左右。
cd $GOPATH/src/github.com/hyperledger/
git clone https://github.com/hyperledger/fabric.git
下载fabric 项目源码(fabric-samples)
git clone https://github.com/hyperledger/fabric-samples.git
下载docker base image镜像源码
git clone https://github.com/hyperledger/fabric-baseimage.git
下载fabric ca源代码
git clone https://github.com/hyperledger/fabric-ca.git
由于fabric官方不支持ARM内核的二进制文件以及docker镜像(docker pull 镜像失败),因此需要我们自己编译,以下内容为二进制文件和镜像编译过程,其中涉及文件修改的部分,请对照git diff截图根据上下文查看具体位置,标准行号可能会有出入。
docker base image镜像编译
cd fabric-baseimage
修改Makeflie文件,在41行出增加一行,
+DOCKER_BASE_arm64=aarch64/ubuntu:xenial
修改images/couchdb/Dockerfile.in文件,在112行处增加如下内容。
+ && chmod +w bin/rebar \
+ && mv bin/rebar bin/rebar-orig \
+ && cd bin \
+ && curl -fSL https://github.com/rebar/rebar/wiki/rebar --output rebar \
+ && chmod +x rebar \
+ && cd .. \
修改scripts/common/setup.sh文件,在73行处做如下修改:
注释掉
-NODE_PKG=node-v$NODE_VER-linux-$ARCH.tar.gz
添加
+NODE_PKG=node-v$NODE_VER-linux-arm64.tar.gz
执行 make 编译docker镜像,时间较长,大约6-8个小时,中间可能会因为网络原因中断,再次执行make即可。编译成功执行docker images 查看是否编译成功。
fabric源码编译
cd fabric
修改Makefile文件,在114行处做如下修改。
-all: native docker checks
+all: native docker #checks
执行make,大约需要1-2个小时,编译成功执行docker images 查看是否编译成功。
二进制文件编译
修改Makefile文件
在100行最右添加
linux-arm64
在350行后添加如下内容。
release/linux-arm64: GOARCH=arm64
release/linux-arm64: $(patsubst %,release/linux-arm64/bin/%, $(RELEASE_PKGS))
执行 make release
成功之后会在release/linux-arm64/bin目录下生成二进制文件,然后把这些二进制文件拷贝到gopath/bin目录下。
编译fabric-ca
修改Makefile文件,在75行处做如下修改。
-all: rename docker unit-tests
+all: rename docker #unit-tests
执行make,编译成功后执行docker images 命令查看编译是否成功。
编译fabric-ca的二进制文件
修改makefile文件
在64行最后添加 linux-arm64
-RELEASE_PLATFORMS = linux-amd64 darwin-amd64 linux-ppc64le linux-s390x windows-amd64
+RELEASE_PLATFORMS = linux-amd64 darwin-amd64 linux-ppc64le linux-s390x windows-amd64 linux-arm64
在72行左右做如下修改。
-all: rename docker unit-tests
+all: rename docker #unit-tests
在262行左右添加如下内容
+release/linux-arm64: GOARCH=arm64
+release/linux-arm64: GO_TAGS+= caclient
+release/linux-arm64: $(patsubst %,release/linux-arm64/bin/%, $(RELEASE_PKGS))
+release/%/bin/fabric-ca-client: $(GO_SOURCE) @echo "Building $@ for $(GOOS)-$(GOARCH)" mkdir -p $(@D)
在281行左右添加如下内容。
@@ -281,6 +285,8 @@ dist/linux-ppc64le:
cd release/linux-ppc64le && tar -czvf hyperledger-fabric-ca-linux-ppc64le.$(PROJECT_VERSION).tar.gz *
dist/linux-s390x:
cd release/linux-s390x && tar -czvf hyperledger-fabric-ca-linux-s390x.$(PROJECT_VERSION).tar.gz *
+dist/linux-arm64:
+ cd release/linux-arm64 && tar -czvf hyperledger-fabric-ca-linux-arm64.$(PROJECT_VERSION).tar.gz *
在301左右处添加。
+ -@rm -rf release/linux-arm64/hyperledger-fabric-ca-linux-arm64.$(PROJECT_VERSION).tar.gz ||:
执行
make fabric-ca-server
make fabric-ca-client
进入项目代码目录/fabric-samples/first-network,执行。
./byfn.sh up
出现以下结果,证明安装成功。