mac OS High Sierra でBitcoin Coreをビルド

参考：

- [Mastering Bitcoin](https://goo.gl/SRK34f)
- https://github.com/bitcoin/bitcoin

Bitcoinのエコシステムに加わりたいと思うなら避けては通れない(と勝手に思っている)Bitcoin Coreをビルドしてみようと思います。

# ビットコインコアとは
ビットコインのリファレンスクライアント実装です。このクライアントはビットコインシステムのすべての機能が実装されています。

- ウォレット
- トランザクション認証エンジン(ブロックチェーンの全データを保持する機能)
- peer-to-peerのビットコインネットワークノード

ビットコインコアを触ってみたいだけで、ビルドなんかに興味がないという方は下記サイトから`.dmg`をインストールし、簡単にインストールすることもできます。
[ビットコインコア for mac](https://bitcoin.org/ja/wallets/desktop/mac/bitcoincore/)

# GitHubからclone
早速、GitHubからBitcoin Coreのソースコードをクローンします。
GitHubのBitcoinリポジトリは[こちら](https://github.com/bitcoin/bitcoin)です。

```shell
$ git clone https://github.com/bitcoin/bitcoin.git
```
お好きなブランチを使用してください。僕は現在最新のリリースタグを使うことにしました。

```shell
$ git checkout v0.17.0rc2
```

# build-osx.mdを読む
ビルドしようとしている環境ごとにビルド説明書が丁寧に用意されています。
`/doc/build-osx.md`が今回僕が読むべきドキュメントです。
以降はほぼ`build-osx.md`様の仰せのとおりに動いただけです。

## 事前にインストールが必要なもの
`build-osx.md`曰く、以下のインストールが必要。
- homebrew
- そして、homebrewで一気にいろいろインストール

```shell
$ brew install automake berkeley-db4 libtool boost miniupnpc openssl pkg-config protobuf python qt libevent qrencode
```
- Berkeley DB
自身でビルドする場合は`Berkeley DB`の使用を推奨されている。
クローンしてきた`bitcoin`リポジトリのルートにて、

```shell
$ ./contrib/install_db4.sh .
```
このコマンドによってBerkeley DBのインストールが完了したメッセージと共に表示される下記の`export`と`.configure`文をメモしておく。

```shell
db4 build complete.

When compiling bitcoind, run `./configure` in the following way:

  export BDB_PREFIX='/Users/yuki/develop/bitcoin/db4'
  ./configure BDB_LIBS="-L${BDB_PREFIX}/lib -ldb_cxx-4.8" BDB_CFLAGS="-I${BDB_PREFIX}/include" ...
```

## ビルド
いよいよビルド作業が始まります。

### 1. autogen.sh
`autogen.sh`スクリプトにより、ビットコインコアをビルドしようとしている環境に合わせた各種設定ファイル等が自動的に生成されます。後述する`configure`ファイルもこのスクリプトにより生成されます。
`autogen.sh`スクリプトはプロジェクトルートにあるので、プロジェクトルートにて

```shell
$ ./autogen.sh
```

### 2. configureのオプション確認
`configure`により、環境フレンドリなビルドスクリプトが生成されます。
ちなみに、`./configure --help`でconfigureする際に指定可能な様々なオプションを確認することができます。

```shell
$ ./configure --help
...中略...

By default, `make install' will install all the files in
`/usr/local/bin', `/usr/local/lib' etc.  You can specify
an installation prefix other than `/usr/local' using `--prefix',
for instance `--prefix=$HOME'.

For better control, use the options below.

Fine tuning of the installation directories:
  --bindir=DIR            user executables [EPREFIX/bin]
  --sbindir=DIR           system admin executables [EPREFIX/sbin]
  --libexecdir=DIR        program executables [EPREFIX/libexec]
  --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
  --libdir=DIR            object code libraries [EPREFIX/lib]
  --includedir=DIR        C header files [PREFIX/include]
  --oldincludedir=DIR     C header files for non-gcc [/usr/include]
  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
  --infodir=DIR           info documentation [DATAROOTDIR/info]
  --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
  --mandir=DIR            man documentation [DATAROOTDIR/man]
  --docdir=DIR            documentation root [DATAROOTDIR/doc/bitcoin]
  --htmldir=DIR           html documentation [DOCDIR]
...中略...
```
特にオプションを指定しなければビットコインコアは`/usr/local/bin`, `/usr/local/lib` etc にインストールされるようです。
その他、うんざりするほどたくさんのオプションを紹介してくれます。まだBitcoin Coreを触っていない初心者には、正直何を言っているのかさっぱりなオプションがほとんどなので、今回は見るだけ。

### 3. configure
特にオプションを指定しないには先述のとおりなので、`autogen.sh`時に言われたことだけやります。
言われたことだけとは言ったものの、コマンド末尾に` ...`は入れません。これは、オプションつけたいならこれに続くよ的な意味です。

```shell:configure
$ export BDB_PREFIX='/Users/yuki/develop/bitcoin/db4' 
$ ./configure BDB_LIBS="-L${BDB_PREFIX}/lib -ldb_cxx-4.8" BDB_CFLAGS="-I${BDB_PREFIX}/include"
```


### 4. make + install
`./configure`で特にエラーもなかったので`make`します。

```shell
$ make
```
しばらく時間がかかりますが、特にエラーが出なければビルド完了です。

```shell
$ sudo make install
```
により、インストールされ、`bitcoind`などのコマンドがそのまま利用できるようになります。

```shell
$ which bitcoind
/usr/local/bin/bitcoind
$ which bitcoin-cli
/usr/local/bin/bitcoin-cli
```


### 5. チェック
一応推奨されてます。unit testが実行されます。

```shell
$ make check
```
テストが通ればビルド完了です！

今回特に触れませんでしたが、もし`.app`ファイルをインストールしたい場合は`.dmg`を作るために

```shell
$ make deploy
```
することもできます。ただしこの場合は、`configure`する前に`honebrew`で`librsvg`をインストールしておく必要があります。

```shell
$ brew librsvg
```


## まとめ
実際のところ、ごくごく普通のUNIX系OSにソースコードからビルドする手順そのものでした。
特に引っかかる箇所もなく非常にスムーズに完遂できてしまいました。

**次回、Bitcoin Coreを動かしてみる** の巻