コンテナによるビルド環境の構築

Bitcoin Coreをビルドするための環境をコンテナで構築する

コンテナによるビルド環境の構築

Bitcoin Coreを実行して振る舞いを解析するために、場合によってはソースコードの一部を改造して、自分でビルドすることがある。この時のビルド環境を、コンパイラなどのツールやビルドに必要なライブラリをインストールしたコンテナイメージで実現する。

ここでは、先にコンテナイメージを生成するためのDockerfileについて記載内容を説明し、次に生成したビルド環境でBitcoin Coreをビルドする手順を示す。

対象のBitcoin Core

2020年9月12日時点での最新版であるv0.20.1を対象とする。対象とするバージョンによって必要となるライブラリやライブラリのインストール手段が異なるので注意する。ビルドするBitcoin CoreをCLIで操作する事を想定し、GUIに関連する機能のためのライブラリはビルド環境に含めない。

ビルド環境に必要になるツール、ライブラリは、GitHubのBitcoin CoreのリポジトリにあるUNIX BUILD NOTESを参照した。

ビルド環境の構築の手順

Dockerfileの記載内容を順に説明する。

ベースイメージ

Ubuntu 20.04をコンテナのベースイメージとして使用する。これがビルド環境のOSとなる。

FROM ubuntu:20.04

一般的なツールのインストール

インストール済みのパッケージを更新し、あとの手順でアーカイブをダウンロードするために必要となるパッケージをインストールする。

RUN apt-get update && apt-get upgrade -y && apt-get install -y --no-install-recommends \
            ca-certificates \
            curl \
        && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

ビルドで使うツールのインストール

Bitcoin Coreのビルドで必要となるツールをインストールする。

RUN apt-get update && apt-get install -y --no-install-recommends \
            build-essential \
            libtool \
            autotools-dev \
            automake \
            pkg-config \
            bsdmainutils \
            python3 \
         && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

BerkeleyDBのインストール

Bitcoin CoreのビルドにはBerkeleyDB 4.8が必要となるが、UbuntuのパッケージではBerkeleyDB 5.1以降がインストールされてしまう。そのため、Bitcoin Coreのリポジトリにあるスクリプトを流用し、ソースファイルをダウンロードして自前でコンパイルしたものをインストールする。

ARG BDB_WORKDIR='/root/libdb'
ARG INSTALL_BDB4_FILE='install_db4.sh'
RUN set -x \
        && mkdir -p ${BDB_WORKDIR} && cd ${BDB_WORKDIR} \
        && curl --location --fail --connect-timeout 30 --retry 5 -O \
                https://raw.githubusercontent.com/bitcoin/bitcoin/v0.20.1/contrib/${INSTALL_BDB4_FILE} \
        && sed -i.old 's/make install/make libdb_cxx-4.8.a libdb-4.8.a \&\& make install_lib install_include/' ${INSTALL_BDB4_FILE} \
        && chmod 755 ${INSTALL_BDB4_FILE} && ./${INSTALL_BDB4_FILE} `pwd` --prefix="/usr/local" \
        && cd /root && rm -R ${BDB_WORKDIR}

必要なライブラリのインストール

BerkeleyDB以外の、必須のライブラリをインストールする。

RUN apt-get update && apt-get install -y --no-install-recommends \
            libevent-dev \
            libboost-system-dev \
            libboost-filesystem-dev \
            libboost-test-dev \
            libboost-thread-dev \
        && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

追加で必要なライブラリのインストール

Bitcoin Coreのオプション機能(GUI関連を除く)を有効にするために必要なライブラリをインストールする。

RUN apt-get update && apt-get install -y --no-install-recommends \
            libminiupnpc-dev \
            libzmq3-dev \
        && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

Bitcoin Coreをビルドする

ここまでに示したDockerfileにより生成されるコンテナイメージを使用した、Bitcoin Coreをビルドする手順を示す。

  1. Bitcoin Coreのv0.20.1のソースコードをチェックアウトする
$ git clone https://github.com/bitcoin/bitcoin.git
$ cd bitcoin
$ git checkout -b v0.20.1 v0.20.1
  1. コンテナを起動する

生成したコンテナイメージをDocker Hubに格納している。このコンテナイメージをダウンロードし、起動する。Bitcoin Coreのコードをチェックアウトしたディレクトリをコンテナ内にマウントする。

$ docker pull haessal/build-bitcoincore
$ docker run --rm -it -v `pwd`:/workspace haessal/build-bitcoincore
  1. Bitcoin Coreをビルドする

起動したコンテナ内で操作する。GUIに関連する機能はビルド対象から除外する。ビルドが完了するとsrc/bitcoindができているので確認する。

(in container)
# cd /workspace
# ./autogen.sh
# ./configure --without-gui
# make
# ls -l src/bitcoind

参考資料

最終更新 December 13, 2020