Raspberry PiにBitcoinのフルノードを立てました。
Raspberry Piのスペック
- Raspberry Pi 3 Model B
 - memory: 1GB
 - OS: raspbian
 
Bitcoinのフルノードは、データサイズが200GB近くあるので、外付けのハードディスク(2TB)を買いました。
手順
- Raspberry Pi setup(OSインストールから、SSHのsetupまで)
 - 外付けのハードディスクのmount
 - swapの設定
 - Dockerのインストール
 - Docker container起動
 
1. Raspberry Pi setup
まずRaspberry Piのsetupをします。
- raspbianをインストール
 - pi userのパスワード変更
 - 新規userを作成し、piを削除
 ssh-copy-idを使って公開鍵をRaspberry Piにコピー- sshのportを変えたり、passwordログインやrootでのログインを禁止する
 
私はmoshを使っているので、moshもRaspberry Piにインストールしました。
2. 外付けのハードディスクのmount
この記事の様に、ext4にformatして、mount
3. swapの設定
Raspberry Piはメモリが1GBしかないため、bitcoindを走らせるためにはメモリが結構ギリギリです。swapの設定を何もしなかったら、Out of memoryでbitcoindがエラーで終了しました。
# /etc/dphys-swapfile
CONF_SWAPSIZE=1000 #100から1000に変更
$ dphys-swapfile setup
$ dphys-swapfile swapon
4. Dockerのインストール
$ curl -sSL https://get.docker.com | sh
を実行して、Dockerをインストールします。
5. Docker container起動
Raspberry PiでDockerを扱う場合に一つ注意が必要なのは、Raspberry PiのCPUはARMなので、x86向けにbuildされたDocker imageが使えません。
なので多くのDocker imageがそのままでは使えないので、自分でimageを作る必要があります。
今回はjamesob/docker-bitcoindをforkして自分でimageを作るようにしました。
baseイメージをRaspberry Pi向けにarm32v7/ubuntuに変更したのと、メモリが足りなくなるのを防ぐためにbitcoin.confをいくつか変更しました。
blocksonly=1
dbcache=20
maxsigcachesize=4
maxconnections=4
rpcthreads=1
あとはdocker runするだけです。YOUR_USERNAMEとYOUR_PASSWORDとVOLUME_PATHは適宜変更して下さい。
docker run --name bitcoind -d \
--env 'BTC_RPCUSER=YOUR_USERNAME' \
--env 'BTC_RPCPASSWORD=YOUR_PASSWORD' \
--volume VOLUME_PATH:/bitcoin \
-p 8332:8332 \
-p 8333:8333 \
parakeety/bitcoind-test
同期速度
bitcoin full nodeはblockの同期時に、署名の検証もしている様で、マシンパワーが同期速度にかなり影響します。Digital Oceanで借りたインスタンス(6vCPU, memory 16GB)だと12時間で同期が終わったのに対し、Raspberry Piは3日経った今でも最新のblockまで同期が完了していません。急ぎの場合は、Raspberry Piではなく、もっとスペックの良いマシンでfull nodeを立てた方が良さそうです。