Ubuntuでカーネルのビルド(make bindeb-pkg でのSSL error 解決方法メモ )

# はじめに
カーネルをビルドする必要があり情報を調べながら行っていましたが `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)を変えて再構築（ビルド）する](https://qiita.com/kakinaguru_zo/items/0a01e081be1e7b08dea1) の通りに設定すればよいが、
`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`できないとか思ってたけど廃止された古いやり方だったんですね。

# リンク

- [Debian/Ubuntuでカーネルの設定(.config)を変えて再構築（ビルド）する](https://qiita.com/kakinaguru_zo/items/0a01e081be1e7b08dea1)
- [Linuxカーネルビルド大全](https://qiita.com/progrunner/items/d2ab0a85b3881a4b7ed8#%E3%83%93%E3%83%AB%E3%83%89%E5%8F%8A%E3%81%B3%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)
- [第526回 Ubuntuで最新のカーネルをお手軽にビルドする方法](https://gihyo.jp/admin/serial/01/ubuntu-recipe/0526)
- [Linux kernel 4.6-rc1をdebianでbuildする](https://typeinf-memo.blogspot.com/2016/03/linux-kernel-46-rc1debianbuild.html)
- [Linux Kernel 5.11 をセルフビルドしたメモ](https://matoken.org/blog/2021/02/23/memo-of-self-building-linux-kernel-5-11/)
- [初心者向けKernelのビルド手順](https://mongonta.com/f258-howto-build-linux-kernel/)