老板在重庆部署了6台服务器,将其中4台虚拟化之后使用第五台集中管理。现根据官方文档与其他博客的提示,部署Fabric1.4环境。在部署过程中遇到一些问题,记录一下。
1. 准备工作
虚拟机基本配置如下:
$ sudo apt-get update
$ sudo apt-get install git
$ sudo apt-get install curl
2. docker与docker-compose的安装
2.1 Docker-CE安装
2.1.1 更换软件源
# 使用中国科技大学的软件源
$ sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
$ sudo sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
sudo apt update
2.1.2 安装需要的包
$ sudo apt install apt-transport-https ca-certificates software-properties-common curl
2.1.3 添加GPG密钥
$ sudo curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
2.1.4 添加Docker-CE软件源
$ sudo add-apt-repository "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu
$(lsb_release -cs) stable"
# 记得更新一下软件包
$ sudo apt update
2.1.5 安装Dokcer-CE
$ sudo apt install docker-ce
2.1.6 测试运行
$ sudo docker run hello-world
输入sudo docker version
,当出现以下内容时则说明docker已安装成功:
$ sudo apt-get install python-pip
$ sudo pip install docker-compose
2.2.2 测试
$ sudo docker-compose version
当出现以下内容时则说明docker-compose已安装成功:
$ wget https://studygolang.com/dl/golang/go1.12.1.linux-amd64.tar.gz
3.2 go的安装
$ sudo tar -xzf go1.12.1.linux-amd64.tar.gz
$ sudo mv go /usr/local
3.3 go环境变量配置
管理员权限打开/etc/profile文件:
$ sudo vim /etc/profile
在文件尾部加入go的环境变量(输入i
进入编辑模式):
export PATH=$PATH:/usr/local/go/bin
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$HOME/go/bin
Esc键退出编辑模式,输入:wq!
保存并退出;
执行source /etc/profile
命令,让修改后的环境变量生效。
$ go version
当出现以下内容时则说明go已安装成功:
P.S. 参考博客
$ wget https://nodejs.org/dist/v10.16.2/node-v10.16.2-linux-x64.tar.xz
4.2 解压安装
# 解压到/opt目录下
$ sudo tar xvf node-v10.16.2-linux-x64.tar.xz -C /opt
4.3 将node.js设置为全局可用
管理员权限打开/etc/profile文件:
$ sudo vim /etc/profile
在文件尾部加入配置项(输入i
进入编辑模式):
export NODEJS_HOME=/opt/node-v10.16.2-linux-x64
export PATH=$PATH:$NODEJS_HOME/bin
Esc键退出编辑模式,输入:wq!
保存并退出;
执行. /etc/profile
命令,重新加载配置文件。
$ node -v
当出现以下内容时则说明node.js已安装成功:
P.S. 参考博客
5. Fabric的安装 5.1 创建并进入工作目录$ mkdir -p $GOPATH/src/github.com/hyperledger/
$ cd $GOPATH/src/github.com/hyperledger/
5.2 克隆源码
$ git clone https://github.com/hyperledger/fabric.git
$ cd fabric
$ git checkout v1.4.0
5.3 下载镜像和fabric-samples
$ cd scripts/
执行scripts目录中的bootstrap.sh脚本会自动下载fabric-samples和fabric镜像:
./bootstrap.sh
5.4 测试
$ sudo docker images
当出现以下内容时则说明镜像部署成功:
至此,Fabric1.4的基础环境已搭建完成。
$ cd $GOPATH/src/github.com/hyperledger/fabric/scripts/fabric-samples/first-network
$ ./byfn.sh up
当出现以下内容时则说明网络已启动成功:
$ docker exec -it cli bash
# 此时初始状态为a: 90, b: 210
6.2.2 查询“a”
peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'
结果显示:
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 --peerAddresses peer0.org1.example.com:7051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses peer0.org2.example.com:7051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"Args":["invoke","a","b","10"]}'
交易成功结果:
peer chaincode query -C mychannel -n mycc -c '{"Args":["query","b"]}'
结果显示:
交易成功!
执行exit
退出容器,之后执行:
./byfn.sh down
当出现以下内容时则说明网络已关闭:
开机之后运行sudo apt update就遇到问题,报错如下:
E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)
E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?
apt还在运行。
解决方案:1、ps afx|grep apt
查找所有的apt进程,全部kill
2、删除锁定文件:
sudo rm /var/lib/dpkg/lock
// 移除对应目录下的锁文件;
sudo dpkg --configure -a
// 强制重新配置软件包;
sudo apt update
//更新软件包源文件
P.S.参考博客
问题二 问题:本地server出现磁盘已满。
原因:fabric-samples与fabric镜像较大。
解决方案:1、输入df -h
查看磁盘使用情况,发现磁盘/dev/mapper/ubuntu–vg-ubuntu–lv满了,故对其进行扩容;
2、输入sudo vgdisplay
查看存在的卷组,根据Alloc PE / Size、Free PE / Size确定扩容量;
3、输入sudo lvextend -L 8G /dev/mapper/ubuntu--vg-ubuntu--lv
,扩容8G;
4、输入sudo resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv
,重新计算磁盘大小。
P.S.参考博客
问题三 问题:新建虚拟机时选择克隆现有虚拟机,启动fabric网络时报错如下:
ERROR: Couldn’t connect to Docker daemon at http+docker://localhost - is it running?
docker不是系统服务方式启动。
解决方案:1、cd ~
返回根目录;
2、sudo gpasswd -a ${USER} docker
将当前用户加入docker用户组;
3、sudo su
将当前用户切换到root;
4、su ubuntu
再切换回Ubuntu;
5、docker-compose up -d
最后执行。
新建虚拟机时选择克隆现有虚拟机,启动fabric网络时报错如下:
Error: got unexpected status: BAD_REQUEST – error authorizing update: error validating ReadSet: readset expected key [Group] /Channel/Application at version 0, but got version 1
有一个已经存在的channel,阻止进一步的执行而引起的。
解决方案:1、输入./byfn.sh -m restart -c mychannel