Hyperledger fabric をビルドしてみる

Hyperledgerプロジェクトの[Hyperledger fabric](https://github.com/hyperledger/fabric.git)は、バイナリをダウンロードしてつかうことができます。

- [Install Binaries and Docker Images](https://hyperledger-fabric.readthedocs.io/en/latest/getting_started.html#install-binaries-and-docker-images)
- [Download Platform-specific Binaries](https://hyperledger-fabric.readthedocs.io/en/latest/samples.html#binaries)

ここでは、OSSとしてソースが公開されているのだから、あるいは、とにかく最新の状況に追随したいなどの理由があるかと思いますが、せっかくですからソースからビルドしてみたいと思います。

# 1. Hyperledger fabricのビルド

[Githubのリポジトリ](https://github.com/hyperledger/)をみても[Hyperledger fabric関連](https://github.com/hyperledger?q=fabric)のものが10以上公開されています。ここでは、まず`fabric-baseimage`をビルドして開発用のコンテナを作成し、`fabric-baseimage`を使用して`fabric-ca`と`fabric`をビルドしていきます。

- [fabric-baseimage](https://github.com/hyperledger/fabric-baseimage.git)
- [fabric-ca](https://github.com/hyperledger/fabric-ca.git)
- [fabric](https://github.com/hyperledger/fabric.git)

# 2. fabric-baseimageのビルド

最初に、以下の手順で`fabric-baseimage`をビルドします。準備としてfabricの開発に利用されている`Go`をインストール済みで環境変数も設定されているものとします。

ここでは、[Go 1.9.1](https://golang.org/dl/)をインストールして、以下の設定となっています。

```
GOPATH=/usr/local
GOROOT=/usr/local/go
```

それでは、始めましょう。

```
cd /usr/local
mkdir -p github.com/hyperledger
cd github.com/hyperledger
git clone https://github.com/hyperledger/fabric-baseimage.git
```

現在のリリースをタグで確認してみます。

```
cd fabric-baseimage
git tag
...
v0.4.2
```

現時点（2017/10/14)では、v0.4.2 までリリースされています。

クローンしたディレクトリで、タグをv0.4.2にして実際にビルドしてみます。

```
git checkout refs/tags/v0.4.2
make
```

ここで、`Makefile`を見ると`v0.4.2`にしていますから`IS_REELEASE=true`ですが、マスターブランチの場合以下となっています。

```
VERSION ?= 0.4.3
IS_RELEASE=false
```

この状態でビルドすると、`v0.4.3`のスナップショットが作成されるようになっています。ここでは、`v0.4.2`でビルドしてみます。

```
$ docker images
REPOSITORY                     TAG                 IMAGE ID            CREATED           SIZE
hyperledger/fabric-baseimage   armv7l-0.4.2        33ebe04e2ec2        12 hours ago        1.15GB
hyperledger/fabric-baseimage   latest              33ebe04e2ec2        12 hours ago        1.15GB
hyperledger/fabric-basejvm     armv7l-0.4.2        9e1e5e3400b1        15 hours ago        456MB
hyperledger/fabric-basejvm     latest              9e1e5e3400b1        15 hours ago        456MB
hyperledger/fabric-baseos      armv7l-0.4.2        fe695ff1313f        15 hours ago        171MB
hyperledger/fabric-baseos      latest              fe695ff1313f        15 hours ago        171MB
armv7/armhf-ubuntu             latest              4d7ccbc584c8        11 months ago       122MB
```

そう、`Raspberry Pi`でビルドしていますが、私の環境では`3時間弱`でした(クラウドでは30分弱)。

# 3. fabric-caのビルド

続けて`fabric-ca`をビルドしてみます。

```
cd /usr/local/src/github.com/hyperledger
git clone https://github.com/hyperledger/fabric-ca.git
cd fabric-ca
git tag
git checkout refs/tags/v1.0.3
```

クローンしてタグを見ると現時点(2017/10/14)では`v1.0.3`がリリースされていましたので、このバージョンにしています。

ところが`Makefile`の`BASEIMAGE_RELEASE`を見ると`0.3.1`ですから、`fabric-baseimage`とはバージョンの整合が取れていないようです。ここは、`fabric-baseimage`を`0.3.1`にしても良いのですが、`Makefile`を修正して`0.4.2`でビルドしちゃいましょう。

```
$ vi Makefile
BASEIMAKE_RELEASE = 0.4.2
$ make docker
```

ビルドできると、次のようにコンテナが作成されます。私の環境では、`約8分`ほど(クラウドでは2分弱)でビルドできました。

```
$ docker images
REPOSITORY                     TAG                 IMAGE ID            CREATED           SIZE
hyperledger/fabric-ca          armv7l-1.0.3        7fa1e410181c        6 minutes ago       240MB
hyperledger/fabric-ca          latest              7fa1e410181c        6 minutes ago       240MB
```

# 4. fabricのビルド

最後に`fabric`をビルドします。

```
cd /usr/local/src/github.com/hyperledger
git clone https://github.com/hyperledger/fabric.git
cd fabric
git tag
git checkout refs/tags/v1.0.3
```

`fabric`も現在(2017/10/14)の最新のタグでビルドしてみます。`fabric-ca`と同様にというか、こちらは`baseimage`として`0.3.2`を使用しているようですから修正して`0.4.2`でビルドすることにします。

```
$ vi .baseimage-release
0.4.2
$ make docker
```

ビルドできると、以下のように沢山のコンテナが作成されます。私の環境では、`約28分`(クラウドでは7分弱)でした。

```
$ docker images
REPOSITORY                     TAG                 IMAGE ID            CREATED           SIZE
hyperledger/fabric-tools       armv7l-1.0.3        23b8093b375e        4 minutes ago       1.21GB
hyperledger/fabric-tools       latest              23b8093b375e        4 minutes ago       1.21GB
hyperledger/fabric-couchdb     armv7l-1.0.3        6df83554f29a        7 minutes ago       1.37GB
hyperledger/fabric-couchdb     latest              6df83554f29a        7 minutes ago       1.37GB
hyperledger/fabric-kafka       armv7l-1.0.3        cd4eb25a856d        18 minutes ago      1.18GB
hyperledger/fabric-kafka       latest              cd4eb25a856d        18 minutes ago      1.18GB
hyperledger/fabric-zookeeper   armv7l-1.0.3        0fdf2dcbdf9c        19 minutes ago      1.2GB
hyperledger/fabric-zookeeper   latest              0fdf2dcbdf9c        19 minutes ago      1.2GB
hyperledger/fabric-testenv     armv7l-1.0.3        b9d161f73949        20 minutes ago      1.28GB
hyperledger/fabric-testenv     latest              b9d161f73949        20 minutes ago      1.28GB
hyperledger/fabric-buildenv    armv7l-1.0.3        5850e536d9df        24 minutes ago      1.2GB
hyperledger/fabric-buildenv    latest              5850e536d9df        24 minutes ago      1.2GB
hyperledger/fabric-orderer     armv7l-1.0.3        1f93ac8b56ad        25 minutes ago      190MB
hyperledger/fabric-orderer     latest              1f93ac8b56ad        25 minutes ago      190MB
hyperledger/fabric-peer        armv7l-1.0.3        4ec6198cf40e        26 minutes ago      193MB
hyperledger/fabric-peer        latest              4ec6198cf40e        26 minutes ago      193MB
hyperledger/fabric-javaenv     armv7l-1.0.3        82fecd854b30        27 minutes ago      1.26GB
hyperledger/fabric-javaenv     latest              82fecd854b30        27 minutes ago      1.26GB
hyperledger/fabric-ccenv       armv7l-1.0.3        cbe8d829188d        28 minutes ago      1.18GB
hyperledger/fabric-ccenv       latest              cbe8d829188d        28 minutes ago      1.18GB
```

# 5. fabric-samplesを動かす

一通りビルドできたら、[Hyperledger fabric 1.0.1 をドキュメント通りに動かす](https://qiita.com/tkyonezu/items/190ea3b4cc3f4de4fbdf)の手順で動かしてみます。

今までと同様にタグを見ると`v1.0.2`になっていますので、これを使用してみます。

```
cd /usr/local/src/github.com/hyperledger
git clone https:/github.com/hyperledger/fabric-samples.git
cd fabric-samples
git tag
git checkout refs/tags/v1.0.2
```

後は、上記のページのように実行してみます。`Raspberry Pi`を使用しても、無事に実行できているようです。

__（おまけ）__fabricのバージョンがあがっているためか、上記のページを書いた頃よりも倍以上速くなっているようでした。