Linuxカーネルをソースからビルドして,パッケージ化するところまでのメモ. 以下,Ubuntu 22.04 LTSで実験済み.
準備
まず,必要なものをaptでインストールする.
build-depを動かすためには,/etc/apt/sources.list
のファイルでdeb-src
で始まる行のコメントアウトを取り,有効化する必要がある.
有効化した後は,sudo apt update
してから,下記のコマンドを実行する.
$ sudo apt install git fakeroot libncurses5-dev $ sudo apt build-dep linux
Linuxカーネルのソースコードをダウンロード
私はカーネルのソースコードは,下記のように最新のものをダウンロードした.
$ git clone https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
カーネルコンフィグの設定
とりあえず,今使っているUbuntuのカーネルと同じ設定でビルドしたいので,次のようにコンフィグファイル.config
をビルドディレクトリに配置する.
$ cd linux $ mkdir ../linux-build $ cp /boot/config-`uname -r` ../linux-build/.config
.configファイルの修正
このまま.configファイルを使ってビルドすると,.pem
ファイルに対するエラーでコンパイルが失敗するので,次のようにCONFIG_SYSTEM_TRUSTED_KEYS
とCONFIG_SYSTEM_REVOCATION_KEYS
を空文字列に修正する.
CONFIG_SYSTEM_TRUSTED_KEYS="" CONFIG_SYSTEM_REVOCATION_KEYS=""
.configファイルをビルド対象カーネルに合わせる
.configファイルを今回ダウンロードした最新のカーネルに合わせて修正する必要があるらしい. ここら辺はまだよくわかっていないので要調査.
$ make O=../linux-build/ olddefconfig
カーネルのビルド
いよいよカーネルとカーネルモジュールをビルドする.
-j
とLOCALVERSION
の引数は,各自のお好みで変更してほしい.
LOCALVERSION
は自分でビルドしたと分かる文字列にすると良い.
ここでは,参考にしたwebサイトと同じようにしている.
カーネルのビルドは,以下のコマンド.
$ make -j17 O=../linux-build/ LOCALVERSION=-stock
カーネルモジュールのビルドは,以下のコマンド.
$ make modules -j17 O=../linux-build/ LOCALVERSION=-stock
カーネルパッケージの作成
以下のコマンドでDebianパッケージを作成することができる. 少し時間がかかるので,気長に待つ.
$ make bindeb-pkg O=../linux-build/ LOCALVERSION=-stock
上記のコマンドが終了すると,次のように.deb
ファイルが作成されている.
$ ls -l ../*.deb ../linux-headers-hogehoge.deb ../linux-image-hogehoge.deb ../linux-libc-dev_hogehoge.deb
カーネルパッケージのインストール
ここまででめでたくカーネルパッケージを作成できたら,あとはdpkg
コマンドでインストールするだけである.
$ sudo dpkg -i ../linux-headers-hogehoge.deb $ sudo dpkg -i ../linux-libc-dev_hogehoge.deb $ sudo dpkg -i ../linux-image-hogehoge.deb
ここまで正常にインストールできれば,再起動してGRUBで今回ビルドしたカーネルを選択すれば起動できる.
GRUBの設定
私は一応起動ログの確認のために,/etc/default/grub
のGRUB_CMDLINE_LINUX_DEFAULT
からquiet splash
を削除しておいた.
上記の編集を行った後は,sudo update-grub
で更新した後に再起動する.
参考にしたwebサイト
第526回 Ubuntuで最新のカーネルをお手軽にビルドする方法 | gihyo.jp
Debian/Ubuntuでカーネルの設定(.config)を変えて再構築(ビルド)する #kernel - Qiita