CentOS7 搭建Fabric 1.0

1.環境搭建

1.1 go的按裝及配置

1.1.1下載go壓縮包

wget https://dl.google.com/go/go1.9.2.linux-amd64.tar.gznode

1.1.2 解壓

tar -C /usr/local -zxvf go1.9.2.linux-amd64.tar.gzpython

1.1.3配置環境變量

vi ~/.bash_profile

添加以下內容:linux

PATH=$PATH:$HOME/bin
export PATH
export PATH=$PATH:/usr/local/go/bin
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$HOME/go/bin

使環境變量生效c++

source  ~/.bash_profile

1.2 安裝Docker

1.2.1 檢查是否已經安裝

rpm -qa|grep dockergit

1.2.2 卸載舊版本

yum remove docker docker-client docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine

1.2.3 安裝須要的軟件包

yum install -y yum-utils device-mapper-persistent-data lvm2

1.2.4設置 stable 源

yum-config-manager --add-repo http://download.docker.com/linux/centos/docker-ce.repo

1.2.5 啓用 啓用 docker-ce-edge和docker-ce-test(可選)

yum-config-manager --enable docker-ce-edge
yum-config-manager --enable docker-ce-tes

1.2.6 安裝 Docker CE

yum install docker-ce

1.2.7 啓動docker

service docker start

1.2.8 加入開機啓動

chkconfig docker on

1.2.9 測試是否安裝成功

docker --version

1.2.10 安裝docker-compose

curl -L https://github.com/docker/compose/releases/download/1.20.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

1.2.11 測試docker-compose是否安裝成功

docker-compose version

1.3 安裝python-pip

yum -y install epel-release
yum -y install python-pip

1.4 安裝node.js

## root 
curl -sL https://rpm.nodesource.com/setup_10.1 | bash -
## no root
curl -sL https://rpm.nodesource.com/setup_10.1 | sudo bash -
yum install -y nodejs

1.5 升級gcc

wget http://ftp.gnu.org/gnu/gcc/gcc-9.1.0/gcc-9.1.0.tar.gz
tar -C /usr/local -xzf gcc-9.1.0.tar.gz
 cd /usr/local/gcc-9.1.0
 ./contrib/download_prerequisites 
 mkdir build
  cd build/
 ../configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
  yum groupinstall "Development Tools" 
 make
 make install

1.6 安裝npm

$ npm install npm -g
$ npm -v

1.7 fabric下載

1.7.1 下載fabric源碼

## 下載源碼
$ mkdir -p ~/go/src/github.com/hyperledger 
$ cd ~/go/src/github.com/hyperledger 
$ git clone https://github.com/hyperledger/fabric.git
## 切換到v1.0.0版本
$ cd ~/go/src/github.com/hyperledger/fabric
$ git checkout v1.0.0

1.7.2 下載 Fabric Docker鏡像

$ cd ~/go/src/github.com/hyperledger/fabric/examples/e2e_cli/
$ source download-dockerimages.sh -c x86_64-1.0.0 -f x86_64-1.0.0

1.7.3 檢查下載的鏡像列表

docker images

1.7.4 測試Fabric環境是否成功

cd ~/go/src/github.com/hyperledger/fabric/examples/e2e_cli
./network_setup.sh up

該指令作了一下操做github

1.編譯生成Fabric公私鑰、證書的程序,程序在目錄:fabric/release/linux-amd64/bin
2.基於configtx.yaml生成創世區塊和通道相關信息,並保存在channel-artifacts文件夾。
3.基於crypto-config.yaml生成公私鑰和證書信息,並保存在crypto-config文件夾中。
4.基於docker-compose-cli.yaml啓動1Orderer+4Peer+1CLI的Fabric容器。
5.在CLI啓動的時候,會運行scripts/script.sh文件,這個腳本文件包含了建立Channel,加入Channel,安裝Example02,運行Example02等功能。docker

運行完若是出現下圖所示,說明整個Fabric網絡已經通了.
shell

2.測試Fabric網絡

Fabric提供了SDK和CLI兩種交互方式,咱們使用的是CLI 。npm

使用官方提供的小例子進行測試,在官方例子中,channel名字是mychannel,鏈碼(智能合約)的名字是mycc。
首先要登陸到CLI這個容器中,才能執行Fabric的CLI命令:centos

docker exec -it cli bash

這時用戶名變爲root@44084971aff7,當前目錄變爲/opt/gopath/src/github.com/hyperledger/fabric/peer#,接着可執行peer命令,體驗區塊鏈的命令行使用方式。

2.1 查看帳戶餘額

root@44084971aff7:/opt/gopath/src/github.com/hyperledger/fabric/peer#  peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'

結果:

Query Result: 90

這裏90就是a帳戶的餘額

2.2 調用鏈碼,轉帳

讓b帳戶向a帳戶轉帳10:

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","20"]}'

再次執行查詢(由於轉帳操做了2次因此此處是50)

root@c259da3de4d1:/opt/gopath/src/github.com/hyperledger/fabric/peer# peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'

2.3 退出cli容器

直接執行

exit

關閉Fabric

cd ~/go/src/github.com/hyperledger/fabric/examples/e2e_cli
./network_setup.sh down

3.遇到的問題

3.1 使用wget、curl、git報command not found

  • 緣由:未安裝wget、curl

  • 解決

    yum install -y wget
    yum install -y curl
    yum install -y git

3.2 安裝docker-compose問題

Failed connect to github-production-release-asset-2e65be.s3.amazonaws.com:443; Connection timed out

  • 緣由: 該地址(github-production-release-asset-2e65be.s3.amazonaws.com) 須要的一些下載的訪問被 國內屏蔽了

  • 解決:在hosts中加配置

    ping github-production-release-asset-2e65be.s3.amazonaws.com
     vi /etc/hosts

    新增以下配置:

    52.216.128.51 github-production-release-asset-2e65be.s3.amazonaws.com

3.3 gcc升級問題

configure: error: Building GCC requires GMP 4.2+, MPFR 2.4.0+ and MPC 0.8.0+.,mpfr2.4.0

yum install  gmp  gmp-devel  mpfr  mpfr-devel  libmpc  libmpc-devel

3.4 gcc動態庫沒有替換問題

node: /usr/lib64/libstdc++.so.6: version GLIBCXX_3.4.21' not found (required by node) node: /usr/lib64/libstdc++.so.6: versionGLIBCXX_3.4.15' not found (required by node)
node: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by node)

運行檢查命令

strings /usr/lib64/libstdc++.so.6 | grep GLIBC

查找編譯gcc時生成的最新動態庫

find / -name "libstdc++.so*"
cd /usr/lib64
rm -rf libstdc++.so.6
ln -s libstdc++.so.6.0.26 libstdc++.so.6
strings /usr/lib64/libstdc++.so.6 | grep GLIBC

3.5 Fabric啓動報錯1

can't load package: package github.com/hyperledger/fabric/core/chaincode/shim: cannot find package

源碼路徑不對

go env

把fabric源碼放在~/go/src/github.com/hyperledger 目錄下

3.6 Fabric啓動報錯2

Error response from daemon: Container is not running

##查看運行的容器
docker ps -a
## 把失敗的從新啓動
docker start 44084971aff7

3.7 Fabric啓動報錯3

Error: Error getting endorser client chaincode: PER:404 - Error trying to connect to local peer

從新關閉網絡

./network_setup.sh down mychannel

3.8 測試轉帳no such file or directory

root@b103ad898190:/opt/gopath/src/github.com/hyperledger/fabric/peer# peer chaincode invoke -o orderer.example.com:7050 --tls true --cafile /root/go/src/github.com/hyperledger/fabric/examples/e2e_cli/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n mycc -c '{"Args":["invoke","b","a","10"]}'
2020-01-21 10:19:15.752 UTC [msp] GetLocalMSP -> DEBU 001 Returning existing local MSP
2020-01-21 10:19:15.752 UTC [msp] GetDefaultSigningIdentity -> DEBU 002 Obtaining default signing identity
Error: Error getting broadcast client: Error connecting to orderer.example.com:7050 due to open /root/go/src/github.com/hyperledger/fabric/examples/e2e_cli/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem: no such file or directory

根證書不對

參考文檔

1.聯盟鏈初識以及Fabric環境搭建流程

2.centos7安裝fabric

相關文章
相關標籤/搜索