Hyperledger fabric 1.3安裝記錄
阿新 • • 發佈:2018-12-25
一、環境
主機:阿里雲輕量應用伺服器
系統:Ubuntu 16.04(基於4.4核心)
二、先決條件
2.1 go
用此時最新的1.11.2版本
下載:
wget https://dl.google.com/go/go1.11.2.linux-amd64.tar.gz
安裝:
tar -zxvf go1.11.2.linux-amd64.tar.gz
加入到環境變數:
export PATH=$PATH:/home/admin/go/bin export GOROOT=/home/admin/go export GOPATH=/home/admin export GOBIN=$GOROOT/bin
2.2 docker
不用apt去下載安裝,直接安裝比較新的
下載:
wget https://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/amd64/docker-ce_17.12.1~ce-0~ubuntu_amd64.deb
安裝:
dpkg -i docker-ce_17.12.1~ce-0~ubuntu_amd64.deb
看看安裝好沒:
docker version
2.3 docker-compose
這個直接apt install就行
apt install docker-compose
安裝完好像會把docker版本降低,重新走安一遍docker
2.4 總結
總之 搞定go、docker、docker-compose、git、這四個,版本最好不要太舊不然會有大大小小的問題
三、fabric安裝
3.1 官方安裝指令分析
官網上給出一條直接安裝的指令:
curl -sSL http://bit.ly/2ysbOFE | bash -s 1.3.0
運氣不好,被牆,路徑等等原因安裝不上,索性分析一下
這條語句是從那個壓縮後的網址找到安裝指令碼,再傳1.3.0這個引數進行下載安裝
實際訪問的地址是:
https://raw.githubusercontent.com/hyperledger/fabric/master/scripts/bootstrap.sh
直接先把bootstrap.sh下載下來:
curl -sSL https://raw.githubusercontent.com/hyperledger/fabric/master/scripts/bootstrap.sh -o bootstrap.sh
接下來分析一下看bootstrap.sh具體做什麼工作
3.2 bootstrap.sh
開啟這個指令碼檔案可以看到:
# if version not passed in, default to latest released version
export VERSION=1.3.0
# if ca version not passed in, default to latest released version
export CA_VERSION=$VERSION
# current version of thirdparty images (couchdb, kafka and zookeeper) released
export THIRDPARTY_IMAGE_VERSION=0.4.13
export ARCH=$(echo "$(uname -s|tr '[:upper:]' '[:lower:]'|sed 's/mingw64_nt.*/windows/')-$(uname -m | sed 's/x86_64/amd64/g')")
export MARCH=$(uname -m)
printHelp() {
echo "Usage: bootstrap.sh [version [ca_version [thirdparty_version]]] [options]"
echo
echo "options:"
echo "-h : this help"
echo "-d : bypass docker image download"
echo "-s : bypass fabric-samples repo clone"
echo "-b : bypass download of platform-specific binaries"
echo
echo "e.g. bootstrap.sh 1.3.0 -s"
echo "would download docker images and binaries for version 1.3.0"
}
- 所以那個1.3.0就是傳入的fabric版本
- 預設fabric引數是1.3.0,ca版本跟fabric版本一樣也是1.3.0,docker映象版本是0.4.13
- 根據列印幫助函式,可以看到如何操作這個指令碼
主要的部分是:
if [ "$SAMPLES" == "true" ]; then
echo
echo "Installing hyperledger/fabric-samples repo"
echo
samplesInstall
fi
if [ "$BINARIES" == "true" ]; then
echo
echo "Installing Hyperledger Fabric binaries"
echo
binariesInstall
fi
if [ "$DOCKER" == "true" ]; then
echo
echo "Installing Hyperledger Fabric docker images"
echo
dockerInstall
fi
- 可以看到有三個部分,分別對應著
- samplesInstall:從github上clone專案fabric-samples
- binariesInstall:從下載地址下載需要的二進位制檔案和配置檔案
- dockerInstall:下載需要的docker映象
3.3 根據bootstrap.sh自己個安裝
3.3.1 克隆fabric-samples
git clone https://github.com/hyperledger/fabric-samples.git
看看版本情況:
git branch -a
現在就是最新版的1.3,不需要改,如果要改成1.1版本:
git checkout release-1.1
3.3.2 下載二進位制檔案和配置檔案
原始碼為:
binariesInstall() {
echo "===> Downloading version ${FABRIC_TAG} platform specific fabric binaries"
binaryDownload ${BINARY_FILE} https://nexus.hyperledger.org/content/repositories/releases/org/hyperledger/fabric/hyperledger-fabric/${ARCH}-${VERSION}/${BINARY_FILE}
if [ $? -eq 22 ]; then
echo
echo "------> ${FABRIC_TAG} platform specific fabric binary is not available to download <----"
echo
fi
echo "===> Downloading version ${CA_TAG} platform specific fabric-ca-client binary"
binaryDownload ${CA_BINARY_FILE} https://nexus.hyperledger.org/content/repositories/releases/org/hyperledger/fabric-ca/hyperledger-fabric-ca/${ARCH}-${CA_VERSION}/${CA_BINARY_FILE}
if [ $? -eq 22 ]; then
echo
echo "------> ${CA_TAG} fabric-ca-client binary is not available to download (Available from 1.1.0-rc1) <----"
echo
fi
}
- 可以看到一共從兩個地址中下載了兩個壓縮包檔案
- 之前就老是在這裡失敗,可能是網不好吧
- 直接自己下載
wget https://nexus.hyperledger.org/content/repositories/releases/org/hyperledger/fabric/hyperledger-fabric/linux-amd64-1.3.0/hyperledger-fabric-linux-amd64-1.3.0.tar.gz
wget https://nexus.hyperledger.org/content/repositories/releases/org/hyperledger/fabric-ca/hyperledger-fabric-ca/linux-amd64-1.3.0/hyperledger-fabric-ca-linux-amd64-1.3.0.tar.gz
- 這兩個壓縮包一個放著二進位制檔案,這些檔案可以通過編譯原始碼得到;另一個放著配置檔案
- 全部放到fabeic-samples裡解壓可以得到bin和config兩個資料夾
- 把bin資料夾加到環境變數裡去
export bin檔案目錄
- 執行一下看看操作正確沒:
peer version
順便一提,那些二進位制檔案可以通過編譯hyperledger fabeic原始碼得到:
git clone https://github.com/hyperledger/fabric.git
make release
3.3.3 下載docker映象檔案
dockerInstall:
dockerInstall() {
which docker >& /dev/null
NODOCKER=$?
if [ "${NODOCKER}" == 0 ]; then
echo "===> Pulling fabric Images"
dockerFabricPull ${FABRIC_TAG}
echo "===> Pulling fabric ca Image"
dockerCaPull ${CA_TAG}
echo "===> Pulling thirdparty docker images"
dockerThirdPartyImagesPull ${THIRDPARTY_TAG}
echo
echo "===> List out hyperledger docker images"
docker images | grep hyperledger*
else
echo "========================================================="
echo "Docker not installed, bypassing download of Fabric images"
echo "========================================================="
fi
}
- 可以看到分別執行了三個函式dockerFabricPull(fabric的映象)、dockerCaPull(fabric ca的映象)、dockerThirdPartyImagesPull(couchdb、kafka、zookeeper三個映象)
- dockerFabricPull:
dockerFabricPull() {
local FABRIC_TAG=$1
for IMAGES in peer orderer ccenv javaenv tools; do
echo "==> FABRIC IMAGE: $IMAGES"
echo
docker pull hyperledger/fabric-$IMAGES:$FABRIC_TAG
docker tag hyperledger/fabric-$IMAGES:$FABRIC_TAG hyperledger/fabric-$IMAGES
done
}
- dockerCaPull:
dockerCaPull() {
local CA_TAG=$1
echo "==> FABRIC CA IMAGE"
echo
docker pull hyperledger/fabric-ca:$CA_TAG
docker tag hyperledger/fabric-ca:$CA_TAG hyperledger/fabric-ca
}
- dockerThirdPartyImagesPull:
dockerThirdPartyImagesPull() {
local THIRDPARTY_TAG=$1
for IMAGES in couchdb kafka zookeeper; do
echo "==> THIRDPARTY DOCKER IMAGE: $IMAGES"
echo
docker pull hyperledger/fabric-$IMAGES:$THIRDPARTY_TAG
docker tag hyperledger/fabric-$IMAGES:$THIRDPARTY_TAG hyperledger/fabric-$IMAGES
done
}
命令一條一條pull&tag
直接命令列執行這三個函式中執行的命令
docker pull hyperledger/fabric-peer:1.3.0
docker tag hyperledger/fabric-peer:1.3.0 hyperledger/fabric-peer
docker pull hyperledger/fabric-orderer:1.3.0
docker tag hyperledger/fabric-orderer:1.3.0 hyperledger/fabric-orderer
docker pull hyperledger/fabric-ccenv:1.3.0
docker tag hyperledger/fabric-ccenv:1.3.0 hyperledger/fabric-ccenv
docker pull hyperledger/fabric-javaenv:1.3.0
docker tag hyperledger/fabric-javaenv:1.3.0 hyperledger/fabric-javaenv
docker pull hyperledger/fabric-tools:1.3.0
docker tag hyperledger/fabric-tools:1.3.0 hyperledger/fabric-tools
docker pull hyperledger/fabric-ca:1.3.0
docker tag hyperledger/fabric-ca:1.3.0 hyperledger/fabric-ca
docker pull hyperledger/fabric-couchdb:1.3.0
docker tag hyperledger/fabric-couchdb:1.3.0 hyperledger/fabric-couchdb
docker pull hyperledger/fabric-kafka:1.3.0
docker tag hyperledger/fabric-kafka:1.3.0 hyperledger/fabric-kafka
docker pull hyperledger/fabric-zookeeper:1.3.0
docker tag hyperledger/fabric-zookeeper:1.3.0 hyperledger/fabric-zookeeper
看一下是否都下載好了:
docker images | grep hyperledger*
或者直接執行bootstrap.sh,跳過前兩步直接只下載映象:
./bootstrap.sh 1.3.0 -s -b
四、跑一下demo
進入到fabric-samples目錄下的first-network
執行:
./byfn.sh generate
./byfn.sh up
列印一堆東西后能看到下圖就對了即(一個大大的字元END)
阿里雲會報錯:After 10 attempts,peer0.org1 has failed to join channel ‘mychannel’
這時修改/etc/resolv.conf檔案,將裡面options timeout:2 attempts:3 rotate single-request-reopen註釋掉
更改前:
nameserver 100.100.2.136
nameserver 100.100.2.138
options timeout:2 attempts:3 rotate single-request-reopen
更改後
nameserver 100.100.2.136
nameserver 100.100.2.138
#options timeout:2 attempts:3 rotate single-request-reopen