LoginSignup
10
5

More than 5 years have passed since last update.

Bitcoindのコンパイル

Last updated at Posted at 2017-05-09
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
10
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
5