Ubuntuのカーネルビルド時に特定のflavourとdkmsを除外する

Symptom

Ubuntuのカーネルビルドの方法は ここ に記載されているが、この手順のとおりに debian/rules binary-headers binary-generic binary-perarch を実行すると、標準では generic フレーバーと lowlatency フレーバーのカーネルイメージ、さらにzfsとnvidiaのdkmsモジュールがビルドされる。

これは以下の場合には厄介だ。

  • genericフレーバーのみ必要である場合(lowlatencyをビルドする時間が惜しい)
  • 指定されたバージョンのdkmsソースパッケージがaptリポジトリに存在しない場合 (ビルドに失敗する)

ここでは lowlatency フレーバーとzfsやnvidiaのdkmsモジュールをビルドから除く方法について述べる。

Resolution

クローンしたソースツリーの debian.master/rules.d/ フォルダ内に存在するファイルを編集する。

# ls debian.master/rules.d/
-rw-r--r-- 1 root root 553  4月 10 11:25 amd64.mk
-rw-r--r-- 1 root root 404  4月  7 10:32 arm64.mk
-rw-r--r-- 1 root root 357  4月  7 10:32 armhf.mk
-rw-r--r-- 1 root root 440  4月  7 10:32 i386.mk
-rw-r--r-- 1 root root 483  4月  7 10:32 ppc64el.mk
-rw-r--r-- 1 root root 416  4月  7 10:32 s390x.mk
-rw-r--r-- 1 root root 325  4月  7 10:32 x32.mk

ファイルはアーキテクチャごとに分かれているので、 x86_64 なら amd64.mk ファイルを編集することになる。

lowlatency カーネルが不要なら以下の flavours から lowlatency を削除すれば良いし、dkmsのビルドが不要なら do_zfs do_dkms_nvidiafalse を指定すれば良い。

# cat debian.master/rules.d/amd64.mk
human_arch      = 64 bit x86
build_arch      = x86
header_arch     = $(build_arch)
defconfig       = defconfig
flavours        = generic lowlatency   <-- here
build_image     = bzImage
kernel_file     = arch/$(build_arch)/boot/bzImage
install_file    = vmlinuz
loader          = grub
vdso            = vdso_install
no_dumpfile     = true
uefi_signed     = true
do_tools_usbip  = true
do_tools_cpupower = true
do_tools_perf   = true
do_tools_perf_jvmti = true
do_tools_x86    = true
do_tools_hyperv = true
do_tools_host = true
do_extras_package = true
do_tools_common = true
do_tools_acpidbg = true
do_zfs          = true    <-- here
do_dkms_nvidia  = true    <-- here

後は通常通りに debian/rules binary-headers binary-generic binary-perarch を実行するだけだ。

Appendix

ビルドするdkmsモジュールのバージョンは debian/dkms-versions で指定されている。 もし特定バージョンのdkmsをビルドしたければ、このファイルを編集すれば良い。ただし当然ながら、指定したバージョンのソースdebパッケージがaptリポジトリに存在していなければならない。

# cat debian/dkms-versions
spl-linux 0.7.5-1ubuntu2
zfs-linux 0.7.5-1ubuntu16.6
nvidia-graphics-drivers-390 390.116-0ubuntu0.18.04.1