fabric-samples实践(搭建first-network)

Fabric学习笔记

Posted by Liu Ke on December 9, 2018

fabric-samples release-1.3

开始还是同样的事情,安装配置go、docker以及docker-compose等环境。之前的文章也有提过,如果这些环境已经配好,可以直接看第7部分下载fabric-samples

  1. 安装配置go
  2. 安装docker
  3. 安装docker-compose
  4. 安装更新pip
  5. 安装go相关的工具
  6. 安装fabric的部分依赖库
  7. 下载fabric-samples
  8. 安装依赖
  9. 生成创世信息
  10. 启动网络
  11. 启动过程解析

安装配置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启动过程实际上流程如下:

  1. 创建四个节点
  2. 创建一个ordering服务
  3. 创建了一个cli服务,可进入容器通过cli终端实现一些链上操作(docker exec -it cli bash
  4. 创建一个channel
  5. 将四个节点加入到这个channel中
  6. 更新加入到myChannel的节点所属的ordering服务和msp信息
  7. 安装默认的chaincode到peer0.org2节点上
  8. 实例化chaincode例子
  9. 对部署的chaincode的例子,调用链码的方法验证是否部署成功

Fork me on GitHub