6.1、平台特定使用的二進制文件配置
該方案與Hyperledger Fabric 1.0 從零開始(五)——運行測試e2e類似,根據企業需要,可以控制各節點的域名,及聯盟鏈的統一域名。可以指定單獨節點的訪問,生成指定的公私鑰、證書等文件。具體的參數配置可以參考generateArtifacts.sh文件,可執行自動化生成,也可以按照該腳本里的命令手動生成。
參照3.1、運行fabric-samples的問題說明,首先我們在/opt/gopath/src/github.com/hyperledger/fabric下創建一個自定義目錄,該目錄名稱應與實際生產環境中組織節點的名稱一致,如:example。
我們計划將在orderer服務器中生成必要的證書等文件,因此在example下將繼續創建一個orderer目錄,我們將下載好的bin目錄上傳至/opt/gopath/src/github.com/hyperledger/fabric/example/orderer目錄下,具體效果如下視圖:
正如3.1小節所述,在bin目錄中是Fabric平台特定使用的二進制文件cryptogen,configtxgen,configtxlator, 以及peer。
我們可以通過configtxgen和cryptogen手動生成證書/密鑰以及各項配置文件。
(注:英文閱讀能力好的同學可以直接參考官方文檔)
在正式使用上述兩個文件之前,我們需要在bin目錄下先創建兩個yaml文件,分別是crypto-config.yaml和configtx.yaml,這兩個文件具體可以在/opt/gopath/src/github.com/hyperledger/fabric/examples/e2e_cli這個目錄下找到對應的官方示例,以官方示例為基礎進行修改,改成我們生產上所需的具體內容。
6.2、生成組織證書與私鑰
我們假定要組建一個名為example的聯盟,且我們自己的組織名稱為Demo,我們會創建一個Orderer排序服務節點,同時還會創建一個peer節點。
那么修改后的crypto-config.yaml如下:
1 OrdererOrgs: 2 - Name: Orderer 3 Domain: example.com 4 Specs: 5 - Hostname: orderer 6 PeerOrgs: 7 - Name: Demo 8 Domain: demo.example.com 9 Template: 10 Count: 1 11 Users: 12 Count: 1
這里我們使用crytogen工具給我們不同的網絡實體(peer/client)生成加密證書(X509 certs)。這些證書代表了身份,當我們的網絡實體在進行通信以及transact的時候進行簽名與驗證身份。
crypto-config.yaml配置文件將被crytogen工具調用,文件中包括了網絡拓撲,同時允許我們給organization(Demo)以及component(隸屬於organization的組件)生成一個證書與私鑰的集合。每一個organization(Demo)被分配一個唯一的根證書(綁定了隸屬於organization(Demo)的具體的component,包括peers與orderers)。Hyperledger Fabric的transaction與通信均被節點的私鑰(keystore)進行簽名,截止被公鑰進行驗證(signcerts)。 這個配置文件中有一個計數(count)的變量,我們使用其定義organization(Demo)中peer的數量,在本例中我們定義Demo組織有一個peer。
在crypto-config.yaml配置文件中,我們可以看到在ordererOrgs頭下面的“Name”, “Domain” 以及 “Specs”這三個參數,命名規則約定如下:“{{.Hostname}}.{{.Domain}}”。使用官方提供的的crypto-config.yaml中的ordering node作為參考,我們能看到一個名稱為 - orderer.example.com的ordering node,該node與Orderer的MSP ID關聯。
接下來開始使用crytogen工具執行crypto-config.yaml配置文件,crytogen工具在bin目錄下,我們需要先進入該目錄,並執行crypto-config.yaml配置文件,具體命令如下:
cd /opt/gopath/src/github.com/hyperledger/fabric/example/orderer/bin
./bin/cryptogen generate --config=./crypto-config.yaml
根據上述命令,可以看出crypto-config.yaml被上傳至bin目錄下,執行結果如下視圖:
此過程中可能會提示權限不足,如下視圖:
這里使用chmod +x來賦權即可,不做詳細說明。
完成之后會在bin目錄下生成一個新的目錄crypto-config,其中會有ordererOrganizations和peerOrganizations兩個目錄,具體結果視圖如下:
6.3、定義configtx.yaml配置文件
接下來,我們需要使用configtxgen工具來執行configtx.yaml文件創建orderer Genesis block,在此之前需要為configtxgen工具指定configtx.yaml文件的路徑,我們需要設置一個環境變量,執行如下命令:
export FABRIC_CFG_PATH=$PWD
隨后可以打印查看該目錄是否正確,具體執行命令如下:
echo $PWD
結果如下視圖:
在bin目錄下創建channel-artifacts目錄,用來存放各種渠道的源文件。
編輯configtx.yaml文件,結果如下:
1 Profiles: 2 3 ExampleOrdererGenesis: 4 Orderer: 5 <<: *OrdererExample 6 Organizations: 7 - *OrdererDemo 8 Consortiums: 9 ExampleConsortium: 10 Organizations: 11 - *Demo12 ExampleChannel: 13 Consortium: ExampleConsortium 14 Application: 15 <<: *ApplicationExample 16 Organizations: 17 - *Demo18 Organizations: 19 20 - &OrdererDemo 21 Name: OrdererDemo 22 ID: OrdererMSP 23 MSPDir: crypto-config/ordererOrganizations/example.com/msp 24 25 - &Demo26 Name: DemoMSP 27 ID: DemoMSP 28 MSPDir: crypto-config/peerOrganizations/demo.example.com/msp 29 AnchorPeers: 30 - Host: peer0.demo.anti-moth.com 31 Port: 7051 32 33 Orderer: &OrdererExample 34 35 OrdererType: solo 36 37 Addresses: 38 - orderer.example.com:7050 39 40 BatchTimeout: 2s 41 BatchSize: 42 MaxMessageCount: 10 43 AbsoluteMaxBytes: 99 MB 44 PreferredMaxBytes: 512 KB 45 46 Kafka: 47 Brokers: 48 - 127.0.0.1:9092 49 Organizations: 50 51 Application: &ApplicationExample 52 53 Organizations:
在該文件中,我們定義了組織名稱、組織排序服務名稱、組織渠道名稱、應用渠道名稱、應用聯盟名稱等。
6.4、生成orderer源文件
根據6.3中配置文件的描述,我們將生成的orderer源為ExampleOrdererGenesis。
本步驟將生成genesis.block文件,具體執行命令如下:
./bin/configtxgen -profile ExampleOrdererGenesis -outputBlock ./channel-artifacts/example_genesis.block
該命令會在/opt/gopath/src/tk/bin/channel-artifacts目錄下生成一個genesis.block文件,根據官方demo中的configtx.yaml文件描述,該文件名由於未知原因,不得命名為order.genesis.block。
完成命令后的視圖如下:
具體官方指定方案截圖如下,可參考官網實現:
6.5、生成channel源文件
根據6.3中配置文件的描述,我們將生成的channel源為ExampleChannel。
本步驟將生成channel.tx文件,具體執行命令如下:
./bin/configtxgen -profile ExampleChannel -outputCreateChannelTx ./channel-artifacts/example_channel.tx -channelID channel01
完成命令后的視圖如下:
按照官方給定的方案,執行該方法前可以先指定channel的環境變量,如下視圖:
上圖官方描述的具體執行命令如下:
1 export CHANNEL_NAME=mychannel 2 3 # this file contains the definitions for our sample channel 4 ../bin/configtxgen -profile ExampleChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID $CHANNEL_NAME
該步驟最終執行結果視圖如下:
6.6、生成channel下節點集合認證文件
根據6.3中配置文件的描述,我們將生成的channel源為ExampleChannel。
本步驟將生成channel.tx文件,具體執行命令如下:
./bin/configtxgen -profile ExampleChannel -outputAnchorPeersUpdate ./channel-artifacts/DEMOMSPanchors.tx -channelID channel01 -asOrg DemoMSP
完成命令后的視圖如下:
具體官方指定方案截圖如下,可參考官網實現:
最終我們可以在channel-artifacts目錄下看到成功創建了TKMSPanchors.tx文件,如下視圖:
【注:請無視這其中目錄等名稱的一些小細節,這一章主要是講述如何通過官方給定的二進制文件來生成我們需要的生產證書等配置資源】