Ubuntu18/20安装Hyperledger Fabric(含创建docker镜像)

一、本机安装

本文为vm安装ubuntu虚拟机,如果系统中没有出现网络标志

方案一
sudo service network-manager restart
方案二
sudo service network-manager stop
sudo vim /etc/NetworkManager/NetworkManager.conf
把false改成true
sudo rm /var/lib/NetworkManager/NetworkManager.state
sudo service network-manager start

添加用户sudo权限

1、su root
2、chmod u+w /etc/sudoers
3、vim /etc/sudoers
4、在root ALL=(ALL:ALL) ALL下面添加XXX ALL=(ALL) ALL语句
5、chmod u-w /etc/sudoers

1.安装docker

#sudo apt install docker.io (暂时先不用此版本)
sudo apt install docker
sudo apt install docker-compose
sudo service docker start

2.安装GO

Fabric 2.1版以内可以使用
获取最新的软件包源,并添加至当前的apt库
sudo add-apt-repository ppa:longsleep/golang-backports
更新 apt库
sudo apt-get update
安装新版本
sudo apt-get install golang-go
指定版本
sudo apt-get install golang-1.8-go
不是最新版需要手动添加 sudo cp /usr/lib/go-1.8/bin/go /usr/bin/


Fabric2.2要求使用Go 1.14.6以上(1.14.4时启动多节点orderer会报错)
1. 
go1.14.6
wget https://studygolang.com/dl/golang/go1.14.6.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.14.6.linux-amd64.tar.gz
若按以上方式安装的原版本,删除方式:sudo rm -rf /usr/local/go

2. sudo vim /etc/profile中最后添加 export PATH=$PATH:/usr/local/go/bin
3. source /etc/profile 更新配置
重启后才能一直有效

设置环境变量
vim ~/.bashrc
export GOPATH="/home/dev/go" #最后一行加入
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOPATH/bin

source /etc/profile
echo $GOPATH 测试下是否生效

sudo apt install libtool libltdl-dev

3.安装curl和jq

sudo apt install curl

sudo apt-get install jq

4.创建目录

mkdir -p $GOPATH/src/github.com/hyperledger
cd $GOPATH/src/github.com/hyperledger
git clone https://github.com/hyperledger/fabric
如需切换版本git tag查看所有版本
git checkout v1.X 切换

5.安装依赖包(此条废弃)

go env -w GO111MODULE=on #安装protoc-gen-go时需要
go env -w GOPROXY=https://goproxy.io #官方代理地址

go get github.com/golang/protobuf/protoc-gen-go

#以下内容应该废弃了
mkdir -p $GOPATH/src/github.com/hyperledger/fabric/build/docker/gotools/bin
cp $GOPATH/bin/protoc-gen-go $GOPATH/src/github.com/hyperledger/fabric/build/docker/gotools/bin

6.编译Fabric模块

Fabric2.2
1.
go env -w GO111MODULE=on #安装protoc-gen-go时需要
go env -w GOPROXY=https://goproxy.io #官方代理地址
cd $GOPATH/src/github.com/hyperledger/fabric
go mod vendor
make release #如失败执行make clean 删除以编译的文件再重新编译,会删除已生成的可执行文件和下载的docker镜像(最新一次到这里报错,无法生成peer,直接从其它系统复制可执行文件)
#虚拟就在1核1G时编译peer出错,改为2核2g编译顺利通过。


检查是否安装好
./release/linux-amd64/bin/peer version
./release/linux-amd64/bin/orderer version
./release/linux-amd64/bin/configtxgen  -version
./release/linux-amd64/bin/configtxlator  version


安装可执行文件
sudo cp $GOPATH/src/github.com/hyperledger/fabric/release/linux-amd64/bin/* /usr/local/bin
sudo chmod -R 775 /usr/local/bin/configtxgen
sudo chmod -R 775 /usr/local/bin/configtxlator
sudo chmod -R 775 /usr/local/bin/cryptogen
sudo chmod -R 775 /usr/local/bin/peer
sudo chmod -R 775 /usr/local/bin/orderer

# 2.本地源代码生成Fabric模块的Docker镜像文件,以下步骤在v1.1.0时可成功,在v1.1.1时不可成功
# su root
# export GOPATH="/home/dev/go"
# go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/ #设置为阿里云的代理

2.下载所需docker镜像
sudo usermod -G docker userName 将用户加入docker组才有权限
newgrp docker 更新用户组
make docker

或从Docker仓库下载Fabric中的镜像步骤暂缺

7.Fabric-ca解决Fabric账号生成问题。由Fabric-ca-server和Fabirc-ca-client两个模块组成。

1.安装系统组件包
sudo apt install libtool libltdl-dev
2.下载源码并编译
cd $GOPATH/src/github.com/hyperledger
git clone https://github.com/hyperledger/fabric-ca

cd $GOPATH/src/github.com/hyperledger/fabric-ca
go env -w GO111MODULE=
make fabric-ca-server
make fabric-ca-client
3.安装编译好的可执行文件
cd $GOPATH/src/github.com/hyperledger/fabric-ca/bin
sudo cp * /usr/local/bin/

chmod -R 755 /usr/local/bin/fabric-ca-server
chmod -R 755 /usr/local/bin/fabric-ca-client

4.检查
fabric-ca-server version
fabric-ca-client version
显示版本则安装正确

8.开发客户端安装golang-sdk

mkdir -p $GOPATH/src/github.com/hyperledger
cd $GOPATH/src/github.com/hyperledger
git clone https://github.com/hyperledger/fabric-sdk-go

二、创建docker镜像

配置开发环境
docker run -it ubuntu:20.04 bash

apt-get update  
apt-get install wget 

wget https://studygolang.com/dl/golang/go1.16.linux-amd64.tar.gz
tar -C /usr/local -xzf go1.16.linux-amd64.tar.gz
rm go1.16.linux-amd64.tar.gz

apt-get install vim
vim /etc/profile中最后添加 export PATH=$PATH:/usr/local/go/bin
source /etc/profile 更新配置

设置环境变量
vim ~/.bashrc
export GOPATH="/home/dev/go" #最后一行加入
export GOBIN=$GOPATH/bin
export PATH=$PATH:/usr/local/go/bin:$GOPATH/bin
source .bashrc
echo $GOPATH 测试下是否生效

apt install libtool libltdl-dev
apt-get install jq

apt-get install git
mkdir -p $GOPATH/src/github.com/hyperledger
cd $GOPATH/src/github.com/hyperledger
git clone https://github.com/hyperledger/fabric
如需切换版本git tag查看所有版本
git checkout v1.X 切换
提交一次
docker commit -m='go1.16 install fabric2.4' -a='lingge879' 09d78fb8007a lingge879/fabric:1.0


go env -w GOPROXY=https://goproxy.io
go env -w GO111MODULE=on
cd $GOPATH/src/github.com/hyperledger/fabric
go mod vendor

apt-get install make
make release
在设置环境变量
vim ~/.bashrc末尾加上
export PATH=$PATH:/home/dev/go/src/github.com/hyperledger/fabric/release/linux-amd64/bin
source .bashrc
安装后再提交一次
docker commit -m='go1.16 install fabric2.4' -a='lingge879' 09d78fb8007a lingge879/fabric:1.1
docker push lingge879/fabric:1.1

下载
docker pull lingge879/fabric:1.1

使用docker镜像运行区块链网络

1.启动orderer

注意指定net网络,方法参见https://blog.csdn.net/zhanglingge/article/details/111573171第三章。如果是一个主机可以不指定-p参数,不用暴漏端口,因为有--net指定了一个网络,可以直接访问容器的端口。

docker run -it -d --net=test_net --name orderer.example.com -v /home/dev/work/example/organizations:/work/organizations -v /home/dev/work/example/order1:/work/order -v /home/dev/work/example/product/order1:/production -w /work/order -p 7050:7050  --ulimit core=0 lingge879/fabric:1.0.1 bash

docker exec -it orderer.example.com bash

2.启动peer

启动Org1 peer节点,注意需要映射主机的/var/run/docker.sock到容器中,因为在启动连码时需要将调用信息传递到主机上,让主机启动容器,主机需要链码运行基础镜像hyperledger/fabric-ccenv:2.3
#CORE_VM_ENDPOINT,注意官方docker-compse中有这个变量是否是一个作用CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock,变量这点尚未确认。(同上,可以不指定-p参数)

docker run -it -d --net=test_net --name peer0.org1.example.com -v /home/dev/work/example/organizations:/work/organizations -v /home/dev/work/example/org1_peer0:/work/peer -v /home/dev/work/example/product/org1_peer0:/production -v /var/run/docker.sock:/var/run/docker.sock -w /work/peer -p 7051:7051  --ulimit core=0 lingge879/fabric:1.0.1 bash

启动Org2 peer。(同上,可以不指定-p参数)

docker run -it -d --net=test_net --name peer0.org2.example.com -v /home/dev/work/example/organizations:/work/organizations -v /home/dev/work/example/org2_peer0:/work/peer -v /home/dev/work/example/product/org2_peer0:/production -v /var/run/docker.sock:/var/run/docker.sock -w /work/peer -p 8051:7051  --ulimit core=0 lingge879/fabric:1.0.1 bash

如下调用链码的代码,注意Org2的peer为7051

peer lifecycle chaincode commit -o orderer.example.com:7050 --channelID channel1 --init-required --name sacc --version 1.0 --sequence 1 --tls --cafile $ORDERER_TLSCA --peerAddresses peer0.org1.example.com:7051 --tlsRootCertFiles $CORE_PEER_TLS_ROOTCERT_FILE --peerAddresses peer0.org2.example.com:7051 --tlsRootCertFiles ${PWD}/../organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt

小结

1.需要映射主机的docker通信文件,用于容器中启动链码时在主机上生成链码镜像。
2.主机需要有镜像hyperledger/fabric-ccenv:2.3,用于生成链码。版本号与fabric的代码版本一致。且暂时没有2.4的镜像

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值