一、软件下载与安装
1、Oracle VM VirtualBox 是一款虚拟机软件。(官网下载地址https://www.virtualbox.org/wiki/Downloads)
2、Vagrant 是一个可创建轻量级、高复用性和便于移植的开发环境的工具,用于创建和部署虚拟化开发环境。(官网下载地址https://www.vagrantup.com/downloads.html)
3、Git 一个开源的分布式版本控制系统。(官网下载地址https://git-scm.com/downloads)
二、开发环境搭建
上述软件安装完成后,开始使用Vagrant创建开发环境的虚拟机。首先选择一个文件夹,使用如下命令将Hyperledger Fabric项目克隆到本地并启动Vagrant。
#克隆项目
git clone https://github.com/hyperledger/fabric.git
#进入vagrant虚拟机目录
cd fabric/devenv
#启动vagrant
vagrant up
#连接virtualbox虚拟机
vagrant ssh
第一次执行vagrant up命令时,系统会先寻找是否存在所需的box镜像文件,如果没有找到,则会自动进行下载,创建VirtualBox虚拟机,之后会采用ssh协议连接虚拟机,执行已经写好的shell脚本进行开发环境的配置。环境配置如下:
(1)更新系统
sudo apt-get update
(2)安装一些基础的工具软件
sudo apt-get install -y build-essential git make curl unzip g++ libtool
(3)安装Docker和docker-compose
#1、添加远程仓库地址
#安装以下包以使apt可以通过HTTPS使用存储库(repository)
sudo apt-get -y install apt-transport-https ca-certificates curl
#添加Docker官方的GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
#使用下面的命令来设置stable存储库
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
#更新一下apt包索引
sudo apt-get update
#2、安装Docker
sudo apt-get -y install docker-ce
#3、测试Docker
sudo docker run hello-world
如果显示一下结果,则表示Docker安装成功
vagrant@ubuntu-xenial:~$ sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
9db2ca6ccae0: Pull complete
Digest: sha256:4b8ff392a12ed9ea17784bd3c9a8b1fa3299cac44aca35a85c90c5e3c7afacdc
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
在Docker安装完成之后,还需额外安装docker-compose工具,从而可以通过配置文件来部署与启动容器,docker-compose安装使用如下命令
sudo curl -L "http://github.com/docker/compose/releases/download/1.11.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
查看Docker和docker-compose的版本,如显示一下结果,则Docker环境安装完成。
vagrant@ubuntu-xenial:~$ docker -v
Docker version 18.06.0-ce, build 0ffa825
vagrant@ubuntu-xenial:~$ docker-compose -v
docker-compose version 1.11.2, build dfed245
由于国内无法访问Docker官方站点,可以访问一些镜像站,比如阿里云、CloudDao等,通过下面命令设置CloudDao配置Docker加速器,快速下载Docker镜像。
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://176a5be3.m.daocloud.io
#重启服务
sudo systemctl restart docker.service
(4)安装Go语言环境
1、首先访问官网https://golang.org/dl/,如下图
2、选择Linux版本,复制下载链接,使用如下命令下载。
#创建一个文件夹
mkdir Download
#进去该文件夹
cd Download
#下载
wget https://storage.googleapis.com/golang/go1.10.3.linux-amd64.tar.gz
3、解压压缩文件go1.10.3.linux-amd64.tar.gz到/usr/local/目录下,安装Go
sudo tar -C /usr/local -xzf go1.10.3.linux-amd64.tar.gz
4、配置Go环境变量
mkdir $HOME/go
sudo vim /etc/profile
#在/etc/profile文件中的判断语句下方添加下面的Go环境变量
export PATH=$PATH:/usr/local/go/bin
export GOPATH=$HOME/go
#修改后的profile文件如下所示:
if [ -d /etc/profile.d ]; then
for i in /etc/profile.d/*.sh; do
if [ -r $i ]; then
. $i
fi
done
unset i
fi
export PATH=$PATH:/usr/local/go/bin
export GOPATH=$HOME/go
#执行source命令使其生效,然后使用go env命令输出Go环境配置信息。
source /etc/profile
go env
5、测试Go语言
输入以下命令:
cd $GOPATH
mkdir -p src/hello
cd src/hello/
vim hello.go
输入测试代码:
package main
import "fmt"
func main(){
fmt.Printf("hello, world\n")
}
保存退出,使用go build命令编译后执行,显示如下结果则代表Go环境配置成功。
vagrant@ubuntu-xenial:~/go/src/hello$ go build
vagrant@ubuntu-xenial:~/go/src/hello$ ls
hello hello.go
vagrant@ubuntu-xenial:~/go/src/hello$ ./hello
hello, world
vagrant@ubuntu-xenial:~/go/src/hello$
(5)安装Node.js, Node.js是一个JavaScript的运行环境,可以方便地搭建响应速度快、易于扩展的网络应用
sudo apt-get install nodejs
sudo apt install nodejs-legacy
sudo apt install npm
如要安装最新的可参看该博客https://blog.csdn.net/u014361775/article/details/78865582
(6)安装Java环境,因为Fabric支持Java链码的编写。
sudo apt-get install -y openjdk-8-jdk maven
如下显示则安装成功
vagrant@ubuntu-xenial:~$ java -version
openjdk version "1.8.0_171"
OpenJDK Runtime Environment (build 1.8.0_171-8u171-b11-0ubuntu0.16.04.1-b11)
OpenJDK 64-Bit Server VM (build 25.171-b11, mixed mode)
vagrant@ubuntu-xenial:~$ javac -version
javac 1.8.0_171
到此配置基本完成,Vagrant提供了一种便捷且全面的开发环境搭建方式,它需要基于VirtualBox虚拟机,然而最终应用往往是运行在物理服务器上的。而针对物理机上Fabric开发环境的构建,Fabric最核心的两项是Go语言环境和Docker环境的构建。Fabric源码采用Go语言进行编写,而Fabric应用则均以Docker容器的方式运行。至于其他的工具与软件,可以根据开发是的需求自行选择。
三、e2e_cli测试运行
因为前面的配置都是在VM上的,所以测试就在VM上了。
(1)拉取源码
#新建目录,因为fabric里面的包引用都是有特别的路径的
cd $GOPATH/src
mkdir -p github.com/hyperledger
cd github.com/hyperledger
#下载源码
git clone https://github.com/hyperledger/fabric.git
#如果怕下载慢,可以直接把主机中的fabric拷贝过来,共享文件夹在VM的 /hyperledger
cp -rf /hyperledger/fabric/ fabric
(2)编译configtxgen
工具
在fabric目录下执行已选命令:
cd $GOPATH/src/github.com/hyperledger/fabric
make configtxgen
# 如果出错:'ltdl.h' file not found
sudo apt install libtool libltdl-dev
# 然后再运行make
make configtxgen
编译成功后输出:
.build/bin/configtxgen
CGO_CFLAGS=" " GOBIN=/root/go/src/github.com/hyperledger/fabric/.build/bin go install -tags "" -ldflags "-X github.com/hyperledger/fabric/common/tools/configtxgen/metadata.CommitSHA=" github.com/hyperledger/fabric/common/tools/configtxgen
Binary available as .build/bin/configtxgen
编译后执行文件放在Fabric目录下的的build/bin/configtxgen
(3)执行完整脚本
进入examples/e2e_cli
目录,首先从Docker Hub拉取镜像:
# 使脚本可执行
chmod +x download-dockerimages.sh
# 执行脚本
./download-dockerimages.sh
然后就会开始给你下载镜像, 完成后输入一下命令查看:
docker images
如果有些没成功,可输入以下命令手动下载:
docker pull hyperledger/fabric-orderer:latest
docker pull hyperledger/fabric-peer:latest
docker pull hyperledger/fabric-zookeeper:latest
docker pull hyperledger/fabric-couchdb:latest
docker pull hyperledger/fabric-kafka:latest
docker pull hyperledger/fabric-ca:latest
docker pull hyperledger/fabric-ccenv:latest
docker pull hyperledger/fabric-javaenv:latest
完成后执行脚本
#如果没有设置channel-ID参数,channel名默认是mychannel。
./network_setup.sh up <channel-ID>
开始执行
____ _____ _ ____ _____ _____ ____ _____
/ ___| |_ _| / \ | _ \ |_ _| | ____| |___ \ | ____|
\___ \ | | / _ \ | |_) | | | _____ | _| __) | | _|
___) | | | / ___ \ | _ < | | |_____| | |___ / __/ | |___
|____/ |_| /_/ \_\ |_| \_\ |_| |_____| |_____| |_____|
Channel name : mychannel
Check orderering service availability...
执行成功后输出:
===================== Query successful on peer1.org3 on channel 'mychannel' =====================
===================== All GOOD, End-2-End execution completed =====================
_____ _ _ ____ _____ ____ _____
| ____| | \ | | | _ \ | ____| |___ \ | ____|
| _| | \| | | | | | _____ | _| __) | | _|
| |___ | |\ | | |_| | |_____| | |___ / __/ | |___
|_____| |_| \_| |____/ |_____| |_____| |_____|
此时,网络启动运行并测试成功。