服務器信息:
cpu:華為鯤鵬
cpu架構:arm v8
系統:CenOS-AltArch 7.6
相關工具安裝
yum更新
yum update
安裝vim/gcc/git/curl工具軟件
yum install vim yum install gcc yum install git yum install curl
安裝pip、python-pip
這一步根據實際提示去操作,步奏省略。博主升級了python版本到3.7 ,安裝了pip3、python-pip...
可能需要升級openssl,升級openssl可以參照這篇文章:http://www.manongjc.com/detail/14-hnvvaaujxafjzbv.html
注意:升級python之后,使用pip指令可能報錯:https協議不支持,解決如下:
安裝docker及docker-compose
docker安裝:
yum安裝跟x86平台安裝一樣,步奏省略...
博主的docker安裝的是最新穩定版:19.03.5
docker安裝完成后,添加阿里雲docker hub鏡像 ,執行:
sudo vi /etc/docker/daemon.json
將以下內容添加到daemon.json中:
{ "registry-mirrors": ["https://obou6wyb.mirror.aliyuncs.com"] }
執行以下命令,若不報錯則添加成功,並重啟docker
systemctl start docker
systemctl daemon-reload
systemctl restart docker
加入開機啟動:
systemctl enable docker
docker-compose安裝:
安裝:pip install docker-compose
版本查看:docker-compose version
安裝go
注意:需要先找到自己CPU架構對應的go版本
go對應版本查看:https://studygolang.com/dl
博主安裝的版本:
# 下載go1.13.6.linux-arm64.tar.gz並將其解壓到指定目錄(此處為/usr/local)
wget https://studygolang.com/dl/golang/go1.13.6.linux-arm64.tar.gz tar xzvf go1.13.6.linux-arm64.tar.gz -C /usr/local
#修改系統環境變量
vi /etc/profile
打開文件后在最后面添加:
# 使環境變量生效
source /etc/profile
# 驗證:go version
安裝 protobuf
protobuf安裝
博主安裝的最新版本3.11.2
wget https://github.com/google/protobuf/releases/download/v3.11.2/protobuf-all-3.11.2.tar.gz ./autogen.sh ./configure make make check make install
安裝protobuf-compiler
yum install protobuf-compiler go get -u github.com/golang/protobuf/protoc-gen-go
#命令執行后會在$GOPATH/bin目錄下發現這個工具
安裝一些依賴庫
yum install libc6-dev libltdl3-dev python-setuptools
至此一切准備工作就緒,下面將進行與fabric相關的開發工作。
安裝Node.js
Node.js為選裝內容,為支持Node.js的 SDK做准備。
-
yum install nodejs
-
yum install npm
Fabric環境搭建
源碼下載
新建源碼工程目錄,執行
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
注意:完成之后需要切換tag:具體操作百度自行切換,博主選擇的tag是 v0.4.13
下載fabric 項目源碼(fabric-samples)
git clone https://github.com/hyperledger/fabric-samples.git
注意:完成之后需要切換穩定版的分支:git checkout -b sample v1.4.0
下載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鏡像編譯
1、cd fabric-baseimage
2、修改Makeflie文件,在41行出增加一行:DOCKER_BASE_arm64=aarch64/ubuntu:xenial
3、修改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 .. \
4、修改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
5、執行 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
如果沒有用到fabric-ca,當前步奏可以省略
修改Makefile文件,在75行處做如下修改。
all: rename docker unit-tests
all: rename docker #unit-tests
執行make,編譯成功后執行docker images 命令查看編譯是否成功。
編譯fabric-ca的二進制文件
這一步,博主沒有操作,因為沒用到fabric-ca工具,省略
結果測試
進入項目代碼目錄/fabric-samples/first-network,執行:
./byfn.sh up
出現以下結果,證明安裝成功。
問題紀要:
1、docker-compose not find....
解決:找到docker-compose文件所在路徑,配置環境變量(臨時/永久),博主配置的臨時環境。
2、./byfn.sh啟動時,提示如下異常:
解決:/release/linux-arm64/bin/目錄下生成的所有二進制文件拷貝到fabric-samples/bin目錄下
重要采坑點:
問題一:fabric目錄下執行make指令,可能會拋出找不到某個指定的docker鏡像異常
解決:vi Makefile
在下圖位置修改成跟docker鏡像相同的TAG
問題二:在fabric目錄下執行二進制編譯命令:make release時,會拋出如下異常
解決辦法如下: