分123カーネルパッケージをビルドするカーネルパッケージをビルドする方法は,ホスト上で直接ビルドする方法とパッケージをクリーンビルドする方法の2種類が存在します。ホスト上で直接ビルドを行いたい場合ホスト上で直接ビルドする場合,準備さえ行えば第333回と対して違いはありません。メインラインビルド用のオプションを有効化しておきます。do_mainline_build=trueこれによりメインラインビルドでは対応しにくいいくつかの機能が無効化されます。ZFSなども無効化されるので,これが無効化されると困る場合は上記設定をせずにビルドできるよう適宜調整してください。あとは次の手順でもろもろのパッケージをビルドするだけです。binary-indepこれにより次のようなパッケージが作られます。linux-buildinfo-5.2.0-050200-generic_5.2.0-050200.201907072331_amd64.deblinux-cloud-tools-common_5.2.0-050200.201907072331_all.deblinux-doc_5.2.0-050200.201907072331_all.deblinux-headers-5.2.0-050200-generic_5.2.0-050200.201907072331_amd64.deblinux-headers-5.2.0-050200_5.2.0-050200.201907072331_all.deblinux-image-unsigned-5.2.0-050200-generic_5.2.0-050200.201907072331_amd64.deblinux-modules-5.2.0-050200-generic_5.2.0-050200.201907072331_amd64.deblinux-source-5.2.0_5.2.0-050200.201907072331_all.deblinux-tools-common_5.2.0-050200.201907072331_all.deblinux-tools-host_5.2.0-050200.201907072331_all.deb普通に使うだけなら,linux-image-unsignedとlinux-modulesのみがあれば十分です。DKMSを使うならlinux-headersも必要になります。Hyper-Vなどの上で使うなら,linux-cloud-toolsが必要になるでしょう。ちなみにカーネルパッケージはバージョン名まで含めてパッケージ名になります。これは複数のバージョンを共存してインストールするための措置です。パッケージとしてクリーンビルドしたい場合パッケージとしてクリーンビルドしたい場合は,まずソースパッケージを作る必要があります。clean」を実行する必要があるのです。cleanあとは次のコマンドでソースパッケージを構築できます。-us「-d」オプションはBuild-Dependsなパッケージがインストールされているかどうかをチェックしないためのオプションです。linux」などによりビルドに必要なパッケージをインストールしていない環境ではエラーになります。「--no-tgz-check」はソースコードのアーカイブがあるかどうかをチェックしないためのオプションです。今回はgitをクローンしたので,ソースコードのアーカイブは自前で生成する必要があります。よってこのオプションを付けて,確認なしに自動的に作ってもらいます。-us」はソースパッケージやchangesファイルに署名しないオプションです。ローカルでビルドしてローカルでインストールするなら署名は不要です。最終的にPPAなどを利用する場合は,このオプションを外して署名してください。署名をする場合は,GPG鍵を用意したり「debian/changelog」を更新したりといろいろ事前設定が必要です。詳細は本連載の第46回などを参照してください。pbuilderを使う場合,メインラインビルド用の環境変数は「~/.pbuilderrc」に書く必要があります。~/.pbuilderrcようやく準備が整いましたのでビルドしてみましょう。../linux_5.2.0-050200.201907072331.dscホストで直接ビルドするときに比べるとこちらはフルビルドになるため,時間もかかります。多くのパッケージが作られます。ちなみに成果物は「~/pbuilder/bionic_result/」に作られます。Debianパッケージのみに限定すれば次のような感じです。linux-buildinfo-5.2.0-050200-generic_5.2.0-050200.201907072331_amd64.deblinux-buildinfo-5.2.0-050200-lowlatency_5.2.0-050200.201907072331_amd64.deblinux-cloud-tools-common_5.2.0-050200.201907072331_all.deblinux-doc_5.2.0-050200.201907072331_all.deblinux-headers-5.2.0-050200-generic_5.2.0-050200.201907072331_amd64.deblinux-headers-5.2.0-050200-lowlatency_5.2.0-050200.201907072331_amd64.deblinux-headers-5.2.0-050200_5.2.0-050200.201907072331_all.deblinux-image-unsigned-5.2.0-050200-generic_5.2.0-050200.201907072331_amd64.deblinux-image-unsigned-5.2.0-050200-lowlatency_5.2.0-050200.201907072331_amd64.deblinux-libc-dev_5.2.0-050200.201907072331_amd64.deblinux-modules-5.2.0-050200-generic_5.2.0-050200.201907072331_amd64.deblinux-modules-5.2.0-050200-lowlatency_5.2.0-050200.201907072331_amd64.deblinux-source-5.2.0_5.2.0-050200.201907072331_all.deblinux-tools-common_5.2.0-050200.201907072331_all.deblinux-tools-host_5.2.0-050200.201907072331_all.debホストで直接ビルドしたときと同じく,普通に使うだけなら,linux-image-unsignedとlinux-modulesのみがあれば十分です(※3⁠)⁠。DKMSを使うならlinux-headersも必要になります。Hyper-Vなどの上で使うなら,linux-cloud-toolsが必要になるでしょう。※3do_mainline_buildをtrueにしなかった場合は,do_extras_packageがtrueになります。このときlinux-modulesの一部はlinux-modules-extraに分離されます。利用環境においては,linux-modules-extraのパッケージも必要になるので注意してください。おまけ:LXD上でビルドしたい場合カーネルのビルドにはさまざまなパッケージのインストールが必要です。ホスト環境をできるだけきれいかつシンプルに保ちたいなら,カーネルのビルドもLXDのコンテナ上で行いたいことでしょう。ホスト上で直接ビルドするケースなら,LXDのコンテナをそのまま利用できます。pbuilderを利用するケースなら,追加でコンテナに次の設定が必要です。builderここではコンテナ名を「builder」と仮定しています。必要に応じて変更してください。一度ビルドした環境を第574回で紹介している方法でスナップショットをとっておいたり,他のマシンにインスタンスをコピーしておけば,gitのクローンなどの時間が省けて便利です。