ubuntu16.04下fabric v1.0.0手动多步骤安装(单机版)

1. 安装docker与docker-compose(docker-compose要支持v2版本的yaml)

参考https://docs.docker.com/install/linux/docker-ce/ubuntu/

1.1 使用国内阿里源安装docker

curl -fsSLhttp://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

add-apt-repository "deb [arch=amd64]http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs)stable"

sudo apt-get -y update

sudo apt-get install docker-ce

1.2 添加阿里云的docker hub镜像

sudo mkdir -p /etc/docker

vim /etc/docker/daemon.json

添加

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

重启docker

sudo systemctl daemon-reload 加载docker.service

sudo systemctl restart docker.service 重启docker服务

1.3 安装docker-compose(docker-compose是python下的编排工具)

首先安装pip,sudo apt-get install python-pip

curl-Lhttps://get.daocloud.io/docker/compose/releases/download/1.21.2/docker-compose-`uname-s`-`uname -m`>/usr/local/bin/docker-compose

chmod+x /usr/local/bin/docker-compose

docker-composeversion

2. 安装go环境(我是安装在/home/hadoop目录中)

2.1 下载安装go

cd /home/hadoop/

wget https://studygolang.com/dl/golang/go1.10.1.linux-amd64.tar.gz

tar -C /usr/local -xzf go1.10.1.linux-amd64.tar.gz

mkdir gopath

2.2 配置环境变量

vim/etc/profile

添加

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

#export GOPATH=/opt/gopath

export GOPATH=/home/hadoop/gopath

export GOROOT=/usr/local/go

source /etc/profile 使环境变量生效

go version查看go是否安装成功

3. Fabric下载与docker镜像下载

3.1 Fabric源码下载

mkdir-p /home/hadoop/gopath/src/github.com/hyperledger

cd /home/hadoop/gopath/src/github.com/hyperledger

git clone https://github.com/hyperledger/fabric.git

cd fabric

git checkout v1.0.0(切记:一定要做,切换至对应分支)

3.2 fabric镜像下载

cd /home/hadoop/gopath/src/github.com/hyperledger/fabric/examples/e2e_cli/

source download-dockerimages.sh -c x86_64-1.0.0 -f x86_64-1.0.0

(切记:版本要与fabric对应住)

docker images 查看镜像列表

4. 启动fabric网络并测试chaincode

4.1 傻瓜式安装

./network_setup.sh up

该过程主要做了以下操作

1)  生成公私钥和证书

2)  生成创世区块和channel通道配置信息

3)  启动fabric环境的容器

4)  创建通道

5)  各个peer加入通道

6)  安装链上代码

7)  实例化代码

4.2 手动分步骤安装

4.2.1生成公私钥和证书

1)编译生成cryptogen

cd /home/hadoop/gopath/src/github.com/hyperledger/fabric

make cryptogen

运行后返回结果

build/bin/cryptogen

CGO_CFLAGS="" GOBIN=/home/studyzy/go/src/github.com/hyperledger/fabric/build/bin goinstall -tags "" -ldflags "-Xgithub.com/hyperledger/fabric/common/tools/cryptogen/metadata.Version=1.0.0"github.com/hyperledger/fabric/common/tools/cryptogen

Binary available asbuild/bin/cryptogen

2)生成公私钥和证书

cd examples/e2e_cli/

../../build/bin/cryptogen generate--config=./crypto-config.yaml

此时生成了公私钥,并保存在crypto-config文件中

tree crypto-config查看生成的证书

4.2.2生成创世区块和channel通道配置信息

1)编译生成configtxgen

cd /home/hadoop/gopath/src/github.com/hyperledger/fabric

make configtxgen

运行后结果

build/bin/configtxgen

CGO_CFLAGS=" "GOBIN=/home/studyzy/go/src/github.com/hyperledger/fabric/build/bin go install-tags "nopkcs11" -ldflags "-Xgithub.com/hyperledger/fabric/common/configtx/tool/configtxgen/metadata.Version=1.0.0"github.com/hyperledger/fabric/common/configtx/tool/configtxgen

Binary available as build/bin/configtxgen

2)生成创世区块

cd examples/e2e_cli/

../../build/bin/configtxgen -profileTwoOrgsOrdererGenesis -outputBlock ./channel-artifacts/genesis.block

3)生成channel通道配置

../../build/bin/configtxgen -profileTwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelIDmychannel

4)另外关于锚节点更新,我们也需要使用这个程序来生成文件

../../build/bin/configtxgen -profileTwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx-channelID mychannel -asOrg Org1MSP

../../build/bin/configtxgen -profileTwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx-channelID mychannel -asOrg Org2MSP

两个组织,生成两个锚节点

 

此时能看到channel-artifacts下四个文件

channel-artifacts/

├── channel.tx

├── genesis.block

├── Org1MSPanchors.tx

└── Org2MSPanchors.tx

4.2.3 启动fabric docker环境的容器

由于手动部署,启动前需要将docker-compose-cli.yaml中信息更改

vim docker-compose-cli.yaml

注释掉command: /bin/bash -c './scripts/script.sh${CHANNEL_NAME}; sleep $TIMEOUT'

另更正一个错误 /base/peer.yaml中将network信息elecli_default改为ele_cli_default(ele_cli文件夹的默认网络名称)

docker-compose -f docker-compose-cli.yaml up-d

此时显示启动了四个peer,一个orderer,一个cli客户端

4.2.4 创建channel,各peer加入通道

1)创建channel

docker exec -it cli bash 进入客户端容器

创建Channel的命令是peer channelcreate,我们前面创建2.4创建Channel的配置区块时,指定了Channel的名字是mychannel,那么这里我们必须创建同样名字的channel。

 

ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

peer channel create -oorderer.example.com:7050 -c mychannel -f ./channel-artifacts/channel.tx --tlstrue --cafile $ORDERER_CA

此时创建成功一个maychannel.block文件,其他peer节点加入都需要该文件

2)各peer加入channel

peerchannel join -b mychannel.block (CLI客户端默认链接peer0.org1,因此该节点加入比较简单)

其他节点加入(以peer1.org1为例):

CLI指向peer1.org1

CORE_PEER_LOCALMSPID="Org1MSP"

CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/ca.crt

CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp

CORE_PEER_ADDRESS=peer1.org1.example.com:7051

加入通道:

peerchannel join -b mychannel.block

依次将所有peer节点加入通道

3)更新锚节点

对于Org1来说,peer0.org1是锚节点,我们需要连接上它并更新锚节点:

CORE_PEER_LOCALMSPID="Org1MSP"

CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt

CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp

CORE_PEER_ADDRESS=peer0.org1.example.com:7051

 

peer channel update -oorderer.example.com:7050 -c mychannel -f ./channel-artifacts/Org1MSPanchors.tx--tls true --cafile $ORDERER_CA

对于Org2,peer0.org2是锚节点,对应的更新代码是:

CORE_PEER_LOCALMSPID="Org2MSP"

CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt

CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp

CORE_PEER_ADDRESS=peer0.org2.example.com:7051

 

peer channel update -oorderer.example.com:7050 -c mychannel -f ./channel-artifacts/Org2MSPanchors.tx--tls true --cafile $ORDERER_CA

4.2.5 安装链上代码(共识算法)及实例化测试

1) 安装链码

对需要共识的peer节点都要安装链码

以peer0.org1为例,先切换至该节点:

CORE_PEER_LOCALMSPID="Org1MSP"

CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt

CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp

CORE_PEER_ADDRESS=peer0.org1.example.com:7051

安装链码:

peer chaincode install -n mycc -v 1.0 -pgithub.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02

2)实例化链码

对链上代码实例化,生成对应通道,对应链码的docker镜像和容器,并指定背书策略

peer chaincode instantiate -oorderer.example.com:7050 --tls true --cafile $ORDERER_CA -C mychannel -n mycc-v 1.0 -c'{"Args":["init","a","100","b","200"]}'-P "OR ('Org1MSP.member','Org2MSP.member')"

此时,dockerps可以看到多了一个dev的容器,如果再开一个peer,则再多一个dev容器

3)交易

在peer0.org1上发起交易

查询a的余额,peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'

返回结果

Query result: 100

转账:a向b转账10元

peer chaincode invoke -oorderer.example.com:7050  --tls true--cafile $ORDERER_CA -C mychannel -n mycc -c'{"Args":["invoke","a","b","10"]}'

在另一个节点查询:

首先CLI指向peer1.org2并安装链码,然后查询

peer chaincode query -C mychannel -n mycc -c'{"Args":["query","a"]}'

需要较长时间(几十秒)

5. 报错信息

root@namenode:/home/hadoop/gopath/src/github.com/hyperledger/fabric#make cryptogen

build/bin/cryptogen

CGO_CFLAGS=" "GOBIN=/home/hadoop/gopath/src/github.com/hyperledger/fabric/build/bin goinstall -tags "" -ldflags "-Xgithub.com/hyperledger/fabric/common/tools/cryptogen/metadata.Version=1.0.0"github.com/hyperledger/fabric/common/tools/cryptogen

#github.com/hyperledger/fabric/vendor/github.com/miekg/pkcs11

vendor/github.com/miekg/pkcs11/pkcs11.go:29:18:fatal error: ltdl.h: No such file or directory

compilation terminated.

Makefile:227: recipe for target'build/bin/cryptogen' failed

make: *** [build/bin/cryptogen] Error2

 

解决:下载安装libltdl-dev

apt-get install libtool libltdl-dev

 

 

参考:https://www.cnblogs.com/studyzy/p/7451276.html

https://www.jianshu.com/p/16903ed42f17

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值