CLionでソースを同期して EC2 で快適に Bitcoin Core をビルドする
やりたいこと
ローカルでのビルドに時間がかかりすぎるので、AWS上で強いマシンを使ってビルドをさせてみる。
でも開発のリズムは崩したくないので、コードを書き換え→ビルド実行以外の作業を増やしたくない。
わかりやすい図解
https://gyazo.com/5beaeb61106d04b2302f2210ee787a42
CLion でコードを書いて、保存して、サーバ側で make するだけ。簡単。
EC2 インスタンスのセットアップ
今回は以下の設定でインスタンスを起動してみました.
インスタンスタイプ: C5-large
AMI: Amazon Linux 2 AMI (HVM), SSD Volume Type - ami-0a2de1c3b415889d2
以下セットアップのメモ
必要なライブラリをインストール
code:shell
$ sudo yum install -y gcc-c++ autoconf automake libtool boost-devel openssl-devel libevent-devel which util-linux make
$ sudo yum install libdb4-cxx-devel-4.8.30-13.el7.x86_64
Python3系のインストール
BitcoinCoreはテストのためにPython3を利用しているが、Amazon Linux2 に最初入っているのは 2.7.14 であるため、3系をインストールする。今回は pyenv を使ってインストールした。
code:shell
$ yum install -y git libffi-devel
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
$ echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bash_profile
$ exec "$SHELL"
$ pyenv install 3.7.1
$ pyenv global 3.7.1
コードを置くディレクトリを作る
code:shell
$ mkdir bitcoin
CLion のセットアップ
CLion の Deployment という機能を使います。この機能は本来 Web サーバーにリソースをアップロードするときに使うもののようですが、今回のようなケースにも利用できます。
常に同期するモード(alwaysモード)があるので、これを有効にすることで、コードを書き換えて保存したら自動でサーバにアップロードしてくれます。また、ブラックリストを設定することで、特定のパスや拡張子を同期対象から除外することができます。
tools > Deplyment > Configuration... を選択
https://gyazo.com/0fc2e1448e82cf10c4a0dbceeb08ced3
左上の + からサーバーを追加します。
名称と接続方法を求められます。接続方法は今回は SFTP にしています。
https://gyazo.com/2516a60b512ccd94106f988843c7f5d1
サーバへの接続情報を設定します。
Root Path には、サーバ側の同期先となるパスを指定します。ここでは /home/ec2-user/bitcoinにしています。
それ以外は自分の環境に合わせて設定してください。
https://gyazo.com/9c3fde1cba9fd1fdf597b6ec4887d0d4
一つ右の Mappings タブでは同期させるローカルのパスを設定します。Deployment path on server 'dev-server' の項目は、Connection タブで設定した Root path 以下のどのパスにファイルをデプロイするか指定する項目です。今回はプロジェクトファイルをすべて同期しますので、/ のままでOKです。
https://gyazo.com/f8179838cd6233e8b6e7dc06146096a1
※ ExcludePath タブなどで、同期から除外するファイルを設定できますが、きちんと網羅して設定するのは大変なので、ローカルではビルド用のファイルを一切生成せずにしておいて、サーバ側でのみビルドするようにしたほうが良さそうです。
次にoptions の設定をします。
Tools > Deployment > Options... を選びます。
https://gyazo.com/a4c25e062207154c2611ce7d35489432
2以下の図のように2項目設定します。
1つ目の設定はローカルではビルド用のファイルを作らないので、それがサーバ側で消えないようにするものです。(ただ、細かい挙動を理解しているわけではないので、使いながら試している感じです。。)
2つ目はファイルを変更したときに自動でサーバにアップロードするための設定です。
https://gyazo.com/177e5a7ff414aff52ae4bc589d93fbb9
ビルド時間
実際にビルドを試してみました。T2シリーズよりもC5 のほうが早くなるかと思いましたが、T2の方が早かったです。
t2-large
code:shell
$ ./autogen.sh
$ ./configure --with-gui=no
$ make clean
$ time make -j4
... log ...
real 11m37.195s
user 21m53.273s
sys 1m14.915s
C5-large
code:shell
$ make clean
$ time make -j4
... log ...
real 13m32.968s
user 25m37.593s
sys 1m20.975s
それでは皆さん、快適な Bitcoin 開発ライフをお過ごしください。🕺🏻