2017/10/31 バージョン変更に伴う更新
Bitcoindのコンパイル
これから、Bitcoinを触っていこうと思います。
しかし、実際に動くものがないと、試す事が出来ません。
まずは、Bitcoinをコンパイルしていきます。
Bitcoinの実装
Bitcoinの実装は様々な言語で行われています。
-
Bitcoin
https://github.com/bitcoin/bitcoin
言語:C++
言わずと知れた「Core」satoshi nakamotoのコミットもある老舗です。
事実上、ここのコードがBitcoinの仕様となっていいます。
-
NBitcoin
https://github.com/MetacoSA/NBitcoin
言語:C#
.NETの実装です。
最近はLinuxでもMacでも.NETが使えますし、このライブラリは使いやすいです
-
btcd
https://github.com/btcsuite/btcd
言語:golang
Go言語の実装です。
Lightningの実装はここから始まっています。
他にもJavaやRubyやnodejsやら沢山ありますが、
やはり、Bitcoin Core(C++)をコンパイルしてみましょう。
1.事前準備
ここでは、Virtual Box上にOSのlubuntuをインストールしてみます。
これを書いている時点でのバージョンは以下のとおりです。
- Virtual Box:5.2
- lubuntu:17.10
- CPU:2コア
- メモリ:2G
- ディスク:20G
ubuntuではなく、軽量版のlubuntuにしています。
ubuntu LTSでも良いのですが、今後ソースを触ることも考えている為
UI付きのOSとしています。
インストール後、OSを最新の状態にする。
sudo apt update
sudo apt upgrade
sudo apt dist-upgrade
sudo reboot
Linuxなどの必要なパッケージなどが以下のURLに記載しています。
https://github.com/bitcoin/bitcoin/blob/master/doc/build-unix.md
実際にやってみましょう。
ここでは、lubuntuを使っているのでUbuntuのコンパイル手順を真似ています。
まず、ビルド環境用のパッケージをインストールします。
sudo apt-get install build-essential libtool autotools-dev automake pkg-config libssl-dev libevent-dev bsdmainutils python3
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
Bitcoinでは、Berkeley DBを利用します。
バージョンが4.8指定なので、リポジトリを追加してから
バージョン指定でのインストールとなります。
手順は以下のとおりです。
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:bitcoin/bitcoin
sudo apt-get update
sudo apt-get install libdb4.8-dev libdb4.8++-dev
ここでは、オプション機能とGUI機能については、インストールしないので
それらに必要なライブラリはインストールしません。
2.コンパイル
githubにあるソースのクローンを作成します。
手順は以下のとおりです。
sudo apt install git
git clone https://github.com/bitcoin/bitcoin.git
cd bitcoin/
現在、どのバージョンがあるか調べてみましょう。
git branch --remotes
そのうちの、一つを自分用にチェックアウトします。
以下の手順では、バージョンmasterを自身用にチェックアウトしています。
git checkout -b myMaster origin/master
masterは開発版なので、安定版をコンパイルしたい場合は、以下の手順で
バージョン0.15(編集時点で最新版)をチェックアウトしてください。
git checkout -b my0.15 origin/0.15
現在のブランチを確認します。
git branch
コンパイルしてみます。
手順は以下のとおりです。
※:GUI機能を使用しないので、オプションをつけています。
./autogen.sh
./configure --without-gui
make
make
を早くしたい場合は、-j4
オプションを付加して、ジョブの数を増やします。
以下の例では、ジョブを4個(CPUコア数の二倍が良いとされる)、時間を計測する為に
time
を付与しています。
ただし、メモリ不足によるコンパイルエラーが出る可能性がありますので、複数CPUを使う場合は、メモリは4G以上にした方が良いかもしれません。
time make -j4
※:今回はテスト環境で使う為、わざとmake install
をしていません。
バイナリのテストをしたい場合は、以下の手順で行います。
make check
コンパイル後のバージョンを確認します。
cd src
./bitcoind -version
./bitcoin-cli -version
コンパイルは完了です。
蛇足
※:メモリ不足でコンパイルエラーが出る場合
configure
を以下にする事で、メモリが少なくてもコンパイル可能となる場合があります。
./configure CXXFLAGS="--param ggc-min-expand=1 --param ggc-min-heapsize=32768"
※:私の環境でのコンパイル時間
23分かかった・・・遅い(もっと早いマシンが欲しい)
real 23m40.566s
user 20m49.816s
sys 0m52.968s