1. 程式人生 > >如何編譯fabric和fabric-ca原始碼生成二進位制可執行檔案?

如何編譯fabric和fabric-ca原始碼生成二進位制可執行檔案?

00 導言

      在上上講《Fabric 環境搭建時bootstrap.sh幫我們做了什麼?》中,我們知道bootstrap.sh幫我們做了三件事:
      1. 從github上克隆 hyperledger/fabric-samples並進入該目錄,然後檢出適當的版本
      2. 在fabric-samples目錄下安裝特定平臺的 Hyperledger Fabric 二進位制可執行檔案 和配置檔案
      3.下載 指定版本的Hyperledger Fabric 的docker映象

      其中第二件事是執行curl去下載tar包並解壓:

$ curl https:
//nexus.hyperledger.org/content/repositories/releases/org/hyperledger/fabric/hyperledger-fabric/linux-amd64-1.2.0/hyperledger-fabric-linux-amd64-1.2.0.tar.gz $ curl https://nexus.hyperledger.org/content/repositories/releases/org/hyperledger/fabric-ca/hyperledger-fabric-ca/linux-amd64-1.2.0/hyperledger-fabric-ca-linux-amd64-1.2
.0.tar.gz

      這兩個tar包裡面包含了下面這些二進位制檔案和一個指令碼檔案:
- configtxgen
- configtxlator
- cryptogen
- discover
- idemixgen
- orderer
- peer
- fabric-ca-client
- get-docker-images.sh

      其實,這些二進位制檔案我們也可以通過編譯fabric和fabric-ca的原始碼得到。下面我們就來說說怎麼編譯得到它們。

01 下載fabric原始碼

      用git把fabric原始碼從github上克隆下來

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

02 編譯fabric原始碼

     編譯之前請確保系統中已經安裝了Go語言執行環境和正確的配置了環境變數。然後執行make release編譯。

$ cd fabric
$ make release
Building release/linux-amd64/bin/configtxgen for linux-amd64
mkdir -p release/linux-amd64/bin
CGO_CFLAGS=" " GOOS=linux GOARCH=amd64 go build -o /home/blockchain/go/src/github.com/hyperledger/fabric/release/linux-amd64/bin/configtxgen -tags "experimental" -ldflags "-X github.com/hyperledger/fabric/common/tools/configtxgen/metadata.CommitSHA=2be396e88" github.com/hyperledger/fabric/common/tools/configtxgen
Building release/linux-amd64/bin/cryptogen for linux-amd64
mkdir -p release/linux-amd64/bin
CGO_CFLAGS=" " GOOS=linux GOARCH=amd64 go build -o /home/blockchain/go/src/github.com/hyperledger/fabric/release/linux-amd64/bin/cryptogen -tags "experimental" -ldflags "-X github.com/hyperledger/fabric/common/tools/cryptogen/metadata.CommitSHA=2be396e88" github.com/hyperledger/fabric/common/tools/cryptogen
Building release/linux-amd64/bin/idemixgen for linux-amd64
mkdir -p release/linux-amd64/bin
CGO_CFLAGS=" " GOOS=linux GOARCH=amd64 go build -o /home/blockchain/go/src/github.com/hyperledger/fabric/release/linux-amd64/bin/idemixgen -tags "experimental" -ldflags "-X github.com/hyperledger/fabric/common/tools/idemixgen/metadata.CommitSHA=2be396e88" github.com/hyperledger/fabric/common/tools/idemixgen
Building release/linux-amd64/bin/discover for linux-amd64
mkdir -p release/linux-amd64/bin
CGO_CFLAGS=" " GOOS=linux GOARCH=amd64 go build -o /home/blockchain/go/src/github.com/hyperledger/fabric/release/linux-amd64/bin/discover -tags "experimental" -ldflags "-X github.com/hyperledger/fabric/cmd/discover/metadata.CommitSHA=2be396e88" github.com/hyperledger/fabric/cmd/discover
Building release/linux-amd64/bin/configtxlator for linux-amd64
mkdir -p release/linux-amd64/bin
CGO_CFLAGS=" " GOOS=linux GOARCH=amd64 go build -o /home/blockchain/go/src/github.com/hyperledger/fabric/release/linux-amd64/bin/configtxlator -tags "experimental" -ldflags "-X github.com/hyperledger/fabric/common/tools/configtxlator/metadata.CommitSHA=2be396e88" github.com/hyperledger/fabric/common/tools/configtxlator
Building release/linux-amd64/bin/peer for linux-amd64
mkdir -p release/linux-amd64/bin
CGO_CFLAGS=" " GOOS=linux GOARCH=amd64 go build -o /home/blockchain/go/src/github.com/hyperledger/fabric/release/linux-amd64/bin/peer -tags "experimental" -ldflags "-X github.com/hyperledger/fabric/common/metadata.Version=1.2.1 -X github.com/hyperledger/fabric/common/metadata.CommitSHA=2be396e88 -X github.com/hyperledger/fabric/common/metadata.BaseVersion=0.4.10 -X github.com/hyperledger/fabric/common/metadata.BaseDockerLabel=org.hyperledger.fabric -X github.com/hyperledger/fabric/common/metadata.DockerNamespace=hyperledger -X github.com/hyperledger/fabric/common/metadata.BaseDockerNamespace=hyperledger -X github.com/hyperledger/fabric/common/metadata.Experimental=true" github.com/hyperledger/fabric/peer
Building release/linux-amd64/bin/orderer for linux-amd64
mkdir -p release/linux-amd64/bin
CGO_CFLAGS=" " GOOS=linux GOARCH=amd64 go build -o /home/blockchain/go/src/github.com/hyperledger/fabric/release/linux-amd64/bin/orderer -tags "experimental" -ldflags "-X github.com/hyperledger/fabric/common/metadata.Version=1.2.1 -X github.com/hyperledger/fabric/common/metadata.CommitSHA=2be396e88 -X github.com/hyperledger/fabric/common/metadata.BaseVersion=0.4.10 -X github.com/hyperledger/fabric/common/metadata.BaseDockerLabel=org.hyperledger.fabric -X github.com/hyperledger/fabric/common/metadata.DockerNamespace=hyperledger -X github.com/hyperledger/fabric/common/metadata.BaseDockerNamespace=hyperledger -X github.com/hyperledger/fabric/common/metadata.Experimental=true" github.com/hyperledger/fabric/orderer
mkdir -p release/linux-amd64/bin

03 檢視是否編譯成功

      編譯好的二進位制可執行檔案放哪裡了呢?放在了下面這個目錄:

$ cd $GOPATH/src/github.com/hyperledger/fabric/release/linux-amd64/bin/
$ ls -l 
總用量 117048
-rwxr-xr-x 1 blockchain blockchain 16749240 81 18:26 configtxgen
-rwxr-xr-x 1 blockchain blockchain 17886416 81 18:26 configtxlator
-rwxr-xr-x 1 blockchain blockchain  8641432 81 18:26 cryptogen
-rwxr-xr-x 1 blockchain blockchain 17576512 81 18:26 discover
-rwxr-xr-x 1 blockchain blockchain      829 81 18:26 get-docker-images.sh
-rwxr-xr-x 1 blockchain blockchain  7138016 81 18:26 idemixgen
-rwxr-xr-x 1 blockchain blockchain 22027704 81 18:26 orderer
-rwxr-xr-x 1 blockchain blockchain 29819976 81 18:26 peer

04 下載fabric-ca原始碼

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

05 編譯fabric-ca原始碼

$ cd fabric-ca
$ make fabric-ca-server
$ make fabric-ca-client

06 檢視是否編譯成功

$ cd bin
$ ls -l
總用量 40876
-rwxr-xr-x 1 blockchain blockchain 19626520 82 16:40 fabric-ca-client
-rwxr-xr-x 1 blockchain blockchain 22228224 82 16:40 fabric-ca-server

07 總結

      實際開發中,我們也許並不需要自己手動去編譯生成這些檔案,可以直接執行bootstrap.sh這個指令碼幫我們下載好。但作為學習研究,我們還是有必要知道這些二進位制檔案是怎麼來的。知其然也知其所以然嘛!正如每個具有哲學精神的我們(diao si)每天都在問的三個問題:”我是誰?我從哪裡來?我在幹什麼?”

相關推薦

如何編譯fabricfabric-ca原始碼生成二進位制執行檔案

00 導言       在上上講《Fabric 環境搭建時bootstrap.sh幫我們做了什麼?》中,我們知道bootstrap.sh幫我們做了三件事:       1. 從github上克隆 hyperledger/fabric-samples並進入該目

VS2010靜態編譯生成.exe執行檔案

VS2010靜態編譯生成的.exe可執行檔案,可以免安裝在其他電腦直接執行   靜態編譯:就是在編譯可執行檔案的時候,將可執行檔案需要呼叫的對應動態連結庫(.so)中的部分提取出來,連結到可執行檔案中去,使可執行檔案在執行的時候不依賴動態連結庫。     編譯方式: 第1種:

linux執行應用程式not found問題(交叉編譯生成執行檔案

[email protected]:~/Desktop/em35x-ezsp$readelf -a build/ZigBee/ZigBee |grep NEEDED  0x00000001 (NEEDED)                     Shared library: [libreadli

c編寫,交叉編譯成android下二進位制執行檔案

題目: 請編寫一個netbd.c,實現 檢查android手機/system/app/cmd.apk檔案是否存在。 然後交叉編譯這個檔案,生成android下二進位制可執行檔案. 答: ====== 題目: 答:  待實現.誰會? ====== 題目: 請編寫 linu

VS2010靜態編譯生成.exe執行檔案,使c++程式脫離VS環境執行

VS2010靜態編譯生成的.exe可執行檔案,可以免安裝在其他電腦直接執行 靜態編譯:就是在編譯可執行檔案的時候,將可執行檔案需要呼叫的對應動態連結庫(.so)中的部分提取出來,連結到可執行檔案

Xcode編譯完後,在Finder中檢視執行檔案路徑沙盒路徑

截圖技巧:Mac自帶截圖快捷鍵Shift + Command + 3,按下這個組合鍵,圖片自動儲存到桌面。 選擇Xcode的Preferences選單 開啟後選擇“Locations”選項 開啟後的Finder 進入《DerivedData》目錄就可以找到你的工程,可

>pyinstaller -F -w -i D:\tmp\main.ico D:\python_test.py -F 表示生成單個執行檔案,執行後dist目錄中出現了python_test.exe

pyinstaller -F -w -i D:\tmp\main.ico D:\python_test.py -F 表示生成單個可執行檔案,執行後dist目錄中出現了python_test.exe檔案,沒有任何依賴庫,執行它即可。 -w 表示去掉控制檯視窗,這在GUI介面時

002-【最簡單】Electron 怎麼將網頁打包成桌面應用(web前端頁面怎麼生成exe執行檔案

在 HTML5的崛起、JavaScript要一統天下之際,有一個名為【跨平臺】的技術越來越火。為什麼會這麼火?因為軟體開發者

【最簡單】Electron 怎麼將網頁打包成桌面應用(web前端頁面怎麼生成exe執行檔案

在 HTML5的崛起、JavaScript要一統天下之際,有一個名為【跨平臺】的技術越來越火。為什麼會這麼火?因為軟體開發者只需一次編寫程式,即可在 Windows、Linux、Mac、IOS、

Python 中使用 pyrex 生成 Linux 執行檔案

 這個問題是相當有意義的,如果有了比較好的方法,Python 完全可以用來開發商業軟體,而不用擔心原始碼洩露。     前兩天我在網上看了看,有很多的人在問這個問題。大部分的人都在用 py2exe,這是個對 Python 程式打包的東東,實際上只是在 Python 程式中找

Linux下安裝pyinstaller用於將py檔案打包生成一個執行檔案

(2)cd pyinstaller-2.1 執行 python setup.py install 4. 拷貝py檔案 將需打包的py檔案如test.py 拷貝到當前目錄 5. 生成可執行檔案 cd到pyinstaller目錄, 執行  python pyinstaller.py test.py可能遇到的問題1

python 將py指令碼打包生成exe執行檔案

python 環境 2.7.4 最終效果如下 使用 了 pyinstaller  這裡打包一個exe只需兩步 第一步 python 環境下 命令列直接 pip install pyinstaller 第二步 下載完成後, 命令列 pyinstaller  -F 檔名 

ndk生成elf執行檔案及動態庫檔案

    Eclipse中安裝好adt外掛後,就可以通過Eclipse開發Android工程,然後網上下載一個ndk包並解壓,然後在Eclipse中填好ndk目錄,之後便可以使用ndk。ndk最主要的功能是為了實現Android 的jni,除此功能外還可通過ndk生成elf可執行檔

Xcode生成執行檔案在哪裡!

       很多iphone、ipad、xcode、mac os x初學者編了半天程式,結果找不到生成的可執行檔案在哪裡。實際上生成可釋出的可執行程式需要進行一些設定。首先啟動xcode,單擊Xcod

Python指令碼如何生成Windows執行檔案.exe

作者是   Python是一種簡單而強大的程式語言,適用於編寫指令碼,甚至於應用程式的開發。Python可用的各種GUI包使得利用Python編寫全功能的應用變為可能。這很好,但你有沒有想過將你編寫的Python指令碼轉化為可執行檔案?這似乎是一個很讚的主意,有許

使用py2exe將python 指令碼生成exe執行檔案

使用python的py2exe模組可以很容易地幫助我們將python指令碼生成可執行的exe程式。這樣我們就可以讓指令碼脫離虛擬機器的束縛,從而獨立執行。 環境要求: python虛擬機器,我使用的是python3.4。(2.7使用pip配置py2exe會

用 Inno Setup 生成Java執行檔案(exe)安裝包

如何用jar生成exe可執行檔案詳見本人上一篇的部落格 https://blog.csdn.net/higherzjm/article/details/82591093 本程式資原始檔存放的目錄 Inno Setup 操作步驟: 1 file->new 填

CMake生成執行檔案能夠gdb除錯

      採用 $ gdb   除錯時 出現 如下 錯誤:       (no debugging symbols found)  解決辦法 1      首先在CMakeLists.txt中加入       SET(CMAKE_BUILD_TYPE "Debug

Qt學習筆記之——生成exe執行檔案並打包生成安裝軟體

之前用MFC生成過安裝檔案,今天想嘗試採用Qt生成的exe檔案打包並生成安裝軟體。 開始我認為比較簡單,但是嘗試過程中遇到了很多問題。下面一一列出來 首先:我認為,要完成一個軟體,應儘可能的使用Release版本檔案,當然了,可以現在Debug版本下除錯通過再進行測試 打包

[PYTHON]_ELVE_Python原始碼檔案編譯執行檔案(支援macOS High Sierrawindow 10)

#0x01 背景 這兩天寫了一個抽獎的Python指令碼,要生成可執行檔案,總不能一直在sublime上執行吧,或者執行前先安裝Python,所以就查了一下怎麼生成可執行檔案,本篇包括mac下和win下,經本人測試,mac下生成.app(mac下的可執行檔案為.app字尾)較win下容易一些。 我用的Py