本文主要基于 Hyperledger fabric 的官方文档来搭建其实验环境,但官方文档对于很多步骤都有省略,结合网上比较新的博客,在一台 Ubuntu 14.04 机器(没用通过测试,换成了16.04的虚拟机)上来安装部署 fabric 的环境。
查看系统版本$ cat /proc/version
切换至root用户sudo -i
更换 apt 源
先备份 sources.list 文件:$ sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
再修改 sources.list 文件(全部替换即可),换成阿里云的国内源:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18$ sudo vim /etc/apt/sources.list
deb-src http://archive.ubuntu.com/ubuntu xenial main restricted #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse #Added by software-properties
deb http://archive.canonical.com/ubuntu xenial partner
deb-src http://archive.canonical.com/ubuntu xenial partner
deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-security multiverse
最后更新一下源:$ sudo apt-get update
安装 curl
Ubuntu一般默认是安装了 curl 的,可以通过以下命令验证:
$ curl -V
如果没有安装,则通过 apt-get 安装:
$ sudo apt-get install curl
安装 Docker
由于 apt 源使用HTTPS以确保软件下载过程中不被篡改。因此,我们首先需要添加使用HTTPS传输的软件包以及CA证书。
1
2
3
4
5$ sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
software-properties-common为了确认所下载软件包的合法性,需要添加软件源的 GPG 秘钥
$ curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
然后,我们需要向 sources.list 中添加 Docker 软件源
1
2
3
4$ sudo add-apt-repository \
"deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu \
$(lsb_release -cs) \
stable"以上命令会添加稳定版本的Docker CE apt 镜像源。
更新 apt 软件包缓存,并安装 docker-ce:
$ sudo apt-get update
$ sudo apt-get install docker-ce
查看 Docker 版本:
$ docker -v
满足官方文档中 Docker version 17.06.2-ce or greater is required 的要求。
启动 Docker CE
Ubuntu 16.04 使用:$ sudo systemctl enable docker
$ sudo systemctl start docker
Ubuntu 14.04 使用:
$service docker start
建立 docker 用户组
默认情况下,docker 命令会使用 Unix socket 与 Docker 引擎通讯。而只有 root 用户和 docker 组的用户才可以访问 Docker 引擎的 Unix socket。出于安全考虑,一般 Linux 系统上不会直接使用 root 用户。因此,更好地做法是将需要使用 docker 的用户加入 docker 用户组。
$ sudo groupadd docker
其实一般按照上面的方法安装 Docker 后就已经创建好 docker 用户组了,可以使用$ cat /etc/group | grep docker
命令来验证,所以就不需要再建立 docker 用户组了,再建立也会报错提示用户组已存在的。将当前用户加入 docker 用户组:
$ sudo usermod -aG docker $USER
下次登录时即可方便的使用 docker 命令。测试 Docker 是否安装正确
$ docker run hello-world
配置镜像加速器
国内从 Docker Hub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。Docker 官方和国内很多云服务商都提供了国内加速器服务,例如:
- Docker 官方提供的中国 registry mirror https://registry.docker-cn.com
- 七牛云加速器 https://reg-mirror.qiniu.com/
当配置某一个加速器地址之后,若发现拉取不到镜像,请切换到另一个加速器地址。国内各大云服务商均提供了 Docker 镜像加速服务,建议根据运行 Docker 的云平台选择对应的镜像加速服务。
我们以 Docker 官方加速器 https://registry.docker-cn.com 为例进行介绍。
在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在则创建)
1
2
3
4
5
{
"registry-mirrors": [
"https://registry.docker-cn.com"
]
}
之后重新启动服务
Ubuntu16.04:$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
Ubuntu14.04:$ service docker restart
安装 Docker Compose
通过二进制包来安装,从 官方 GitHub Release 处直接下载编译好的二进制文件即可。
`$ sudo curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose`
`$ sudo chmod +x /usr/local/bin/docker-compose`
查看 Docker compose 版本
$ docker-compose --version
满足官方文档中 Docker Compose version 1.14.0 or greater 的要求。
安装 Go 语言环境
Hyperledger Fabric 在很多组件中使用了 Go 语言,并且 Hyperledger fabric 1.2.0 要求使用的是 GO version 1.10.x ,所以需要在我们的环境中安装对应的 Go 语言。
从官网下载 1.10.x 版本的 Linux 平台的源码包
$ wget https://dl.google.com/go/go1.10.3.linux-amd64.tar.gz
解压到指定目录
$ sudo tar zxvf go1.10.3.linux-amd64.tar.gz -C /usr/local/
先创建 Go 的工作目录
$ mkdir ~/go
配置环境变量
$ vi ~/.bashrc
添加1
2
3export GOROOT=/usr/local/go
export GOPATH=/home/zkq/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin保存并使生效:
$ source ~/.bashrc
测试 Go 的 demo 程序
$ cd ~/go
$ vi hello.go
1
2
3
4
5
6
7package main
import "fmt"
func main() {
fmt.Printf("hello world\n")
}$ go build hello.go
$ ./hello
在这里遇到一个问题(在虚拟机上没遇到这个问题):
在网上查到的解决办法是:解决办法$ unset GOROOT
Fabric 源码下载
首先创建存放源码的文件夹:
$ mkdir -p ~/go/src/github.com/hyperledger
- 进入刚创建的目录:
$cd ~/go/src/github.com/hyperledger
使用 Git 下载完整源码(有点慢):
$ git clone https://github.com/hyperledger/fabric.git
进入 fabric 目录查看版本分支并切换分支:
$ cd fabric
$ git branch
- release-1.2
$ git checkout v1.0.0
由于在 release-1.2 版本中碰到没有解决的问题,所以先切换到 v1.0.0 来完成搭建并测试的过程。
Fabric Docker 镜像下载
进入 ~/go/src/github.com/hyperledger/fabrci/examples/e2e_cli/ 目录,完成镜像下载,执行命令:
$ cd ~/go/src/github.com/hyperledger/fabrci/examples/e2e_cli/
$ ls
$ source download-dockerimages.sh -c x86_64-1.0.0 -f x86_64-1.0.0
(时间较久,耐心等待)$ docker image list
启动 fabric 网络并完成 chaincode 测试
还是在刚刚的 e2e_cli 文件加下,执行:
$ ./network_setup.sh up
最后出现上面字符说明 fabric 网络已经启动并完成了 chaincode 的测试。这一步没有成功,所以上面图片暂时没有。