BitcoinCoreをインストールしてMainnetと同期をして見た

Odroidというシングルボードコンピューターを買ってきて、セットアップしたのでBitcoinCoreのインストール(ソースコードのmekeからやった)と、メインネットへ接続して同期したのでその辺りのことを書いておく。

Odroid-XU4とCloudShell 2の組み立てと初期設定までは下のブログで書いたよ。OSはUbuntu 18.04です。

事前準備

手順としてはGitからソースコードをゲットして、makeとインストールをするんだけど、別にソースコードからmakeしなくても公式からバイナリファイルを取得できます。

※プロバイダによるけど、bitcoin.orgへのアクセスが出来なかったりする

ということで、makeに必要なパッケージをインストールします。ちょっと多いので一括で記載。

# パッケージ・リストの更新
$ sudo apt-get update

# gccをインストール
$ sudo apt-get install build-essential automake pkg-config libevent-dev bsdmainutils

# OpenSSLをインストール
$ sudo apt-get install libtool autotools-dev autoconf
$ sudo apt-get install libssl-dev

# Boostをインストール
$ sudo apt-get install libboost-all-dev

# libdb4.8をインストール
$ sudo add-apt-repository ppa:bitcoin/bitcoin
$ sudo apt-get update
$ sudo apt-get install libdb4.8-dev
$ sudo apt-get install libdb4.8++-dev

# gitのインストール
$ sudo apt install git

これで必要な準備は完了。

ソースファイルのCloneとmakeの実行

クローン用のフォルダを作成してオーナーを変更する。

“/media/hdd”は好きなフォルダに読み替えてもらえばいい。オーナーを変更するのはコマンド実行時に、毎回 “sudo” コマンドを実行するのが煩わしいから。(odroidは僕の環境のユーザ)

$ sudo mkdir /media/hdd/src
$ sudo chown odroid:odroid/media/hdd/src 

“src”は”sourceの略です。ソースファイル用のフォルダを作成したら、BitcoinCoreをクローンする。

$ cd /media/hdd/src
$ git clone https://github.com/bitcoin/bitcoin.git

クローンしたフォルダへ移動し、バージョンを確認する。gitのコマンドを知りたい場合は…ググってね!

$ cd bitcoin
$ git branch -r
origin/0.11
origin/0.12
origin/0.13
origin/0.14
origin/0.15
origin/0.16
origin/HEAD -> origin/master
origin/master

最新の安定バージョンが0.16なので0.16をチェックアウトする。

$ git checkout -b my0.16 origin/0.16

“my0.16″部分は好きな名称で構わない。

ソースがチェックアウトされたらmakeを実行する。

$ ./autogen.sh
$ ./configure --without-gui
$ make -j4
$ sudo make install

2行目の”configure”は、僕の環境ではGUIが不要なので設定したけど、GUIもインストールするなら実行しなくて良い。”make”のオプション”-j4″は並行実行するジョブ数。Odroidは4+4コアなので最初8ジョブで指定してみたけど、エラーで途中終了してしまうので、4ジョブにした。

“install”コマンドはbin系のフォルダへ移動するコマンドなので、”sudo”での実行が必要。

bitcoindを動かす

の前にセキュリティを向上させる

個人で単に試したいだけなので、そんなにきつくセキュリティ設定しなくてもいいんだけど、流石にP2Pで接続させることになるので、侵入経路はある程度潰しておきたいところ。

とりあえず最低限として以下を実施した。

SSHのポート番号を変更する

SSHのrootログインを禁止する

MacBookからの公開鍵認証によるSSH接続を設定する

confファイルの設定

confファイルがないと動かないので、bitcoindを動かす前にconfファイルを作成する。デフォルトでconfファイルを読み込みに行くのが、”~/.bitcoin”フォルダなので、”~/.bitcoin”フォルダを作成してconfファイルを配置する。

※confファイルの指定も可能なので必ずしも”~/.bitcoin”に作る必要はない

$ mkdir -p ~/.bitcoin
$ cd ~/.bitcoin
$ touch bitcoin.conf

中身空っぽでもファイルさえあれば動くっぽいw

コンフィグファイルの内容を簡易で作成できるBitcoin Core Config Generatorというページがあるので、ここで生成すると簡単に作れる。

ページ上部のプルダウンを変更することで、OS(Windows、Linux、Mac)の選択と、マイニングやテストネット等の用途を選択することができる。

とりあえず、僕の場合は指定のHDD上にデータを格納して欲しい以外は、特に指定する必要がなかったので、下のような簡易な内容でコンフィグファイルを作成した。

$ vim bitcoin.conf
# 以下を記述
# Generated by https://jlopp.github.io/bitcoin-core-config-generator/

# This config should be placed in following path:
# ~/.bitcoin/bitcoin.conf

# [core]
# Specify a non-default location to store blockchain and other data.
datadir=/media/hdd/.bitcoin

bitcoindを動かしてみる

ここまで設定すれば、あとは以下のコマンドで実行すれば、指定したフォルダ(/media/hdd/.bitcoin)にフルノード(チェーン?データ?用語が微妙にわからなかったw)がダウンロードされる。

※フォルダ指定がない場合のデフォルトでのダウンロード先は”~/.bitcoin”

$ bitcoind -daemon

実行中のログはデータフォルダ内の “debug.log” というファイルに出力されるので、状況が気になるならこのファイルを”tail”コマンドなどで監視すると良い…のだけど、Odroidだとメモリが少ないからかあまり監視をし過ぎると途中で “bitcoind” が異常終了(多分メモリ不足)してしまうので、動かしたらほおっておいたほうがよさそう…

監視用のコマンドはこんなのを実行していたけど、2時間ぐらい稼働すると必ず異常終了するので、最終的には何も監視しないことにしたw

# 30秒ごとにメモリの使用状況を表示する(メガバイト単位)
$ vmstat -tSM 30

# 30秒ごとに全てのCPU使用率を表示
$ mpstat -P ALL 30

# アプリケーションの稼働状況を監視
$ top

# ログの監視
$ tail -f /media/hdd/.bitcoin/debug.log

止めるときは以下のコマンドを実行すれば止まる。

$ bitcoin-cli stop

仕組みとしては”bitcoind”が実際にP2P処理を実行するモジュールで、”bitcoin-cli”は”bitcoind”へコマンドを送信する役割みたいなものだと思って貰えばいい。”bitcoind”は起動する時に指定するだけで、後のコマンド処理は全て”bitcoin-cli”経由で送ることになる。

その他のコマンドは Original Bitcoin client/API calls list で確認できる。

同期にかかった時間

1分ごとにどこまで同期済みかを出力するシェルを組んでたので、そのデータを使って同期済みblock数のグラフを作って見た。「これ何かに似てるなー」と思ったんだけど、ビットコインの発行枚数のグラフと似てるね。

相関関係なんてないと思うけど、これはこれで面白い(。・ω・)ノ゙

※グラフに使ったデータはこちら