パッケージ作成環境: sbuild, lintian, piuparts, autopkgtest
はじめに
Debian パッケージを作成するため
- sbuild: ビルド時の依存環境をテストしつつビルドする
- lintian: パッケージの品質のチェック
- piuparts: パッケージとしてのテスト
- autopkgtest: ビルドしたバイナリの実行テスト
ができるようにしておきます.
sbuild: clean room build 環境
clean room build 環境としては
- pbuilder/cowbuilder/qemubuilder
- sbuild
の二通りがあります. どちらが良いのか, は完全に好みの問題だと思いますが Debian 公式のビルドインフラが sbuild なので, 私は sbuild を使っています. sbuild に関しては sbuild - Debian Wiki を参照下さい.
インストールと設定
ほぼ, 上述の wiki の通り:
sudo apt-get install sbuild sudo sbuild-adduser $LOGNAME newgrp sbuild
chroot の作成は以下
これで, /srv/chroot/
以下に sbuild 用の chroot 環境ができる.
ついでに /etc/schroot/chroot.d/
以下に sbuild 用の設定ファイルができるので,
を設定しておくと良い(overlayfs で動作します)
sbuild の設定は ~/.sbuildrc
に書いておく.
末尾にあるのでそちらを参照のこと.
lintian: パッケージの品質のチェック
作成したパッケージが Debian Policy に準拠しているかを チェックするパッケージである lintian を導入.
% sudo apt-get install lintian
設定は以下の通り. pedantic
と info
は, まあ趣味でしょうか.
sbuild からの呼び出しは ~/.sbuildrc
において
とでもしておくと良いだろう.
piuparts: パッケージとしてのテスト
ビルドしたパッケージについて インストール, アップグレード, リムーブ, パージのテストを行なえる piuparts を導入しておく.
% sudo apt-get install piuparts
実際の呼び出しは sbuild から行なう.
autopkgtest: ビルドしたバイナリの実行テスト
autopkgtest パッケージを導入しておく.
初期設定
autopkgtest 環境として, schroot を使うか lxc を使うか, がある. 当然ながら schroot の方が overhead が少ないのだが, Debian Continuous Integration での動作テストもあるので, debci に揃えることに.
LXC の基本設定や dnsmasq での DHCP 取得ができるようになっていると, あとは debci setup で良い…のだと思う. 本来は
% sudo apt install debci % sudo MIRROR="http://dennou-k.gfd-dennou.org/debian" \ debci setup -s unstable --backend lxc -a amd64
ここではまった.
- 今使っている環境が btrfs
- debci setup → autopkgtest-build-lxc が呼ばれる
- autopkgtest-build-lxc では lxc-create で "-B best" が呼ばれている
- btrfs と lxc-destroy に関するバグ? なのか, コンテナの差分更新後 lxc-destroy ができずに失敗する
というオチに.
結局
なんて事をして,
% sudo dpkg-divert \ --divert /usr/bin/autopkgtest-build-lxc.orig --rename /usr/bin/autopkgtest-build-lxc
としてお茶を濁す.
-
[ ]
設定ファイルがあったらそっちを優先して欲しいのだが.
sbuild からの呼び出し
面倒なのは lxc を使う場合には stretch
, buster
, sid
とコードネームなのに対して,
sbuild/schroot の release は unstable
だったりするところ.
sbuild 自体にも autopkgtest の呼び出しはあるが, ここでは external_commands
で
呼び出すことにする.
外部コマンドの呼び出しは以下
~/.sbuildrc
現在の ~/.sbuildrc
は以下の通り