1. 程式人生 > >git fabric 1.0.0 官方原始碼進行編譯,生成 docker images

git fabric 1.0.0 官方原始碼進行編譯,生成 docker images

系統環境:centos 7 64位
docker
docker-compose

不要使用 centos yum 倉庫帶的 docker,版本過低。
安裝docker 官方的repo 裡面的版本

$ sudo tee /etc/yum.repos.d/docker.repo <<-'EOF'
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF

yum update

yum install docker-engine

systemctl enable docker

systemctl restart docker

一.新增 fabric 使用者和設定存放原始碼的目錄

useradd fabric
# 以 fabric 使用者登入,建立如下專案目錄.
mkdir /home/fabric/fabric

二.安裝 go 的開發環境和必須的元件

以 root 使用者安裝

wget https://storage.googleapis.com/golang/go1.8.1.linux-amd64.tar.gz

tar -xzvf go1.8.1.linux-amd64.tar.gz

mv ./go  /usr/local

//修改 etc/profile,增加 如下2行內容
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin

source /etc/profile
#安裝後,確認 go 1.8 安裝成功
go version
go version go1.8 darwin/amd64

#如果無法科學上網,使用如下步驟:
# 1. 以 root安裝 gopm
    export GOPATH=/usr/local
    go get -u github.com/gpmgo/gopm
    #確認在/usr/local/bin 目錄下有 gopm
# 2. 以 fabric 使用者,通過 gopm 安裝 goimports
    export GOPATH=/home/fabric/fabric
    gopm get -g -d golang.org/x/tools/cmd/goimports
    #再使用 go install 安裝 goimports
    go install golang.org/x/tools/cmd/goimports
    #確認在/home/fabric/fabric/bin 目錄下有 goimports

以 fabric 使用者 安裝 gocov

GOPATH=/home/fabric/fabric
gopm get -g -d golang.org/x/tools/cover
gopm get -g -d github.com/axw/gocov/gocov
go install github.com/axw/gocov/gocov
# 確認 /home/fabric/fabric/bin 目錄下有 gocov

安裝 gocov-xml

GOPATH=/home/fabric/fabric
gopm get -g -d github.com/AlekSi/gocov-xml
go install github.com/AlekSi/gocov-xml
#確認 /home/fabric/fabric/bin 目錄下有 gocov-xml

三. 安裝其他必須的元件

以 root 使用者安裝
```

centos 下需要安裝

yum install -y gcc libtool libltdl-dev libtool-ltdl-devel openssl

## 四.設定fabric環境變數

vim ~/.bashrc
export GOPATH=/home/fabric/fabric

使得環境變數生效

source ~/.bashrc
```

五.進入專案目錄

cd $GOPATH

六. 建立 go 原始碼目錄結構(一定要建立 src/github.com/hyperledger ,否則無法使用 go 進行編譯)

cd $GOPATH
mkdir -p src/github.com/hyperledger

七.拉取 fabric 的原始碼

cd $GOPATH/src/github.com/hyperledger
git clone https://github.com/hyperledger/fabric.git

八.編譯生成 protoc-gen-go

#編譯生成 protoc-gen-go 
cd $GOPATH
gopm get -g -d github.com/golang/protobuf/protoc-gen-go
go install github.com/golang/protobuf/protoc-gen-go
#確認在$GOPATH/bin出現protoc-gen-go執行檔案

九. 編譯 fabric docker 環境

cd $GOPATH/src/github.com/hyperledger/fabric
make docker

如果出現 Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock 這個錯誤。
解決方案:
1. 把 fabric 使用者加入到 sudo 組
a. 以 root 使用者登入
b. vim /etc/sudoers
c. 增加 fabric ALL=(ALL) ALL 一行到root ALL=(ALL) ALL下面
2. sudo usermod -a -G docker \(USER
3. newgrp - docker
4. newgrp - `groups \){USER} | cut -d' ' -f1`
參考:
https://techoverflow.net/2017/03/01/solving-docker-permission-denied-while-trying-to-connect-to-the-docker-daemon-socket/

十.如果出現檔案或者命令沒找到的錯誤,複製go 的相關檔案到 fabric 編譯環境

cp $GOPATH/bin/protoc-gen-go $GOPATH/src/github.com/hyperledger/fabric/build/docker/gotools/bin/ 

cp $GOPATH/bin/gocov $GOPATH/src/github.com/hyperledger/fabric/build/docker/gotools/bin/ 

十一.編譯 fabric ca 環境

cd /root
git clone https://github.com/hyperledger/fabric-ca.git
cd fabric-ca
make docker

十二. 部署和測試 e2e 應用

一鍵啟動
cd $GOPATH/src/github.com/hyperledger/fabric/examples/e2e_cli
./network_setup.sh up mytestchannel

十三. 部署 Fabric Sample

1.拉取Fabric Sample 的原始碼

cd ~
git clone https://github.com/hyperledger/fabric-samples.git
cd ~/fabric-samples

2. 下載所需要的執行檔案。

由於不能科學上網。只能通過 瀏覽器訪問

https://goo.gl/iX9dek

或則 訪問

https://raw.githubusercontent.com/hyperledger/fabric/master/scripts/bootstrap-1.0.0.sh

然後把這個 shell 檔案儲存到 ~/fabric-samples/run.sh 檔案內。
然後chmod +xxx ~/fabric-samples/run.sh 。
成功後執行 run.sh。
shell 會自動拉取所有的 fabric 1.0.0 的 image
並且生成 bin目錄。目錄下有下列檔案:

  • cryptogen,
  • configtxgen,
  • configtxlator
  • peer

Finally, the script will download the Hyperledger Fabric docker images from Docker Hub into your local Docker registry and tag them as ‘latest’.

The script lists out the Docker images installed upon conclusion.

Look at the names for each image; these are the components that will ultimately comprise our Hyperledger Fabric network. You will also notice that you have two instances of the same image ID - one tagged as “x86_64-1.0.0” and one tagged as “latest”.

3. 更新環境變數 PATH

export PATH=/home/fabric/fabric-samples/bin:$PATH

4. run it now

cd ~/fabric-samples/first-network
./byfn.sh -m generate

成功後,控制檯顯示

[[email protected] first-network]$ ./byfn.sh -m generate
Generating certs and genesis block for with channel 'mychannel' and CLI timeout of '10000'
Continue (y/n)? y
proceeding ...
/home/fabric/fabric-samples/bin/cryptogen

##########################################################
##### Generate certificates using cryptogen tool #########
##########################################################
org1.example.com
org2.example.com

/home/fabric/fabric-samples/bin/configtxgen
##########################################################
#########  Generating Orderer Genesis block ##############
##########################################################
2017-07-21 15:05:30.414 CST [common/configtx/tool] main -> INFO 001 Loading configuration
2017-07-21 15:05:30.453 CST [common/configtx/tool] doOutputBlock -> INFO 002 Generating genesis block
2017-07-21 15:05:30.455 CST [common/configtx/tool] doOutputBlock -> INFO 003 Writing genesis block

#################################################################
### Generating channel configuration transaction 'channel.tx' ###
#################################################################
2017-07-21 15:05:30.489 CST [common/configtx/tool] main -> INFO 001 Loading configuration
2017-07-21 15:05:30.496 CST [common/configtx/tool] doOutputChannelCreateTx -> INFO 002 Generating new channel configtx
2017-07-21 15:05:30.497 CST [common/configtx/tool] doOutputChannelCreateTx -> INFO 003 Writing new channel tx

#################################################################
#######    Generating anchor peer update for Org1MSP   ##########
#################################################################
2017-07-21 15:05:30.541 CST [common/configtx/tool] main -> INFO 001 Loading configuration
2017-07-21 15:05:30.545 CST [common/configtx/tool] doOutputAnchorPeersUpdate -> INFO 002 Generating anchor peer update
2017-07-21 15:05:30.546 CST [common/configtx/tool] doOutputAnchorPeersUpdate -> INFO 003 Writing anchor peer update

#################################################################
#######    Generating anchor peer update for Org2MSP   ##########
#################################################################
2017-07-21 15:05:30.590 CST [common/configtx/tool] main -> INFO 001 Loading configuration
2017-07-21 15:05:30.593 CST [common/configtx/tool] doOutputAnchorPeersUpdate -> INFO 002 Generating anchor peer update
2017-07-21 15:05:30.593 CST [common/configtx/tool] doOutputAnchorPeersUpdate -> INFO 003 Writing anchor peer update

[[email protected] first-network]$

5.啟動網路

./byfn.sh -m up

如果以前做過測試,特別是通過原始碼編譯,執行過e2e_cli 例子後。這裡可能會報告 容器已經存在的錯誤。

    ERROR: for peer0.org1.example.com  Cannot create container for service peer0.org1.example.com: Conflict. The container name "/peer0.org1.example.com" is already in use by container "f8ab810101f3db4eb5e0a15ef2e06f0fee19259225541031d73c6eaa70a0640e".Creating peer1.org1.example.com ... error
    
    ERROR: for peer1.org1.example.com  Cannot create container for service peer1.org1.example.com: Conflict. The container name "/peer1.org1.example.com" is already in use by container "1517363d7424e01e07f1e5230fcc955d2cc4a1f8778842777ea5a237fedc9b3b".Creating peer0.org2.example.com ... error
    
    ERROR: for peer0.org2.example.com  Cannot create container for service peer0.org2.example.com: Conflict. The container name "/peer0.org2.example.com" is already in use by container "513aeb4b3d8f9b3ec2f90c42d19d6c4a9b2aa058ad39f931de009be8980a192f".Creating peer1.org2.example.com ... error
    
    ERROR: for peer1.org2.example.com  Cannot create container for service peer1.org2.example.com: Conflict. The container name "/peer1.org2.example.com" is already in use by container "c9ac14cc4a6b002dec353bcd2e008752c00f4129d811e250b38c2702c9d83e28".Creating orderer.example.com ... error

可以通過下面命令,清除一下原有的容器,並且刪除原來的測試容器用的 images

docker rm -f $(docker ps -aq)
docker rmi  $(docker images -a | grep dev-  | awk '{print $3 }')

控制檯出現 :

Starting with channel 'mychannel' and CLI timeout of '10000'
Continue (y/n)?y
proceeding ...
Creating network "net_byfn" with the default driver
Creating peer0.org1.example.com
Creating peer1.org1.example.com
Creating peer0.org2.example.com
Creating orderer.example.com
Creating peer1.org2.example.com
Creating cli


 ____    _____      _      ____    _____
/ ___|  |_   _|    / \    |  _ \  |_   _|
\___ \    | |     / _ \   | |_) |   | |
 ___) |   | |    / ___ \  |  _ <    | |
|____/    |_|   /_/   \_\ |_| \_\   |_|

Channel name : mychannel
Creating channel...

The logs will continue from there. This will launch all of the containers, and then drive a complete end-to-end application scenario. Upon successful completion, it should report the following in your terminal window:

Attempting to Query PEER3 ...3 secs

2017-07-21 07:22:03.903 UTC [msp] GetLocalMSP -> DEBU 001 Returning existing local MSP
2017-07-21 07:22:03.903 UTC [msp] GetDefaultSigningIdentity -> DEBU 002 Obtaining default signing identity
2017-07-21 07:22:03.903 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 003 Using default escc
2017-07-21 07:22:03.903 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 004 Using default vscc
2017-07-21 07:22:03.903 UTC [msp/identity] Sign -> DEBU 005 Sign: plaintext: 0A95070A6708031A0C089BD7C6CB0510...6D7963631A0A0A0571756572790A0161
2017-07-21 07:22:03.903 UTC [msp/identity] Sign -> DEBU 006 Sign: digest: 56559226BBF8E0BAC8522F3728F6AC5141868518117FEBE522CC7354DB856494
Query Result: 90
2017-07-21 07:22:18.236 UTC [main] main -> INFO 007 Exiting.....
===================== Query on PEER3 on channel 'mychannel' is successful =====================

========= All GOOD, BYFN execution completed ===========


 _____   _   _   ____
| ____| | \ | | |  _ \
|  _|   |  \| | | | | |
| |___  | |\  | | |_| |
|_____| |_| \_| |____/

6.停止和解除安裝,刪除容器,映象.

The following will kill your containers, remove the crypto material and four artifacts, and delete the chaincode images from your Docker Registry:

./byfn.sh -m down

相關推薦

git fabric 1.0.0 官方原始碼進行編譯生成 docker images

系統環境:centos 7 64位 docker docker-compose 不要使用 centos yum 倉庫帶的 docker,版本過低。 安裝docker 官方的repo 裡面的版本 $ sudo tee /etc/yum.repos.d/docker.rep

Android 4.0 framework原始碼修改編譯模擬器執行不起來

我是用的android 4.0.3 ICS的原始碼,編譯好後,利用編譯好的映象啟動的模擬器,以前修改過裡面的Launcher,將生成的Launcher.apk和Launcher.odex  push後是成功的。現在我在 frameworks/base/policy/src/

對hadoop原始碼進行編譯

hadoop編譯 前期準備 軟體需要 軟體安裝 安裝maven 安裝ProtocolBuffer 2.5.0 安裝其他依賴包 對hadoop進行編譯 參考文件 前期準備

maven 對spark 原始碼進行編譯(基於Centos 7 )

maven 對spark 原始碼進行編譯( 基於Centos 7 ) 1 、寫在前面的話     有些小夥伴可能會問:Spark官網不是已經提供了Spark針對不同版本的

1、對string物件進行擴充套件使其具有刪除前後空格的方法

<script> //1.正常的方法 String.prototype.trim = function(){     var str = this; console.log(str)     while(str[0] == " "){         

B+Tree模板改進版0.51版——可獨立編譯修改了錯誤

       最近應網友的要求,仔細檢查和修改了B+Tree的模板類,修正了幾處錯誤,主要是刪除Key的引數錯誤,同時去掉了那個標頭檔案的包含,直接將標頭檔案的內容貼在了檔案開頭處,以使此模板類可以獨立使用。        註釋掉的顯示到樹控制元件中的方法,可以在使用MFC的CTreeCtrl情況下自行恢復即

多個原始檔進行編譯即 makefile 的編寫

makefile的好處是防止原始檔的重複編譯 比如有好多個原始檔,某天對其中一個原始檔進行修改,如果不寫makefile的話,需要將整個工程的所有檔案重新編譯一遍,非常麻煩,有了makefile,說明了每個原始檔的依附關係,當某個原始檔改變的時候只需重新編譯一下關聯的原始

原始碼Launcher編譯使用mdpi的資源

4.2.2的原始碼,進行對Launcher2的修改,之後使用mm或mmm編譯,使用adb push安裝到平板中。 因為使用的一代nexus7,所以一般程式呼叫資源的是drawable_sw600dp_hdpi下的圖片資源,但是按照上面方法編譯出的Launcher使用drawable_sw600dp_mdpi

05.Fabric 1.0原始碼分析(5)Chaincode(鏈碼)體系總結

Fabric 1.0原始碼筆記 之 Chaincode(鏈碼) 1、Chaincode概述 Chaincode,即鏈碼或智慧合約,程式碼分佈在protos/peer目錄、core/chaincode和core/common/ccprovider目錄,目錄結構如下: pro

hyperledger fabric 1.0 原始碼分析之peer chaincode upgrade

描述 peer chaincode upgrade命令用於對chaincode升級。 定義 func upgradeCmd(cf *ChaincodeCmdFactory) *cobra.Command { chaincodeUpgradeCmd = &cob

Fabric 1.0原始碼分析(5)Chaincode(鏈碼)體系總結

Fabric 1.0原始碼筆記 之 Chaincode(鏈碼) 1、Chaincode概述 Chaincode,即鏈碼或智慧合約,程式碼分佈在protos/peer目錄、core/chaincode和core/common/ccprovider目錄,目錄結構如下: pro

Fabric 1.0原始碼分析(2) blockfile(區塊檔案儲存)

Fabric 1.0原始碼筆記 之 blockfile(區塊檔案儲存) 1、blockfile概述 blockfile,即Fabric區塊鏈區塊檔案儲存,預設目錄/var/hyperledger/production/ledgersData/chains,含in

11.Fabric 1.0原始碼分析(11)consenter(共識外掛) #filter(過濾器)

Fabric 1.0原始碼筆記 之 consenter(共識外掛) #filter(過濾器) 1、filter概述 filter程式碼分佈在orderer/common/filter、orderer/common/configtxfilter、orderer/c

47.Fabric 1.0原始碼分析(47)Fabric 1.0.4 go程式碼量統計

Fabric 1.0原始碼筆記 之Fabric 1.0.4 go程式碼量統計 1、概述 除test、vendor、mocks、example、protos外,go核心程式碼檔案341個,核心程式碼行63433行。 find ./ |grep -vE 'test|

43.Fabric 1.0原始碼分析(43) Tx(Transaction 交易)

Fabric 1.0原始碼筆記 之 Tx(Transaction 交易) 1、Tx概述 Tx,即Transaction,交易或事務。 Tx程式碼分佈目錄結構如下: protos/common/common.pb.go,交易的封裝即Envelope結構體。也包括

46.Fabric 1.0原始碼分析(46)ECDSA(橢圓曲線數字簽名演算法)

Fabric 1.0原始碼筆記 之 ECDSA(橢圓曲線數字簽名演算法) 1、橢圓曲線演算法概述 1.1、無窮遠點、無窮遠直線、射影平面 平行線相交於無窮遠點; 直線上有且只有一個無窮遠點; 一組相互平行的直線有公共的無窮遠點; 平面上任何相交的兩直線,有不同

45.Fabric 1.0原始碼分析(45)gRPC(Fabric中註冊的gRPC Service)

Fabric 1.0原始碼筆記 之 -gRPC(Fabric中註冊的gRPC Service) Peer節點中註冊的gRPC Service,包括: Events Service(事件服務):Chat Admin Service(管理服務):GetStatus

HyperLedger Fabric v1.1.0-alpha 版本原始碼編譯及單節點網路搭建

本文主要參考:https://blog.csdn.net/honganboy/article/details/78714578 的介紹,十分感謝作者。但是安裝版本和環境不同,安裝過程也遇到了一些小問題,因此也再寫一篇供大家參考。安裝環境:作業系統-64位Centos7.2,F

Hyperledger Fabric 1.0 從零開始(四)——Fabric原始碼及映象檔案處理

2:Fabric原始碼及映象檔案處理 2.1下載Fabric原始碼 下載Fabric原始碼是因為要用到原始碼中提到的列子和工具,工具編譯需要用到go語言環境,因此需要把原始碼目錄放到$GOPATH下。通過1.3中go的安裝配置,$GOPATH設定為/opt/gopath。

Fabric 1.0原始碼分析(46)ECDSA(橢圓曲線數字簽名演算法)

# Fabric 1.0原始碼筆記 之 ECDSA(橢圓曲線數字簽名演算法)## 1、橢圓曲線演算法概述### 1.1、無窮遠點、無窮遠直線、射影平面* 平行線相交於無窮遠點;* 直線上有且只有一個無窮遠點;* 一組相互平行的直線有公共的無窮遠點;* 平面上任何相交的兩直線,有不同的無窮遠點;* 全部無窮遠點