Ubuntu 24.04LTS kernel rebuild

kernel

Ubuntu 24.04.01 LTS がリリースされて安定性が少し出てきた感じです。このあたりでカーネルのビルド方法を記録に残しておきます。

Ubuntu 22.04 LTS カーネルのビルド手順は こちら Ubuntu 22.04LTS kernel rebuild | 市野メモ (ichino-memo.com) にあります。

なお、この Ubuntu 24.04.01 の構築は Ubuntu 24.04 Install (Server to Desktop) | 市野メモ (ichino-memo.com) の手順でインストールしたものです。具体的には apt リポジトリは http://ftp.riken.jp/Linux/Ubuntu を参照しています。

ビルドに必要なパッケージのインストール

カーネルのビルドで必要なパッケージは引き続き Ubuntu 22.04 LTS と変わりませんでした。

$ sudo apt-get install make gcc libssl-dev
$ sudo apt-get install libncurses-dev
$ sudo apt-get install git
$ sudo apt-get install dpkg-dev
$ sudo apt-get install flex bison
$ sudo apt-get install dwarves libelf-dev

Ubuntu 24.04 linux カーネルソースのダウンロード準備

Ubuntu 24.04 LTS では /etc/apt/source.list の仕様が変更されました。編集しようとしたら以下の文字列が表れました。

$ cat /etc/apt/source.list
# Ubuntu sources have moved to /etc/apt/sources.list.d/ubuntu.sources

上記のコメントの通り /etc/apt/source.list.d/ubuntu.sources を編集しようとしてみましたが deb-src から始まるステートメントが定義されていませんでした 。以下がその内容です。

Types: deb
URIs: http://ftp.riken.jp/Linux/ubuntu/
Suites: noble noble-updates noble-backports
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg

Types: deb
URIs: http://ftp.riken.jp/Linux/ubuntu/
Suites: noble-security
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg

この ubuntu.sources の deb-src を追加します。エディターを使用して直接編集する方法もあると思いますが以下のコマンドラインを実行しました。

一行目の cp は /tmp へバックアップする意味で、sed で編集を失敗しなければ再利用はしません。

$ cp /etc/apt/sources.list.d/ubuntu.sources /tmp
$ sudo sed -i 's/^Types: deb$/Types: deb deb-src/' /etc/apt/sources.list.d/ubuntu.sources
$ sudo apt-get update
$ apt-get source linux-image-unsigned-$(uname -r)

kernel ビルド前準備

  • kernel configuration
    カーネルソースが取得できたら /boot から現在の config ファイルを .config としてコピーして make menuconfig を行いますが、このときに変更が必要なパラメータがあります。

    変更前 CONFIG_SYSTEM_TRUSTED_KEYS=”debian/canonical-certs.pem”
    変更後 CONFIG_SYSTEM_TRUSTED_KEYS=””

    変更前 CONFIG_SYSTEM_REVOCATION_KEYS=”debian/canonical-revoked-certs.pem”
    変更後 CONFIG_SYSTEM_REVOCATION_KEYS=””

    この変更方法は make menuconfig で行っても、menuconfig 前に .config を直接編集することでも構いませんが、ビルド時には必ず CONFIG_SYSTEM_TRUSTED_KEYS を null にする必要があります。

    その他として必須ではありませんが、ビルドしたカーネルを簡単に確認するために以下の設定を行います。
    CONFIG_LOCALVERSION=”-custom”
  • PEM 形式の署名ファイルの配置
    次の内容のテキストファイルを linux-hwe-5.19-5.19.0/certs へx509.genkeyというファイル名で保存します。この手順でカーネルモジュールを署名付きにして insmod できるようにします。
[ req ]
default_bits = 4096
distinguished_name = req_distinguished_name
prompt = no
string_mask = utf8only
x509_extensions = myexts

[ req_distinguished_name ]
CN = Modules

[ myexts ]
basicConstraints=critical,CA:FALSE
keyUsage=digitalSignature
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid
  • openssl コマンドの実行
    linux-6.8.0/certs がカレントであることを確認して以下のコマンドを実行します。
$ openssl req -new -nodes -utf8 -sha512 -days 36500 -batch -x509 \
-config x509.genkey -outform PEM -out signing_key.pem -keyout signing_key.priv

kernel ビルドと署名付きモジュールの作成

  • カーネルとモジュールのビルド
    長時間のビルドとなりますので十分な時間あるときに実行します。
$ cd ..
$ make bzImage modules
  • モジュールへの署名付与
    ビルドが終わったら以下のコマンドでモジュールに署名を付与します。
$ cd certs
$ sudo openssl req -new -nodes -utf8 -sha256 -days 36500 -batch -x509 \
-config x509.genkey -outform PEM -out signing_key.x509 -keyout signing_key.pem

module と kernel のインストール

  • debian/scritpts/sign-module への実行権付与
$ chmod +x debian/scripts/sign-module
  • デバッグシンボルを strip したモジュールのインストール
$ sudo make modules_install INSTALL_MOD STRIP=1
  • カーネルのインストール
$ sudo make install

ubuntu 再起動とカーネル名の確認

Ubuntu 再起動後にカーネルバージョンを確認します。

$ uname -r
6.8.12-custom

Ubuntu 24.04 LTS はリリースから多くの時間は経っていないので kernel のビルド方法は source.list 仕様変更以外は変更されていませんでした。しかし、カーネルバージョンが更新されたまた変更される可能性もありますので引き続き確認したいと思います。