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_nvidia
に false
を指定すれば良い。
# 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