Hyperledger fabric 1.3安装记录
一、环境
主机:阿里云轻量应用服务器
系统:Ubuntu 16.04(基于4.4内核)
二、先决条件
2.1 go
用此时最新的1.11.2版本
下载:
wget https://dl.google.com/go/go1.11.2.linux-amd64.tar.gz
安装:
tar -zxvf go1.11.2.linux-amd64.tar.gz
加入到环境变量:
export PATH=$PATH:/home/admin/go/bin
export GOROOT=/home/admin/go
export GOPATH=/home/admin
export GOBIN=$GOROOT/bin
2.2 docker
不用apt去下载安装,直接安装比较新的
下载:
wget https://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/amd64/docker-ce_17.12.1~ce-0~ubuntu_amd64.deb
安装:
dpkg -i docker-ce_17.12.1~ce-0~ubuntu_amd64.deb
看看安装好没:
docker version
2.3 docker-compose
这个直接apt install就行
apt install docker-compose
安装完好像会把docker版本降低,重新走安一遍docker
2.4 总结
总之 搞定go、docker、docker-compose、git、这四个,版本最好不要太旧不然会有大大小小的问题
三、fabric安装
3.1 官方安装指令分析
官网上给出一条直接安装的指令:
curl -sSL http://bit.ly/2ysbOFE | bash -s 1.3.0
运气不好,被墙,路径等等原因安装不上,索性分析一下
这条语句是从那个压缩后的网址找到安装脚本,再传1.3.0这个参数进行下载安装
实际访问的地址是:
https://raw.githubusercontent.com/hyperledger/fabric/master/scripts/bootstrap.sh
直接先把bootstrap.sh下载下来:
curl -sSL https://raw.githubusercontent.com/hyperledger/fabric/master/scripts/bootstrap.sh -o bootstrap.sh
接下来分析一下看bootstrap.sh具体做什么工作
3.2 bootstrap.sh
打开这个脚本文件可以看到:
# if version not passed in, default to latest released version
export VERSION=1.3.0
# if ca version not passed in, default to latest released version
export CA_VERSION=$VERSION
# current version of thirdparty images (couchdb, kafka and zookeeper) released
export THIRDPARTY_IMAGE_VERSION=0.4.13
export ARCH=$(echo "$(uname -s|tr '[:upper:]' '[:lower:]'|sed 's/mingw64_nt.*/windows/')-$(uname -m | sed 's/x86_64/amd64/g')")
export MARCH=$(uname -m)
printHelp() {
echo "Usage: bootstrap.sh [version [ca_version [thirdparty_version]]] [options]"
echo
echo "options:"
echo "-h : this help"
echo "-d : bypass docker image download"
echo "-s : bypass fabric-samples repo clone"
echo "-b : bypass download of platform-specific binaries"
echo
echo "e.g. bootstrap.sh 1.3.0 -s"
echo "would download docker images and binaries for version 1.3.0"
}
- 所以那个1.3.0就是传入的fabric版本
- 默认fabric参数是1.3.0,ca版本跟fabric版本一样也是1.3.0,docker镜像版本是0.4.13
- 根据打印帮助函数,可以看到如何操作这个脚本
主要的部分是:
if [ "$SAMPLES" == "true" ]; then
echo
echo "Installing hyperledger/fabric-samples repo"
echo
samplesInstall
fi
if [ "$BINARIES" == "true" ]; then
echo
echo "Installing Hyperledger Fabric binaries"
echo
binariesInstall
fi
if [ "$DOCKER" == "true" ]; then
echo
echo "Installing Hyperledger Fabric docker images"
echo
dockerInstall
fi
- 可以看到有三个部分,分别对应着
- samplesInstall:从github上clone项目fabric-samples
- binariesInstall:从下载地址下载需要的二进制文件和配置文件
- dockerInstall:下载需要的docker镜像
3.3 根据bootstrap.sh自己个安装
3.3.1 克隆fabric-samples
git clone https://github.com/hyperledger/fabric-samples.git
看看版本情况:
git branch -a
现在就是最新版的1.3,不需要改,如果要改成1.1版本:
git checkout release-1.1
3.3.2 下载二进制文件和配置文件
源代码为:
binariesInstall() {
echo "===> Downloading version ${FABRIC_TAG} platform specific fabric binaries"
binaryDownload ${BINARY_FILE} https://nexus.hyperledger.org/content/repositories/releases/org/hyperledger/fabric/hyperledger-fabric/${ARCH}-${VERSION}/${BINARY_FILE}
if [ $? -eq 22 ]; then
echo
echo "------> ${FABRIC_TAG} platform specific fabric binary is not available to download <----"
echo
fi
echo "===> Downloading version ${CA_TAG} platform specific fabric-ca-client binary"
binaryDownload ${CA_BINARY_FILE} https://nexus.hyperledger.org/content/repositories/releases/org/hyperledger/fabric-ca/hyperledger-fabric-ca/${ARCH}-${CA_VERSION}/${CA_BINARY_FILE}
if [ $? -eq 22 ]; then
echo
echo "------> ${CA_TAG} fabric-ca-client binary is not available to download (Available from 1.1.0-rc1) <----"
echo
fi
}
- 可以看到一共从两个地址中下载了两个压缩包文件
- 之前就老是在这里失败,可能是网不好吧
- 直接自己下载
wget https://nexus.hyperledger.org/content/repositories/releases/org/hyperledger/fabric/hyperledger-fabric/linux-amd64-1.3.0/hyperledger-fabric-linux-amd64-1.3.0.tar.gz
wget https://nexus.hyperledger.org/content/repositories/releases/org/hyperledger/fabric-ca/hyperledger-fabric-ca/linux-amd64-1.3.0/hyperledger-fabric-ca-linux-amd64-1.3.0.tar.gz
- 这两个压缩包一个放着二进制文件,这些文件可以通过编译源码得到;另一个放着配置文件
- 全部放到fabeic-samples里解压可以得到bin和config两个文件夹
- 把bin文件夹加到环境变量里去
export bin文件目录
- 运行一下看看操作正确没:
peer version
顺便一提,那些二进制文件可以通过编译hyperledger fabeic源码得到:
git clone https://github.com/hyperledger/fabric.git
make release
3.3.3 下载docker镜像文件
dockerInstall:
dockerInstall() {
which docker >& /dev/null
NODOCKER=$?
if [ "${NODOCKER}" == 0 ]; then
echo "===> Pulling fabric Images"
dockerFabricPull ${FABRIC_TAG}
echo "===> Pulling fabric ca Image"
dockerCaPull ${CA_TAG}
echo "===> Pulling thirdparty docker images"
dockerThirdPartyImagesPull ${THIRDPARTY_TAG}
echo
echo "===> List out hyperledger docker images"
docker images | grep hyperledger*
else
echo "========================================================="
echo "Docker not installed, bypassing download of Fabric images"
echo "========================================================="
fi
}
- 可以看到分别执行了三个函数dockerFabricPull(fabric的镜像)、dockerCaPull(fabric ca的镜像)、dockerThirdPartyImagesPull(couchdb、kafka、zookeeper三个镜像)
- dockerFabricPull:
dockerFabricPull() {
local FABRIC_TAG=$1
for IMAGES in peer orderer ccenv javaenv tools; do
echo "==> FABRIC IMAGE: $IMAGES"
echo
docker pull hyperledger/fabric-$IMAGES:$FABRIC_TAG
docker tag hyperledger/fabric-$IMAGES:$FABRIC_TAG hyperledger/fabric-$IMAGES
done
}
- dockerCaPull:
dockerCaPull() {
local CA_TAG=$1
echo "==> FABRIC CA IMAGE"
echo
docker pull hyperledger/fabric-ca:$CA_TAG
docker tag hyperledger/fabric-ca:$CA_TAG hyperledger/fabric-ca
}
- dockerThirdPartyImagesPull:
dockerThirdPartyImagesPull() {
local THIRDPARTY_TAG=$1
for IMAGES in couchdb kafka zookeeper; do
echo "==> THIRDPARTY DOCKER IMAGE: $IMAGES"
echo
docker pull hyperledger/fabric-$IMAGES:$THIRDPARTY_TAG
docker tag hyperledger/fabric-$IMAGES:$THIRDPARTY_TAG hyperledger/fabric-$IMAGES
done
}
命令一条一条pull&tag
直接命令行执行这三个函数中执行的命令
docker pull hyperledger/fabric-peer:1.3.0
docker tag hyperledger/fabric-peer:1.3.0 hyperledger/fabric-peer
docker pull hyperledger/fabric-orderer:1.3.0
docker tag hyperledger/fabric-orderer:1.3.0 hyperledger/fabric-orderer
docker pull hyperledger/fabric-ccenv:1.3.0
docker tag hyperledger/fabric-ccenv:1.3.0 hyperledger/fabric-ccenv
docker pull hyperledger/fabric-javaenv:1.3.0
docker tag hyperledger/fabric-javaenv:1.3.0 hyperledger/fabric-javaenv
docker pull hyperledger/fabric-tools:1.3.0
docker tag hyperledger/fabric-tools:1.3.0 hyperledger/fabric-tools
docker pull hyperledger/fabric-ca:1.3.0
docker tag hyperledger/fabric-ca:1.3.0 hyperledger/fabric-ca
docker pull hyperledger/fabric-couchdb:1.3.0
docker tag hyperledger/fabric-couchdb:1.3.0 hyperledger/fabric-couchdb
docker pull hyperledger/fabric-kafka:1.3.0
docker tag hyperledger/fabric-kafka:1.3.0 hyperledger/fabric-kafka
docker pull hyperledger/fabric-zookeeper:1.3.0
docker tag hyperledger/fabric-zookeeper:1.3.0 hyperledger/fabric-zookeeper
看一下是否都下载好了:
docker images | grep hyperledger*
或者直接执行bootstrap.sh,跳过前两步直接只下载镜像:
./bootstrap.sh 1.3.0 -s -b
四、跑一下demo
进入到fabric-samples目录下的first-network
执行:
./byfn.sh generate
./byfn.sh up
打印一堆东西后能看到下图就对了即(一个大大的字符END)
阿里云会报错:After 10 attempts,peer0.org1 has failed to join channel ‘mychannel’
这时修改/etc/resolv.conf文件,将里面options timeout:2 attempts:3 rotate single-request-reopen注释掉
更改前:
nameserver 100.100.2.136
nameserver 100.100.2.138
options timeout:2 attempts:3 rotate single-request-reopen
更改后
nameserver 100.100.2.136
nameserver 100.100.2.138
#options timeout:2 attempts:3 rotate single-request-reopen