Linuxカーネルをソースコードからコンパイルする

Linux

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 にします。

The Linux Kernel Archives
$ 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

お疲れ様でした。

参考にさせていただいたサイト様

Step-by-step - Build Kernel Linux Mint • tutorialforlinux.com
GNU/Linux Mint Build New Kernel from Source Code Guide Hi! The Tutorial shows you Step-by-step How to Build and Install ...
Step-by-step - Build Kernel Linux Mint • Page 2 of 5 • tutorialforlinux.com
DownloadingGNU/Linux Mint Build New Kernel from Source Code Guide Hi! The Tutorial shows you Step-by-step How to Build a...
Step-by-step - Build Kernel Linux Mint • Page 3 of 5 • tutorialforlinux.com
ConfiguringGNU/Linux Mint Build New Kernel from Source Code Guide Hi! The Tutorial shows you Step-by-step How to Build a...
Step-by-step - Build Kernel Linux Mint • Page 4 of 5 • tutorialforlinux.com
BuildingGNU/Linux Mint Build New Kernel from Source Code Guide Hi! The Tutorial shows you Step-by-step How to Build and ...
Linux Mint Tips: 最新の Linux カーネルを手動でインストール | 221B Baker Street
Linux Mint-centric chronicle with anime girls since 2009.Best View with Google Chrome 1980x1080 dimension.
カーネル/伝統的なコンパイル方法 - ArchWiki
Linuxカーネル/ビルド - おなかすいたWiki!
初心者向けKernelのビルド手順 | ガジェット好きの日記
Linuxを使っていると、カーネルの再構築が必要な場合も出てきます。かなり手順が複雑なのでメモしておきます。★注意★この記事では特にカーネルをいじってはいません。ただ、カーネルをビルドして入れ替えるだけの手順です。記事の環境以下の環境でビル...

コメント