ファブリックハイパーレジャー1.4.1ナショナルシークレット修正バージョンCentosスタンドアロン展開およびテストプロセス
説明:CSDN著者に関するこの論文の参照コーラ少ない氷で記録時間のファブリック状態秘密のビルドプロセスノードバージョンこの記事の。同時に、CSDNのXiao Zhangにも感謝します。彼の無私の答えに慌てず、展開プロセスを支援します。最後に、CSDNのdddengyunjieに、国家機密変換バージョンをリリースし、通常の作業を支援してくれたことに感謝します。
1.準備条件
-
ここでは説明しない公式のFabricHyperledgerドキュメントの要件に従って、git、docker、docker-compose、goなどをインストールします。
-
注:Go言語バージョンは1.14.1以降よりも優れています。そうでない場合、問題が発生する可能性があります。
-
注:dockerのインストールにyum installをインストールしないでください。インストールされているバージョンが低すぎます(17.06より上である必要があります)。すでにインストールされている場合は、削除して再インストールする方法について以下の記事があります。もちろん、この記事を読んで、インストールせずにインストールすることもできます。
CSDNへのDockerのインストールが遅すぎるため、国内のミラーリングサービスを使用してすばやくインストールしてください
アリババクラウドデータソースを使用することをお勧めします。
または、
curl -fsSL https://get.docker.com/ | sh
dockerをインストールします(中国では推奨されません、低速)。
-
-
画像をパッケージ化するときに
bzip2
ツールを使用する必要があります。インストールされていない場合は、yum -y install bzip2
-
GOPATHを設定するために、この記事では、GOPATHがに設定されていることを前提としてい
/root/gopath
ます。GO111MODULE
デフォルトにするための環境変数は、のようになっていることに注意してください。auto
変更しないでくださいon
。
2.変更されたソースコードをダウンロードします
1.ディレクトリを作成します
mkdir -p $GOPATH/src/github.com/hyperledger
2.ダウンロード
cd $GOPATH/src/github.com/hyperledger
git clone https://github.com/dddengyunjie/fabric
注:国内ダウンロードは比較的遅いため、ダウンロードしたパッケージファイルを別の場所から直接コピーできます(パッケージと依存ライブラリのコピーの方が優れている場合は、ここでは行いません)。
梱包と開梱にはtar
コマンドを使用することをお勧めします。
注:この変換は、実際にはHyperledger Fabricv1.4.2の国家機密変換です。
注:ディレクトリ構造は固定されています。プロジェクトディレクトリは$ GOPATH / src / github.com / hyperledger / fabricである必要があります。
3、インストールの依存関係とビルドツールの例
不足している依存関係をダウンロードしてツールを構築する方法は次のとおりです。
1.golang.org/xでの依存関係
ここでは、次の2つのライブラリをダウンロードする必要があります。
mkdir -p $GOPATH/src/golang.org/x
cd $GOPATH/src/golang.org/x
git clone https://github.com/golang/crypto.git
git clone https://github.com/golang/sys.git
同時に、これはダウンロードデモの例でもあります。
2.protoc-gen-goツールを構築します
cd $GOPATH/src
mkdir golang
cd golang
git clone https://github.com/golang/protobuf.git
cd protobuf/protoc-gen-go/
go build
go install
ls $GOPATH/bin
これは、国内サーバーを直接構築できない場合に使用される、デモンストレーションの例でもあります。もちろん、他の場所から直接コピーするなど、より簡単な方法もあります(推奨される方法)。
3.嘲笑ツールを作成する
mkdir -p $GOPATH/src/github.com/vektra
cd $GOPATH/src/github.com/vektra
git clone --branch v1.1.2 https://github.com/vektra/mockery.git
cd mockery/cmd/mockery
go install mockery.go
ls $GOPATH/bin
ここでは、嘲笑ツールが個別に作成されていると便利です。
第4に、ソースコードのスクリプト内の無効なURLを置き換えます
1、Makefile
プロジェクトディレクトリに切り替えます
cd $GOPATH/src/github.com/hyperledger/fabric
vim Makefile
CHAINTOOL_URL
置き換える必要のある値:
https://hyperledger.jfrog.io/hyperledger/fabric-maven/org/hyperledger/fabric-chaintool/$(CHAINTOOL_RELEASE)/fabric-chaintool-$(CHAINTOOL_RELEASE).jar
理由:元のURLは維持されなくなったため、置き換える必要があります。
このMakefileの詳細については、Go言語課金ステーションの記事を参照してください:Fabric 1.4Makefileを使用してFabric構築をマスターするのは簡単です。
2、gotools.mk
vim gotools.mk
go.fqp.mockery := github.com/vektra/mockery/cmd/mockery
この行をに変更しgo.fqp.mockery := github.com/vektra/mockery/cmd
ます。githubのディレクトリが変更されたため、最後の嘲笑を削除します。ただし、ここでの変更は、作成中に中断されないようにすることしかできず、実際にmockery
ツールを構築することはできません。具体的な詳細については、後でdockerを作成するときに説明します。
5、バイナリファイルをコンパイルします
chmod +x scripts/*.sh
make release
make
golangツールライブラリの数が少ないことを確認するメッセージが表示されます。これらのライブラリは、3.1のメソッドでダウンロードするか、他の場所からコピーできます。プロンプトに注意してください。このプロジェクトのベンダー、GOPATH、およびGOROOTディレクトリから検索されます。ダウンロード後、不足している依存ライブラリをvendor
ディレクトリ内の対応する場所にコピーすることもできます(次のステップはmake dockerを使用することです)。
このメーカーで不足しているパッケージは次のとおりです(ここには記載されていません)。
golang.org/x/crypto/chacha20poly1305
golang.org/x/sys/cpu
......
ここでは、上記の方法に従ってインストールcrypto
およびsys
パッケージ化するだけで済みます。
それから私達は再make
:
cd $GOPATH/src/github.com/hyperledger/fabric
make release
tree release
インストールtree
コマンドがない場合は、レイヤーごとにls
。
release/linux-amd64/bin
ディレクトリに生成されたファイル。
注:最初にディレクトリを別の場所にコピーします。実行するmake clean
と、このディレクトリが削除されるためです。通常は実行しませんが、必要になる場合はどうすればよいですか。
cp -r release/linux-amd64/bin ~/
ls ~/bin
ご覧のとおり、正常に複製されました。
6、画像をコンパイルします
make docker
最初のステップでは、いくつかの基本的な画像をダウンロードして長時間待機します...プロキシ画像リポジトリを使用することはお勧めしません。単独でダウンロードするだけです。
2番目のステップでは、最初にピアをコンパイルしてから、依存度の低いライブラリの入力を求めます。makeリリース中に依存ライブラリがプロジェクトベンダーディレクトリにコピーされない場合は、最初にここにコピーする必要があります。依存関係を見つける順序はローカルベンダーであり、後の2つは仮想ディレクトリであり、マシンのGOPATHとGOROOTではないことに注意してください。
上記の3.1の方法でダウンロードされた他のライブラリも、ベンダーの対応するディレクトリにコピーされます。もちろん、scpコマンドを使用して他のマシンからコピーすることもできます。ここにライブラリが少ない場合は、ライブラリをコピーしてください。同じディレクトリ内の他のライブラリをコピーする必要はありません。
以前にgolang.org/x/の下にパッケージcrypto
とsys
パッケージをダウンロードしたことがあるので、この操作で欠落しているライブラリは、ローカルの$ GOPATHディレクトリからコピーできます。
mkdir -p vendor/golang.org/x/crypto/internal/
cp -r $GOPATH/src/golang.org/x/crypto/chacha20poly1305 vendor/golang.org/x/crypto/
cp -r $GOPATH/src/golang.org/x/crypto/curve25519 vendor/golang.org/x/crypto/
cp -r $GOPATH/src/golang.org/x/crypto/chacha20 vendor/golang.org/x/crypto/
cp -r $GOPATH/src/golang.org/x/crypto/internal/subtle vendor/golang.org/x/crypto/internal/
cp -r $GOPATH/src/golang.org/x/crypto/poly1305 vendor/golang.org/x/crypto/
cp -r $GOPATH/src/golang.org/x/sys/cpu vendor/golang.org/x/sys/
その後、make docker
ビルドはpeer-image
成功します。
3番目のステップでは、をビルドしorder-image
ます。
4番目のステップでは、gotoolsツールを構築します。ネットワークの問題が原因で、最初のツールcounterfeiter
や他のツールをビルドするときに、依存関係ライブラリの接続タイムアウトを取得するように求められることがあります。この問題を手動で解決する方法については、後で説明します。時間を節約するために、ctrl + cで直接オフにすることができます。
失敗がなければ、ビルドは成功します。次に、ステップ5にスキップします。
途中でツールを作成できない場合は、以下をお読みください。
を実行するls -a
と、プロジェクト.build
ディレクトリの下にさらにディレクトリがあることがわかります。ディレクトリは最初は存在しません。スクリプトがここで実行されると自動的に作成され、ビルドされたツールが.build/docker/gotools/bin/
ディレクトリに生成されます。
ここにポイントがあります:
記録的な速さで氷を含むコーラが少ないファブリック状態シークレットバージョンビルドプロセスノードこの記事では方法について説明していますが、前の例の方法を使用するためのツール(嘲笑、protoc-gen-goツールなど)が手作業で作成されてからコピーされていないことです.build/docker/gotools/bin/
カタログに移動します。しかし、この方法を何度も試したところ、問題があることがわかりまし
た。コピーしてdockerを作成した後、gotoolsの一部のツールの作成をスキップし(この方法でも実行できます)、ステップ5に直接スキップします。したがって、推奨されるアプローチは、ツールの1つだけをコピーするのではなく、他の場所からビルドされたすべてのツールをコピーすることです(たとえば、コピーソースとして香港サーバー上でビルドします)。次の操作例では、他のサーバーからすべてのツールを一度にコピーします。
cd .build/docker/gotools/bin/
scp useranme@hostname:/opt/gopath/src/github.com/hyperledger/fabric/.build/docker/gotools/bin/* ./
パスワードを入力した後、コピーが完了するのを待ちます。
構築されたすべてのツールをすべてのgitee
人がダウンロードできるように配置し、完了したら倉庫の住所を追加する予定です。
倉庫の住所は次のとおりです: https : //gitee.com/TianCaoJiangLin/gotools-bin
5番目のステップ、実行を継続make docker
すると、chaintoolツールインターフェイスをダウンロードしているように見えます。国内のダウンロード速度は非常に遅いです。このとき、ctrl + cでオフにし、他の場所で作成されたツールを対応する.build/bin/
ディレクトリにコピーできます。特定の操作については説明しません。
注:このツールは私の倉庫にも置かれています。
6番目のステップを実行してから再度実行make docker
するbuild-env
とimage-tool
、コンパイルされて待機します。通常、最終的に成功するまで問題はありません。
この時点で、使用するdocker images
とすべてのミラーが一覧表示され、名前または名前のないミラーがいくつか表示されます。これは、障害プロセス中に生成された役に立たないミラーであるはずです。次のコマンドでそれらを削除できます。
docker rmi image_id -f
ここで、image_idはイメージIDを指しmake clean
ます。軽く使用しないように注意してください。
ここには欠陥があります:
ビルドが完了した後、実行します
tree .build/docker/gotools/bin/
リストにgotools.mk
ある11個のツールではなく、10個のツールしかリストされていないことがわかります。1つがmockery
不足している場合はどうすればよいですか?無効なURLの置き換えで述べた一般的な理由ですが、具体的な詳細(能力の制限)については明確ではありません。
ここで1つ少なくmockery
ても実際の操作には影響しませんが、完璧主義者の場合は、ここを通り抜けることができないはずです。どうすればよいですか。建物の正面をコピーしてからツールを追加するため
の.build/docker/gotools/bin
すべてのツールmockery
。次に、再構築し、ビルドツールを手動でコピーします。
mkdir -p ~/docker/gotools
cp -r .build/docker/gotools/bin ~/docker/gotools
cp $GOPATH/bin/mockery ~/docker/gotools/bin/
tree ~/docker/gotools/bin
make clean
make docker
建物内でgotools
いつctrl + c
オフにするか、次に:
cp ~/docker/gotools/bin/* .build/docker/gotools/bin/
make docker
注:ここで再構築するには、名前や名前のない一部の画像も確認する必要がありますが、削除してください。
セブン、ファブリックをダウンロード-サンプルとテスト
1.バージョン1.4.2のファブリックサンプルをダウンロードします
将来的にCAを使用する可能性があるため(この記事にはCAの国家機密バージョンは含まれていませんが)、テストにはファブリックサンプルv1.4.2を使用します。ファブリックサンプルv1.4.1サンプルネットワークの起動スクリプトにはCAが含まれていません。自分で作成するのは面倒です。
cd ~
git clone --branch v1.4.2 https://github.com/hyperledger/fabric-samples.git
2.上記でコンパイルしたバイナリファイルをfabric-sampleディレクトリにコピーします
make release
このステップは、コピー生成されたbinディレクトリからルートディレクトリfabirc-sampleにコピーされているため、次のコマンドを使用できます。
cp -r bin fabric-samples
3.変更configtx.yaml
国のシークレットバージョンの注文ノードはサポートされていないため、次と同じ設定にOrdererCapabilities V1_4_2
変更しfabric-sample v1.4.1
ます。
vim first-network/configtx.yaml
- 最初
Capabilities
の一部変更。Channel
V1_4_2: true
V1_3: true
- 最初
Capabilities
の一部変更。Orderer
V1_4_2: true
V1_1: true
- 最初の
Capabilities
部分Application
はV1_4_2: true
コメントアウトされています。 - 最初
Capabilities
の一部変更。Application
V1_3: false
V1_3: true
4.テストを実行します
cd fabirc-sample/first-network
./byfn.sh up
プロセス中にピアノードがクラッシュして実行できないというエラーが報告された場合(一部のマシンまたはcentosバージョンでこの状況が発生する場合があります)、現在のバージョンの問題が原因である可能性があります。これは、特定のcentosバージョン(またはサーバー設定)で設定する必要があります。ピアの環境変数。具体的な詳細については、Alibaba Cloudの記事を参照してください:SIGSEGVの問題の分析とAlibabaCloud環境でのHyperledgerFabricの展開のためのソリューションの経験共有
ここbase/peer-base.yaml
で変更するには、ノードの環境変数設定に:を追加します- GODEBUG=netdns=go
。
その後:
./byfn.sh down
./byfn.sh up
8.ミラーのエクスポートとインポート
変更されたナショナルシークレットバージョンを複数のマシンに展開する必要がある場合、各マシンがこの手順を実行することは不可能であり、時間がかかりすぎます。私の個人的な想定は、コンパイルされたイメージをローカルファイルとしてエクスポートし、それを別のマシンにコピーしてからイメージをインポートし、上記でmake release
生成されたbin
フォルダーをコピーすることです。
このアイデアは他の人によって実現されており、実現可能であり、速度は作成よりもはるかに高速です。
最後に、展開テストは多くのステップを伴う操作であるため、作成は比較的簡単であり、一部のステップ、特にツールを構築するステップも不明確です。記事に誤りがあったり、操作で問題が発生した場合は、メッセージを残して一緒に話し合ってください。