fabric-samples release-1.3
开始还是同样的事情,安装配置go、docker以及docker-compose等环境。之前的文章也有提过,如果这些环境已经配好,可以直接看第7部分下载fabric-samples。
- 安装配置go
- 安装docker
- 安装docker-compose
- 安装更新pip
- 安装go相关的工具
- 安装fabric的部分依赖库
- 下载fabric-samples
- 安装依赖
- 生成创世信息
- 启动网络
- 启动过程解析
安装配置go
第一步,自然是安装和配置go的开发环境。对于ubuntu系统,如果直接使用apt-get
方式安装go,版本会非常老。
go官方的下载地址为https://golang.org/dl/,但是这个地址被墙了,可以从go语言中文网下载https://studygolang.com/dl。
wget https://studygolang.com/dl/golang/go1.11.linux-amd64.tar.gz
#解压
tar -C /usr/local -xzf go1.11.linux-amd64.tar.gz
配置系统环境变量:
centos修改~/.bash_profile
文件,ubuntu修改
~/.profile
文件,在文件末尾添加如下内容,保存。
export PATH=$PATH:/usr/local/go/bin
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$HOME/go/bin
GOROOT
为go的安装目录,GOPATH
为go的工作目录。使用命令source ~/.bash_profile
使修改立即生效。我设置~/go
为go的工作目录,所以需要在创建该文件夹。
cd ~
mkdir go
mkdir go/src
mkdir go/bin
mkdir go/pkg
安装docker
可以按照docker官方的文档来安装。
CentOS:https://docs.docker.com/install/linux/docker-ce/centos/
Ubuntu:https://docs.docker.com/install/linux/docker-ce/ubuntu/
也可以使用阿里云镜像来安装,阿里云的相关文档为:https://yq.aliyun.com/articles/110806
对于阿里云的方式,可以使用如下方式自动安装:
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
安装完成后需要修改当前用户(我使用的用户叫ke)权限,将当前用户添加到docker用户组里:
sudo usermod -aG docker ke
重新启动系统,添加阿里云docker镜像加速器,可以提升获取Docker官方镜像的速度。 阿里云的官方文档为:https://cr.console.aliyun.com/cn-beijing/mirrors
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://nan4hd4m.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
安装docker-compose
参考docker-compose的官网:https://github.com/docker/compose/releases,使用如下命令进行安装:
curl -L https://github.com/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
命令是用于增加权限。
安装更新pip
sudo apt-get update
sudo apt-get install python-pip
pip install --upgrade pip
安装go相关的工具
由于golang.org
这个网址被墙,我们需要从github
获取到go相关的tool包,步骤如下:
mkdir –p $GOPATH/src/golang.org/x
cd $GOPATH/src/golang.org/x
git clone https://github.com/golang/tools.git
通过如下命令安装fabric用到的一些go的工具:
go get github.com/kardianos/govendor
go get github.com/golang/lint/golint
go get golang.org/x/tools/cmd/goimports
go get github.com/onsi/ginkgo/ginkgo
go get github.com/axw/gocov/...
go get github.com/client9/misspell/cmd/misspell
go get github.com/AlekSi/gocov-xml
go get github.com/golang/protobuf/protoc-gen-go
上面的go get github.com/golang/lint/golint
可能会由于墙的原因无法安装成功,可以在https://www.golangtc.com/download/package地址下载这个第三方包,并安装,链接内有详细安装教程。
Fabric用到了go官方依赖管理工具dep,使用如下命令来安装:
go get -u github.com/golang/dep/cmd/dep
go install github.com/golang/dep/cmd/dep
安装fabric的部分依赖库
ubuntu:
sudo apt-get install libltdl-dev
sudo apt-get install jq
CentOS:
yum install -y git bzip2 gcc gcc-c++ libtool libltdl-dev libtool-ltdl-devel openssl
yum install jq
下载fabric-samples
在fabric的官方文档里,https://hyperledger-fabric.readthedocs.io/en/latest/install.html,是使用curl -sSL http://bit.ly/2ysbOFE | bash -s 1.3.0
这个命令来直接一键下载相关的例子、二进制文件和镜像,命令执行完成后,会在当前目录生成一个 fabric-samples的目录。 但是有时候这个地址会因为网络原因无法下载,所以我们直接从github上clone相应的库,来手动进行。
git clone https://github.com/hyperledger/fabric-samples.git
安装依赖
打开fabric-samples
目录,执行bootstrap.sh
这个脚本,安装所需的镜像等依赖。
./scripts/bootstrap.sh
一般安装的是默认的版本。也可以通过参数来指定./scripts/bootstrap.sh [version] [ca version] [thirdparty_version]
生成创世信息
打开fabric-samples/first-network
目录,执行以下命令生成密钥和创世信息。
cd fabric-samples/first-network
././byfn.sh generate
生成的公私钥信息保存在crypto-config
文件夹,对应的配置文件为crypto-config.yaml
文件。
创世区块、channel配置信息和锚节点信息等都保存在channel-artifacts
文件夹中。
启动网络
./byfn.sh up
最后出现如下信息,则表明网络正常启动。
========= All GOOD, BYFN execution completed ===========
_____ _ _ ____
| ____| | \ | | | _ \
| _| | \| | | | | |
| |___ | |\ | | |_| |
|_____| |_| \_| |____/
可以使用docker ps
查看容器的运行情况。
使用docker exec -it cli bash
可以进入到容器中去。 docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
。
启动过程解析
byfn.sh up
启动过程实际上流程如下:
- 创建四个节点
- 创建一个ordering服务
- 创建了一个cli服务,可进入容器通过
cli
终端实现一些链上操作(docker exec -it cli bash
) - 创建一个channel
- 将四个节点加入到这个channel中
- 更新加入到myChannel的节点所属的ordering服务和msp信息
- 安装默认的chaincode到peer0.org2节点上
- 实例化chaincode例子
- 对部署的chaincode的例子,调用链码的方法验证是否部署成功