DockerでOSvのビルド環境を作ってビルドする

諸般の事情で手元のLinux環境をCentOS 7にする必要があった。まぁ他のディストリビューションはDockerで揃えられるので、普段使いのLinuxなんてなんでも良いだろうという判断。

CentOS7にDockerを入れる

Dockerのページにインストール方法が書いてあるので基本的にはそれに従えばOK。

... get.docker.comで取得できる.shスクリプトはサービスの登録と実行まではやってくれないみたいなので、rootになって

systemctl enable docker
systemctl start docker

としてdockerサービスをstartさせておく。
スクリプトの指示に従ってdockerグループに自分を足せば、以降のdocker操作ではrootになる必要はない。

OSvをビルドするためのDockerイメージを作る

OSvのビルド環境はsetup.pyで自動的にインストールすることができる。が、このsetup.pyはFedoraCentOSの最新版は無慈悲に却下してしまう。

[oku@centos7 osv-build]$ ./setup.py
Your distribution version is not supported by this script

なのでDockerで適当なディストリビューションを用意して、その中でビルドするようにする。
Dockerfileを適当に書いて、"docker build ."。(同じディレクトリにsetup.pyもコピーしておく)

FROM fedora:22
MAINTAINER "bogus"
RUN dnf upgrade -y
RUN dnf install python2 -y
COPY setup.py /setup.py
RUN /setup.py
VOLUME /stage

ここではFedora 22をベースに選んだ。fedora:latestは現在23で、これもsetup.pyに撥ねられてしまう。"docker tag"コマンドで適当にタグを打っておく(以下osvbuild)。
ここでは、ホストとDocker環境の両方に/stageディレクトリを作り、ホストで/stageにOSvのリポジトリをチェックアウトしておくことにする。
あとは"docker run"でコンテナ内のbashを起動し、そこでscripts/buildを実行すれば終わり。

[oku@centos7 ~]$ docker run -v /stage:/stage -it osvbuild /bin/bash
[root@d75a4e582c2c /]# cd /stage/repos/osv/
[root@d75a4e582c2c osv]# scripts/build

... これで本当にビルド終わってusr.imgが生成されたけど、いつの間にOSvのビルドってKVMを要求しなくなったんだっけか。。