C++プロジェクトのビルド環境
ビットコインの勉強のためにBitcoin Coreをビルドして動かしてみようと思ったが、手元のPCにはC++のコンパイラなど開発ツールを用意していないため、ビルド環境を構築した。
以前から、買い替えの時に再度作業する手間を考えて、手元のPCには直接開発環境をインストールしないようにしていた。UbuntuやCentOSをインストールしたVirtual Boxの仮想マシンで開発作業をして、いざPCを買い換える時には仮想マシン丸ごと引っ越せるようにしていた。 さらに、過去にはLinuxでしか動作しないので仮想マシン内にインストールして使用していたDockerのコンテナが今は手元のPCで直接使えるため、開発環境はコンテナで扱うようにしている。 数年前、おもにC言語で開発していた頃に作成した仮想マシンは今は全く使用しておらずログインするためのパスワードも忘れてしまった。メインで開発しているLaravelを使ったWebアプリの開発環境にも、初めは仮想マシンをベースにしたhomesteadを使用していたが、今はDockerをベースにしたlaradocを使用しているので、最近は仮想マシンを使用する機会は全くない。
Bitcoin CoreはC++で書かれているので、C++のビルド環境を構築する必要がある。C言語の開発環境を仮想マシンで構築していたので、久しぶりにOSのインストールでもしようかと思ったが、今更、仮想マシンを使う事もないだろうと思い直して、開発環境はコンテナで作ることにした。仮想マシンを使うと、起動、終了に時間がかかり、割り当てたCPUとかメモリとかを占有するのか、仮想マシン以外のアプリケーションの動きも遅くなる。OSのカーネルやその周辺の開発をするのでなければ、現時点ではコンテナがベストな選択肢だ。しばらく使う事もないので、過去の仮想マシンの削除と一緒にVirtual Box自体もアンインストールした。
コンテナイメージの格納先といえば当然、Docker Hubだ。しかし、数ヶ月後に利用条件が変わる事を知り、自分の使い方で有料になる事はなさそうだが、これをきっかけに他の選択肢も考える事にした。 候補はGitLabとGitHub。いずれもGitリポジトリのホスト先として長年使っているが、最近はコンテナのレジストリも備えている。どちらもDocker Hubのようにイメージ生成してくれる機能はなく、それぞれのCIツールを使って設定をする必要がある。無料で使える容量について、GitHubのレジストリはβ版なので制限は無さそうだが、正式リリースした時に、アカウントあたりだか、リポジトリあたりだか分からないが500MBに制限されるという予測があるのに対して、GitLabではリポジトリあたり10GBとなっていたので、今回はGitLabのレジストリの使い方を調べた。
GitLabではレジストリのアクセスに、デプロイトークンを使用する。プロジェクトの設定でデプロイトークンを生成すると、専用のユーザ名とセットでトークンが生成されるのでこれを覚えておき、手元のPCでその名前とトークンでdockerレジストリにログインした。ログインした後、手元のPCでビルドしたイメージをプッシュしたりプルしたりして感触を掴んだ。 GitLabには、DockerHubのようにDockerfileをGitリポジトリにプッシュしたら勝手にイメージを生成してくれる機能はないので、GitLab CI/CDを使って、Dockerfileからイメージをビルドしてレジストリにプッシュするまでの設定を自前で準備した。
DockerfileはUbuntuをベースにパッケージを更新して、エディタをインストールし、開発用に非rootのユーザを作るだけの物を用意した。この単純なDockerfileと、CI用の設定ファイルをリポジトリにプッシュして、GitLab CI/CDでイメージが生成され、レジストリにプッシュされる事を確認して、いったん作業はここまで。 実際にBitcoin Coreをビルドするための環境としては、コンパイラなどのビルドツールや必要なライブラリをインストールするための記述がDockerfileに必要になるがそれはまた次の作業にする。