Develop with pleasure!

福岡でCloudとかBlockchainとか。

Bitcoin Coreのビルド

Bitcoinの公式実装であるBitcoin Core。他のブロックチェーンの実装でもBitcoin Coreをフォークした実装が多く、手軽にオレオレ ブロックチェーンを作るのであればBitcoin Coreをフォークするのがお手軽。

ということでBitcoin Coreをソースからビルドしてみる。

最初にビルド手順を把握しておく。今回ビルドに利用するのはUbuntu 14.04 LTSなので以下のドキュメントを参考にする。

github.com

ざっとインストールに必要なのが↓

動作環境

C++コンパイラがだいぶメモリ食うので、Bitcoin Coreをビルドする際には少なくとも1GBほど空きメモリがあるようにする。512MB以下だとスワップが発生してえらい時間かかると。

UbuntuDebianでのビルドの依存関係

ビルドに必要な以下のライブラリをインストールしておく必要がある。

sudo apt-get install build-essential libtool autotools-dev automake pkg-config libssl-dev libevent-dev bsdmainutils

Ubuntu 14.04以上とDebian 7以上であればboost開発パッケージがある。boostパッケージの必要な部分のみインストールするには↓。

sudo apt-get install libboost-system-dev libboost-filesystem-dev libboost-chrono-dev libboost-program-options-dev libboost-test-dev libboost-thread-dev

もしそれでうまくいかない場合はboostの開発パッケージをインストールする。

sudo apt-get install libboost-all-dev

ウォレットではBerkeleyDBが必要になる。db4.8のパッケージは、ここから入手可能。以下のコマンドでパッケージリポジトリを追加しlibdbをインストールする。

sudo add-apt-repository ppa:bitcoin/bitcoin
sudo apt-get update
sudo apt-get install libdb4.8-dev libdb4.8++-dev

UbuntuDebianはそれぞれ独自にlibdb-devとlibdb++-devのパッケージを持ってるけど、これはBerkeleyDB 5.1以降のもので、BerkeleyDB 4.8ベースで配布済みのバイナリウォレットと互換性がないので、↑のように4.8ベースのライブラリをインストールする必要がある。ウォレットの互換性を気にしないのであればconfigureのオプションで--with-incompatible-bdbを付加すれば良い。

Disable-wallet mode

ウォレットは不要でP2Pノードとしてのみ起動する場合は以下のオプションを付けてdisable-wallet modeでコンパイルする。

./configure --disable-wallet

この場合、BerkeleyDB 4.8の依存性は必要なくなる。

GUI用の依存関係

GUIを利用するBitcoin-Qtをビルドしたい場合は、Qtの開発パッケージをインストールする必要がある。Qt5かQt4が必要で両方インストールされてる場合はQt5が使われる。configureオプションで--with-gui=qt4を指定すればQt4を使う。GUIが不要な場合は--without-guiオプションを付加してビルドする。

Qt5をインストールする場合(推奨)は以下のパッケージをインストールする。

sudo apt-get install libqt5gui5 libqt5core5a libqt5dbus5 qttools5-dev qttools5-dev-tools libprotobuf-dev protobuf-compiler

Qt4の場合は↓

sudo apt-get install libqt4-dev libprotobuf-dev protobuf-compiler

オプションで、QRコードを生成したい場合は↓もインストール。

sudo apt-get install libqrencode-dev

Qtがインストールされると、configureやbitcoin-qtの実行ファイルのビルド時に勝手に見つけてくれる。

miniupnpc

miniupnpcUPnPのポートマッピングで使われる。ここからダウンロード可能。以下コンパイルオプション。

--without-miniupnpc      UPnP サポート無し(なのでminiupnp も不要)
--disable-upnp-default   (デフォルト) 起動時にデフォルトでUPnPサポートをオフにする
--enable-upnp-default    起動時にUPnPサポートをデフォルトでオンにする

UPnPをサポートする場合、事前に↓をインストールしておく。

sudo apt-get install libminiupnpc-dev
ビルド

準備は整ったので実際にビルドしてみる。

git clone git@github.com:bitcoin/bitcoin.git
cd bitcoin
./autogen.sh
make

makeに大体、2,30分くらいかかる。
make installしてもいいけど、src直下にbitcoindやbitcoin-cliといったおなじみの実行ファイルが生成されてるので、それを実行するとbitcoindが起動する。起動するとホームディレクトリにもおなじみの.bitcoinディレクトリができてる。