区块链Hyperledger(超级账本)Fabric v1.0 的环境搭建(以及错误汇总)

1.虚拟机上创建Ubuntu系统

2.查看apt source是国内的:执行sudo vi /etc/apt/sources.list 查看apt列表http://cn则是国内(如果是国外,输入 :%s/us./cn./g )然后输入 :wq保存退出

3.安装Docker:使用阿里云安装curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh - ;使用DaoCloud安装 curl -sSL https://get.daocloud.io/docker | sh 两种方式都不可以的情况下;执行sudo apt-get update 通过apt-get安装, 输入apt-get -y install docker.io(如果权限不够则需要加上sudo)

4.修改当前用户的权限 sudo usermod -aG docker YOURNAME

5.添加阿里云的Docker Hub镜像

  1. 执行sudo mkdir -p /etc/docker;
  2. 执行sudo gedit /etc/docker/daemon.json,打开daemon后复制

{

 "registry-mirrors": ["https://obou6wyb.mirror.aliyuncs.com"]

}

保存并退出;最后执行sudo systemctl daemon-reload和sudo systemctl restart docker

6.最后检查docker版本,执行docker version(权限不够则加sudo,切换成root账号执行 sudo su,退出执行sudo -i或者 ctrl+D)

7.安装Docker-Compose

  1. 首先通过apt安装python,输入sudo apt-get install python-pip;
  2. 然后输入curl -L https://get.daocloud.io/docker/compose/releases/download/1.9.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose;
  3. 最后输入chmod +x /usr/local/bin/docker-compose;
  4. 安装完成之后可以查看版本,docker-compose version(如果上述方法不行,可以执行sudo pip install docker-compose)

8.安装go  

  1. 首先更新apt-get执行sudo apt-get update;
  2. 安装ssh,这样可以用Xshell或者SecureCRT之类的客户端远程连接Ubuntu执行 sudo apt-get install ssh  
  3. 执行 wget https://storage.googleapis.com/golang/go1.9.linux-amd64.tar.gz(从官网获取go,如果命令行下载不成功则打开蓝灯将上述网址通过网页下载,放入对应的文件夹)
  4. 解压执行sudo tar -C /usr/local -xzf go1.9.linux-amd64.tar.gz
  5. 编辑当前用户的环境变量执行 vi ~/.profile;添加以下内容

export PATH=$PATH:/usr/local/go/bin

export GOROOT=/usr/local/go

export GOPATH=$HOME/go

export PATH=$PATH:$HOME/go/bin

:wq保存退出 (vim编辑指令参考https://blog.csdn.net/csdn_yl/article/details/74563059)

      6.cd ~ 回到根目录  mkdir go 创建go文件夹

注:如果是网页下载然后移到对应目录命令行指令先cd去到对应的父目录下 然后执行sudo mv go /usr/local/

 

9.Fabric源码下载

  1. 创建路径(可手动)mkdir –p ~/go/src/github.com/hyperledger,
  2. 进入改路径cd ~/go/src/github.com/hyperledger
  3. Git下载源码git clone https://github.com/hyperledger/fabric.git
  4. 进入fabric目录cd ~/go/src/github.com/hyperledger/fabric,选择版本git checkout v1.0.0

 

10.Fabric Docker镜像的下载

  1. 到e2e_cil下 cd ~/go/src/github.com/hyperledger/fabric/examples/e2e_cli/
  2. 下载所需镜像 source download-dockerimages.sh -c x86_64-1.0.0 -f x86_64-1.0.0(没有权限时切换到root账户,还是无法下载时,或者权限不够时采用命令行 sudo sh download-dockerimages.sh -c x86_64-1.0.0 -f x86_64-1.0.0) 如果下载镜像出现版本不对,首先删除全部镜像执行docker rmi -f $(docker images -q),然后重新获取。

 

11.Fabric启动并测试chainCode

Cd到e2e_cli文件中,执行命令./network_setup.sh up 

这个指令具体进行了如下操作:
           编译生成Fabric公私钥、证书的程序,程序在目录:fabric/release/linux-amd64/bin

基于configtx.yaml生成创世区块和通道相关信息,并保存在channel-artifacts文件夹。

基于crypto-config.yaml生成公私钥和证书信息,并保存在crypto-config文件夹中。

基于docker-compose-cli.yaml启动1Orderer+4Peer+1CLI的Fabric容器。

在CLI启动的时候,会运行scripts/script.sh文件,这个脚本文件包含了创建Channel,加入Channel,安装Example02,运行Example02等功能

 

12.执行network_setup.sh可能会遇到的问题

启动e2e_cli时可能会出现无法启动的问题,例如出现启动失败 error 001解决方式如下:

A. fabric docker镜像的版本和git branch 要相同(查看镜像版本:docker images,查看分支版本再fabric目下执行git branch -a 查看版本,如果不是执行git checkout v1.0.0,)

B. 检查完版本之后cd到fabric目录下执行 make cryptogen(不能再root下执行该操作,之前配置的环境变量为用户环境变量) 如果返回Error 2表明缺少Itdl.h文件,执行apt-get install libtool libltdl-dev(如果出现使用apt-get时无法获得锁的情况,执行ps -aux|pre apt-get查看进程,然后执行kill 进程ID,杀掉该进程;或者直接删除进程锁执行sudo rm /var/lib/dpkg/lock)

C. 如果执行make cryptogen 出现No go in PATH:Check dependencies,可做以下操作切换到go目录修改权限 执行 sudo chmod 777 -R .

D. 检查下载镜像时是否少下载了,以下是所需镜像及其对应下载执行的命令行(红色是可能缺少部分)

docker pull hyperledger/fabric-tools:x86_64-1.0.0

docker pull hyperledger/fabric-couchdb:x86_64-1.0.0

docker pull hyperledger/fabric-kafka:x86_64-1.0.0

docker pull hyperledger/fabric-orderer:x86_64-1.0.0

docker pull hyperledger/fabric-peer:x86_64-1.0.0

docker pull hyperledger/fabric-ca:x86_64-1.0.0

docker pull hyperledger/fabric-ccenv:x86_64-1.0.0

docker pull hyperledger/fabric-baseimage:x86_64-0.4.7

docker pull hyperledger/fabric-baseos:x86_64-0.4.7

docker pull hyperledger/fabric-zookeeper:x86_64-1.0.0

docker pull hyperledger/fabric-javaenv:x86_64-1.0.0

docker pull hyperledger/fabric-membersrvc:latest

E.再次执行./network_setup.sh up 如果还是出现Error: Error connecting due to rpc error: code = Unavailable desc = grpc: the connection is unavailable

F.查看当前系统防火墙状态是否为关闭执行:sudo ufw status(如果没有关闭则关闭防火墙 sudo ufw disable )

G.查看报错前一条语句如果是orderer.example.com,再hosts文件添加127.0.0.1  orderer.example.com;保存退出后,然后执行 docker ps -a 查看是否运行,如果为exited状态。执行docker logs -f orderer.example.com 查看日志遇到报错如下:unable to bootstrap order.Error reading genesis block file: read /sur.../orderer.genesis.block:is a directory,则是因为再e2e_cli下的channel-artifacts里的genesis.block文件生成错误,删除该文件夹

H.(切换到root权限,非root权限重新生成的genesis.block文件还是一个空的文件夹)重新执行./network_setup.sh up

I..如果出现unable to pull the images报错,需要执行docker stop $(docker ps -a -q)关闭所有容器,再执行 docker rm $(docker ps -a -q)删除所有容器,再次执行./network_setup.sh up

J.出现API error(404):{“message”:”network e2ecli_detault not found”} 则说明e2e_cli/下的peer-base.yaml文件里面出现了问题,进入该文件将CORE_VMDOCKER_HOSTCONFIC_NETWORKMODE=e2ecli_default改成CORE_VMDOCKER_HOSTCONFIC_NETWORKMODE=e2e_cli_default

K.出现Got unexpected status: BAD_REQUEST报错,可能是channel的名字已经存在了,每一次执行./network_setup.sh up时要关闭和清理容器保证其销毁了依次执行docker stop $(docker ps -a -q)和docker rm $(docker ps -a -q)

 

13.手动测试Fabric网络

  1. 查看操作:进入e2e_cli文件输入docker exec -it cli bash,这个时候用户为root@748dafdc900b,在/opt/gopath/src/github.com/hyperledger/fabric/peer目录下,运行以下命令可以查询a账户的余额:peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'会显示Query Result:90(90为默认值)
  2. 转账操作:操作位invoke,例如由a转b50:peer chaincode invoke -o orderer.example.com:7050 --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n mycc -c '{"Args":["invoke","a","b","50"]}',执行完成之后,转账完毕,我们重复A步骤指令可查询该账户余额如果为40则成功

 

14.关闭Fabric,首先执行exit退出cli容器,然后再e2e_cli目录下执行关闭操作 ./network_setup.sh down

 

你可能感兴趣的:(区块链)