Ubuntuにカスタムカーネルをビルドしてインストールする方法

カーネルを自分でコンパイルするという考えは、新しいLinuxユーザーの心に恐怖を与えます。システムの最も重要な部分をゼロから構築するのは恐ろしいことのように思えます。しかし、実際には、UbuntuでLinuxカーネルをビルドするのは非常に簡単です。
Linuxカーネルをビルドするにはプログラミングは必要ありません。世界の優れたプログラマーたちがすでにすべてのコードを書いています。あなたがしなければならないのは、必要な機能を選び、それをすべて組み合わせることです。ここでは、Ubuntuにカスタムカーネルをビルドしてインストールする方法を示します。
目次
- 依存関係の取得
- Ubuntu用カーネルソースの取得
- ビルドの準備
- Ubuntuカーネルの設定
- Ubuntu用カーネルパッケージのビルド
- カーネルのインストール
- カスタムバイナリカーネルのインストール
- Ubuntuにメインラインをインストール
- メインラインの使用
さらに読む: Linuxでカーネルをダウングレードする方法
依存関係の取得
カーネルに触れる前に、ビルドするための正しいツールが必要です。以下のコマンドを使用して、Ubuntuのリポジトリからそれらをダウンロードします。
sudo apt install wget build-essential bison flex libncurses-dev libssl-dev libelf-devUbuntu用カーネルソースの取得
ビルドしたいソースを取得できます。すべてのカーネルは公式のLinuxリポジトリから入手可能です。最新のリリースをcdnリポジトリで確認できます。この記事の時点での最新は5.16です。以下のコマンドを使用してダウンロードできます。
cd /home/$USER/
mkdir kernelbuild
cd kernelbuild
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.16.19.tar.xz
カーネルのダウンロードには時間がかかるので、辛抱強く待ってください。
ビルドの準備
カーネルtarファイルの解凍からセットアップを始めます。次に、既存のカーネルの設定をそれにコピーします。
tar xavf linux-5.16.19.tar.xz && cd ./linux-5.16.19
cp /boot/config-`uname -r` .config古い設定を新しいカーネルに適応させる必要があります。
make oldconfigこのスクリプトは、新しい機能ごとにどうするかを尋ねてきます。デフォルトを使用したい場合は、代わりにmake olddefconfigを使用してください。
さらに読む: Linux用の新しいPCをビルドする方法
Ubuntuカーネルの設定
設定をそのままにしておくこともできますが、カスタマイズしないのであれば、カスタムカーネルをビルドする意味はありません。
設定をカスタマイズするには、次のコマンドを実行します。
make menuconfig
青いメニューが開き、カテゴリのリストが表示されます。これらのカテゴリには、カーネルにビルドするために選択できる機能が含まれています。

たとえば、BTRFSファイルシステムのサポートをカーネルに直接ビルドし、他の機能を有効にしたい場合は、「ファイルシステム ->」に移動します。次に、「Btrfsファイルシステムサポート」が表示されるまでスクロールします。希望するオプションを選択し、スペースバーを押します。スペースバーは「M」、「*」、および空白の間で切り替わります。
- 「M」は、その機能が必要に応じてUbuntuが起動する際に読み込まれるモジュールとしてビルドされることを示します。
- 「*」は、その機能がカーネルにビルドされ、常に読み込まれることを意味します。
スクリプトは、最終製品に空白のオプションを含めません。設定が完了したら、ディレクトリをクリーンアップします。
make cleanこれでカーネルのビルドの準備が整いました。
Ubuntu用カーネルパッケージのビルド
Ubuntuにはカーネルをビルドする方法がありますが、古いバージョン用に書かれたスクリプトを使用する必要があります。時にはそれが問題ないこともありますが、他の時にはひどく壊れます。したがって、通常はGNU makeを使用してより一般的なLinuxの方法を使用する方が良いです。
make -j `getconf _NPROCESSORS_ONLN`
make deb-pkg LOCALVERSION=-customこの行は、システム上のCPUコアの数に1を加えた数を使用してカーネルを.debパッケージにコンパイルするだけです。また、パッケージバージョンの末尾に「custom」を追加して、他のカスタムカーネルと区別します。
注意: カーネルのコンパイルには数時間かかることがあります。辛抱強く待ってください。
カーネルのインストール
新しいカーネルパッケージは1つ上のディレクトリにあります。バージョン番号で簡単に識別できます。dpkgを使用してインストールできます。
cd ./../
sudo dpkg -i linux-firmware-image-5.16.19-custom_5.16.19-custom-1_amd64.deb
sudo dpkg -i linux-libc-dev_5.16.19-custom-1_amd64.deb
sudo dpkg -i linux-headers-5.16.19-custom_5.16.19-custom-1_amd64.deb
sudo dpkg -i linux-image-5.16.19-custom-dbg_5.16.19-custom-1_amd64.deb
sudo dpkg -i linux-image-5.16.19-custom_5.16.19-custom-1_amd64.debインストールが完了したら、コンピュータを再起動します。Ubuntuは自動的に新しいカーネルで起動します。起動時にターミナルでuname -rを実行して確認できます。
カスタムバイナリカーネルのインストール
UbuntuでカスタムLinuxカーネルを使用する別の方法は、事前にコンパイルされたバイナリバージョンをインストールすることです。ソースベースのバージョンとは異なり、これらは実行しているシステムとアーキテクチャ用にすでにコンパイルされたカーネルのコピーです。

さらに、カスタムバイナリカーネルは、Ubuntuインストールのカーネルバージョンを簡単に切り替える柔軟性を提供します。これは、ハードウェアの互換性の問題があるマシンを実行していて、自分のカーネルをコンパイルすることに対処したくない場合に特に役立ちます。
それを考慮すると、カスタムバイナリカーネルをインストールする最も一般的な方法は、Mainlineを使用することです。これは、Linuxカーネルのインストールプロセスを簡素化することを目的としたbkw777によって開発されたGUIプログラムです。

このプログラムは、カーネルを適切にダウンロードして構成するために必要なすべての手順を組み合わせています。たとえば、Mainlineを使用すると、インストールしたいカーネルバイナリとヘッダーを簡単に選択できます。次に、このバージョンをキャッシュに保持し、必要なときに簡単に読み込むことができます。
さらに読む: カスタムLinuxディストリビューションを簡単に作成するための5つのツール
Ubuntuにメインラインをインストール
それでは、Mainlineのインストールは比較的簡単です。まず、aptにMainlineのパッケージリポジトリを含めるように指示する必要があります。そのためには、ターミナルから以下のコマンドを実行できます。
sudo add-apt-repository ppa:cappelikan/ppa
ここから、Ubuntuのパッケージディレクトリを更新する必要があります。これにより、aptは追加したリポジトリから読み取ることができ、Mainlineを通じてダウンロードできるようになります。
sudo apt updateこれで、残ることはMainline自体をインストールすることだけです。
sudo apt install mainline
メインラインの使用
完了したら、アプリケーションメニューに移動してMainlineを検索することで、Mainlineを読み込むことができます。Mainlineプログラムが読み込まれ、システムにインストールできるすべてのカーネルパッケージが表示されます。

そこから、システムで使用したいカーネルバージョンを選択してインストールできます。たとえば、「Linux 5.16.19」を選択し、右側のサイドバーでインストールをクリックして、このカーネルバージョンをマシンに完全にロードできます。

一方で、Mainlineを使用して、もう使用したくないカーネルを削除することもできます。たとえば、「Linux 5.15」を選択し、同じ右側のサイドバーで削除をクリックして、このカーネルをシステムから削除できます。

この方法で、特定のカーネルバージョンに関連するファイルやバイナリをクリーンに追加または削除できます。これは、カーネルバイナリがライブラリ、ヘッダー、ファームウェアを含むため、正しく機能することを可能にします。
さらに読む: Windows 10でのカーネルセキュリティチェック失敗を修正する方法
よくある質問
カスタムカーネルを実行する際の問題は何ですか?
カスタムカーネルを実行する最大の問題の1つは、システムの重要な部分を通常の更新から外してしまうことです。これにより、以降はすべてのカーネル更新を手動でインストールする必要があります。これには、追加のハードウェア機能や重要なセキュリティ更新が含まれます。
これは、最小限のユーザー介入で実行および維持されるシステムが必要な場合に問題になる可能性があります。そのため、カスタムカーネルを実行することは、必要なカーネル機能を知っているだけでなく、重要な更新にも注意を払う必要があります。
カーネルバイナリを使用することに欠点はありますか?
はい。カーネルバイナリを使用する主な欠点の1つは、その組み込み機能に対する制御がないことです。これは、ソースベースのカーネルとは異なり、カーネルバイナリにはハードウェア固有の最適化やサポートが含まれないことを意味します。
これは、Ubuntuでエキゾチックなハードウェアを使用するつもりである場合、カーネルをゼロからコンパイルする必要があることを意味します。
カーネル機能をモジュールとしてコンパイルする方が良いのか、それとも組み込みとしてコンパイルする方が良いのか?
これは、カーネルを何に使用したいかによって大きく異なります。たとえば、機能を組み込みとしてコンパイルすると、カーネルがメモリにロードされるとすぐにその機能が読み込まれることが保証されます。しかし、この方法では最終的なカーネルの全体的なサイズが増加します。
一方、機能をモジュールとしてコンパイルすると、それは基本カーネルから削除されます。代わりに、このモジュールはカーネルがすでにメモリにあるときに読み込まれます。これにより、最終的なカーネルのファイルサイズが削減され、結果として高速で安全になります。
それを考慮すると、カーネル機能を組み込みとしてコンパイルすることは、システムの互換性に関する問題の可能性を減らすために良いプラクティスです。ただし、あまりにも多くの機能を含めることには注意が必要です。そうしないと、カーネルの全体的なサイズが大幅に増加します。