vserver + rebuildd + reprepro(1)

開発系じゃなくても CI なんだぜ、ということで、放り込んだら勝手にビルドして自分用パッケージリポジトリに配置される、ようなものを作ろうとしてみた。

linux-image-*-vserver なカーネルイメージをインストールして reboot 後、

sudo vserver torenia build -n torenia --hostname torenia --interface eth0:192.168.0.11/24 -m debootstrap -- -d sid
# 長いので出力は省略
echo default > /etc/vservers/torenia/apps/init/mark # vserver の自動起動設定
echo SECURE_MOUNT > /etc/vservers/torenia/ccapabilities # /proc 対策
sudo vserver start torenia
vserver torenia enter

ここまではホスト上での作業。vserver ゲストに入って、

aptitude update
aptitude install locales
tzselect
aptitude install ssh python2.5 python-apt
aptitude install rebuildd mercurial
vi /etc/default/rebuildd # 起動設定と cowdancer の使用設定
vi /etc/rebuildd/rebuilddrc # archs と build_cmd の設定
rebuildd-init-build-system
# 長いので出力は省略
rebuildd init
exit

rebuilddrc の設定では、次の内容を追記した。archs を追加しないと動かない模様。

archs = i386 all
build_cmd = cowbuilder --build --basepath /var/cache/pbuilder/%s-%s.cow %s_%s.dsc

vserver の中ではデバイスファイルのコピーが出来ないらしく、pbuilder が用意する chroot 環境の中で /dev/null が機能しない状態になっている。解決のため、一旦 vserver ゲストを抜けて、ホスト上でデバイスファイルをコピーする。

cd /var/lib/vservers/torenia
cp -aR dev/null var/cache/pbuilder/<name>-<arch>.cow/dev

もう一度入り直して、rebuildd を起動。念のためテストしてみる。

vserver torenia enter
/etc/init.d/rebulidd start
/etc/init.d/rebuildd-http start
rebuildd-job add jfsutils 1.1.11-1 1 sid
rebuildd-job reload
rebuildd-job start
w3m http://localhost:9998

これで、rebuildd が使える状態になった。

どうやって rebuildd に自動でパッケージを放り込もうかな。ちょっと検討が必要。