はじめに
カーネルをビルドする必要があり情報を調べながら行っていましたが 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できないとか思ってたけど廃止された古いやり方だったんですね。