Linuxカーネルをソースコードからビルドした際の備忘録です。環境は Linux Mint 21.2 “Victoria” MATE Edition 64bit です。
Linuxカーネルをコンパイルする前の下準備
まずは以下のコマンドを実行して、システムを更新しておきます。
$ sudo apt update && sudo apt upgrade
Linuxカーネルのコンパイルに必要なものを色々とインストールします。
$ sudo apt install libncurses5-dev build-essential libssl-dev fakeroot xz-utils bison flex libelf-dev
ダウンロードとソースコード安全性の確認
まず、カーネルビルド用のフォルダを作成した後、カーネルのソースコードをダウンロードし、tarボールまで解凍します。ここではカーネルビルド用のフォルダ名は kernelbuild とし、ダウンロードするLinuxカーネルは long-term版のバージョン6.1.62 にします。
$ mkdir ~/kernelbuild
$ cd ~/kernelbuild
$ wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.1.62.tar.xz
$ unxz linux-6.1.62.tar.xz
カーネルが改竄されていないかどうか確かめます。まず、署名をダウンロード後、署名鍵のフィンガープリントを取得します。
$ wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.1.62.tar.sign
$ gpg --list-packets linux-6.1.62.tar.sign
以下の画像の黄色に色付けした部分 (647F28654894E3BD457199BE38DBBDC86092693E) をコピーし –recv-keys の後に貼り付けて実行します。
$ gpg --keyserver hkps://keyserver.ubuntu.com:443 --recv-keys 647F28654894E3BD457199BE38DBBDC86092693E
後は以下のコマンドを実行して、ダウンロードしたLinuxカーネル(linux-6.1.62.tar)の署名を検証します。
$ gpg --verify linux-6.1.62.tar.sign linux-6.1.62.tar
以下の画像のように gpg: “Greg Kroah-Hartman gregkh@linuxfoundation.org“からの正しい署名と表示されていれば、ダウンロードしたLinuxカーネルに問題はありません。
英語だと gpg: Good signature from “Greg Kroah-Hartman gregkh@linuxfoundation.org“ となります。いくつかの警告(Warning)が出ていますが、これらの警告は無視していまって構いません。

Linuxカーネルのコンパイル
tarボールを解凍し linux-6.1.62 フォルダに移ります。
$ tar -xvf linux-6.1.62.tar
$ cd linux-6.1.62
$ make clean && make mrproper
今のカーネルの config をコピーしておきます。
$ cp /boot/config-$(uname -r) .config
configファイルの作成と変更を行います。
$ sudo make oldconfig
終わるまで [Enter] を連打します。
次に、.configを変更します。
$ sudo nano .config
CONFIG_SYSTEM_TRUSTED_KEYS=”debian/canonical-certs.pem” と CONFIG_SYSTEM_REVOCATION_KEYS=”debian/canonical-revoked-certs.pem” を CONFIG_SYSTEM_TRUSTED_KEYS=”” と CONFIG_SYSTEM_REVOCATION_KEYS=”” に書き換えます。
### 書き換え前 ###
CONFIG_SYSTEM_TRUSTED_KEYS="debian/canonical-certs.pem"
CONFIG_SYSTEM_REVOCATION_KEYS="debian/canonical-revoked-certs.pem"
### 書き換え後 ###
CONFIG_SYSTEM_TRUSTED_KEYS=""
CONFIG_SYSTEM_REVOCATION_KEYS=""
Linuxカーネルのコンパイルを行います。すごく時間がかかります。-jオプションは並列処理を行うことでコンパイル時間を短縮するオプションです。自分の環境は Ryzen 5 3600 (6コア、12スレッド) なので、コア数である「6」を選択しています。
$ sudo make -j6 bindeb-pkg
コンパイルが完了すると、一つ上の親ディレクトリにdebパッケージが生成されるので「linux-headers-6.1.62_6.1.62-1_amd64.deb」「linux-image-6.1.62_6.1.62-1_amd64.deb」「linux-libc-dev_6.1.62-1_amd64.deb」の3つをインストールします。
$ cd ..
$ sudo dpkg -i linux-headers*.deb linux-libc-dev*.deb
$ sudo dpkg -i linux-image_*.deb
最後にシステムを再起動します。
$ sudo reboot
カーネルのバージョンを確認して、更新されていれば成功です。
$ uname -r

お疲れ様でした。
参考にさせていただいたサイト様




コメント