如何編譯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 8月 1 18:26 configtxgen
-rwxr-xr-x 1 blockchain blockchain 17886416 8月 1 18:26 configtxlator
-rwxr-xr-x 1 blockchain blockchain 8641432 8月 1 18:26 cryptogen
-rwxr-xr-x 1 blockchain blockchain 17576512 8月 1 18:26 discover
-rwxr-xr-x 1 blockchain blockchain 829 8月 1 18:26 get-docker-images.sh
-rwxr-xr-x 1 blockchain blockchain 7138016 8月 1 18:26 idemixgen
-rwxr-xr-x 1 blockchain blockchain 22027704 8月 1 18:26 orderer
-rwxr-xr-x 1 blockchain blockchain 29819976 8月 1 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 8月 2 16:40 fabric-ca-client
-rwxr-xr-x 1 blockchain blockchain 22228224 8月 2 16:40 fabric-ca-server
07 總結
實際開發中,我們也許並不需要自己手動去編譯生成這些檔案,可以直接執行bootstrap.sh這個指令碼幫我們下載好。但作為學習研究,我們還是有必要知道這些二進位制檔案是怎麼來的。知其然也知其所以然嘛!正如每個具有哲學精神的我們(diao si)每天都在問的三個問題:”我是誰?我從哪裡來?我在幹什麼?”
相關推薦
如何編譯fabric和fabric-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 Sierra和window 10)
#0x01 背景 這兩天寫了一個抽獎的Python指令碼,要生成可執行檔案,總不能一直在sublime上執行吧,或者執行前先安裝Python,所以就查了一下怎麼生成可執行檔案,本篇包括mac下和win下,經本人測試,mac下生成.app(mac下的可執行檔案為.app字尾)較win下容易一些。 我用的Py