はじめに
カーネルをビルドする必要があり情報を調べながら行っていましたが SSL error
や dpkg-buildpackage: error: debian/rules binary subprocess returned exit status 2
が表示されうまくいきませんでした。
なんとかビルドに成功したので解決方法をまとめておきます。
環境
Amazon EC2でインスタンスを作成
- AMI: Ubuntu Server 22.04LTS (HVM), SSD Volume Type64 ビット (x86)
- t2.medium
- ストレージ:32GiB
環境構築
sudo apt -y update
sudo apt -y install build-essential
sudo apt -y install libncurses-dev fakeroot libssl-dev bison flex libncurses5-dev libelf-dev
sudo apt -y install dwarves
libelf-dev
がないとビルド時にgelf.h no such file
というエラーが出た。
dwarves
がないとBTF: .tmp_vmlinux.btf: pahole (pahole) is not available
というエラー。
そして、/etc/apt/sources.list
のdeb-src
で始まる行を全て有効にした後
sudo apt update
sudo apt build-dep linux
どれかは導入しなくてもいける気がするけどとりあえず調べて必要そうなものはinstallした。
カーネルソースのDL・コピー・展開・解凍
sudo apt install linux-source
mkdir ~/src
cp ../../usr/src/linux-source-5.15.0.tar.bz2 src/
cd src/
tar xvf linux-source-5.15.0.tar.bz2
.configについて
/boot
にあるconfig-5.15.0-1019-aws
を/linux-source-5.15.0
に.config
としてコピー
cp ../../../boot/config-5.15.0-1019-aws src/linux-source-5.15.0/.config
make oldconfig
で.config
をコンパイルしたいカーネルバージョンに合わせた。
make oldconfig
基本は Debian/Ubuntuでカーネルの設定(.config)を変えて再構築(ビルド)する の通りに設定すればよいが、
CONFIG_MODULE_SIG_KEY=""
CONFIG_SYSTEM_TRUSTED_KEYS=""
CONFIG_SYSTEM_REVOCATION_KEYS=""
にして
CONFIG_MODULE_SIG_ALL
やCONFIG_MODULE_SIG_FORMAT
も無効しないとSSL error
になる。
(調べてもこれが出てこなかったから苦しんでいた)
./scripts/config --disable MODULE_SIG --disable MODULE_SIG_ALL --disable CONFIG_MODULE_SIG_FORMAT --disable DEBUG_INFO --set-str SYSTEM_TRUSTED_KEYS "" --set-str MODULE_SIG_KEY "" --set-str REVOCATION_KEYS "" --enable PSI --disable CPUSETS --disable PROC_PID_CPUSET
ビルド
time make bindeb-pkg -j4
時間を計りたかったのでtime
もつけた。なくてもいい。
CONCURRENCY_LEVEL
をコアの数+1にして、-jを2倍にすると良いらしいがよくわからない。
ビルドにかかった時間は約7時間。
real 428m39.156s
user 768m14.345s
sys 55m23.993s
今思えばmake localmodconfig
で現在使われていないモジュールのビルドを無効化すればもっと早かった。
インストール・リブート
sudo apt install *.deb
とするとなぜかうまくいかなかったのでdpkg -i
でインストールした。
そしてリブート。
dpkg -i linux-headers-5.15.60_5.15.60-1_amd64.deb
dpkg -i linux-image-5.15.60_5.15.60-1_amd64.deb
dpkg -i linux-libc-dev_5.15.60-1_amd64.deb
reboot
起動してuname -r
で確認すると5.15.60
となりビルドできていた。
補足
ストレージは32GiBにしていたが最終的には約12GiB利用していた。やはりmake localmodconfig
で現在使われていないモジュールのビルドを無効化すれば。
sudo apt install kernel-package
ができずにmake-kpkg
できないとか思ってたけど廃止された古いやり方だったんですね。