Alma Linuxのカーネルビルド

Alma LinuxはCentOSのサポート終了に伴い、CentOSの後継として注目を集めているOS。
LPICの学習もAlma Linuxをベースにするようなので、ちょっと弄ってみた。

sudo の設定

Alma Linuxのインストールについては割愛。
まずは visudoコマンド で sudo の設定内容を確認する。
そのために su コマンドで root ユーザーに切り替える。

$ su -
# visudo

表示された内容は下記のような感じでwheelグループを利用すると良さそう。

## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL

wheel のグループに参加することでsudoが使用できるようになるので、usermodコマンドで追加する。

# usermod -aG wheel developer

無事に追加できたか、idコマンドで確認する。

# id developer
uid=1000(developer) gid=1000(developer) groups=1000(developer),10(wheel)

ビルド環境の構築

さっそく、ビルド環境の構築から。

$ sudo dnf update
$ sudo dnf install bc bison dwarves elfutils-libelf-devel flex \
gcc gcc-c++ ncurses-devel openssl-devel perl rpm-build rsync tar

bc rsync tar はすでにインストール済みだった。

実際は、dnf コマンドで一括でインストールしようと試みたが、実は上手くいかなかったので、下記のコマンド実行は失敗してしまう。

$ sudo dnf builddep -y kernel

ビルド環境構築前の状況はこんな感じ

[developer@localhost ~]$ df -h
ファイルシス               サイズ  使用  残り 使用% マウント位置
devtmpfs                     4.0M     0  4.0M    0% /dev
tmpfs                        880M     0  880M    0% /dev/shm
tmpfs                        352M  5.6M  347M    2% /run
efivarfs                     256K   35K  217K   14% /sys/firmware/efi/efivars
/dev/mapper/almalinux-root    27G  5.6G   21G   22% /
/dev/sda2                    960M  448M  513M   47% /boot
/dev/sda1                    599M  7.1M  592M    2% /boot/efi
tmpfs                        176M   96K  176M    1% /run/user/1000

ビルド環境を構築するためのパッケージのインストールは、こんなサイズが増えるらしい。

トランザクションの概要
================================================================================
インストール  210 パッケージ

ダウンロードサイズの合計: 79 M
インストール後のサイズ: 215 M

カーネルソースのダウンロード

まずは実行中のカーネルバージョンを確認する。

$ uname -a
Linux localhost.localdomain 5.14.0-503.35.1.el9_5.x86_64 #1 SMP PREEMPT_DYNAMIC Fri Apr 4 05:23:43 EDT 2025 x86_64 x86_64 x86_64 GNU/Linux

ダウンロードを行う。

$ sudo dnf download --source kernel
$ sudo rpm -ivh kernel-5.14.0-503.35.1.el9_5.src.rpm

なぜか

警告: user mockbuild does not exist - using root
警告: group mock does not exist - using root

という警告が大量に出るが無視して良さそう。

カーネルビルド前の初期化

まずはダウンロードしたカーネルを自身の作業ディレクトリにコピーして展開。

$ sudo cp /root/rpmbuild/SOURCES/linux-5.14.0-503.35.1.el9_5.tar.xz .
$ tar Jxvf linux-5.14.0-503.35.1.el9_5.tar.xz
$ cd linux-5.14.0-503.35.1.el9_5

カーネルをビルドする前のオマジナイ

$ make mrproper

ソースコードを展開した時点で7.7Gおよそ2Gほど増加していた。

$ df -h
ファイルシス               サイズ  使用  残り 使用% マウント位置
devtmpfs                     4.0M     0  4.0M    0% /dev
tmpfs                        880M     0  880M    0% /dev/shm
tmpfs                        352M  5.6M  347M    2% /run
efivarfs                     256K   35K  217K   14% /sys/firmware/efi/efivars
/dev/mapper/almalinux-root    27G  7.7G   19G   30% /
/dev/sda2                    960M  448M  513M   47% /boot
/dev/sda1                    599M  7.1M  592M    2% /boot/efi
tmpfs                        176M   96K  176M    1% /run/user/1000

ダメ押しでduコマンドでも確認。

$ du -sh .
1.6G    .

カーネルコンフィグの編集

今回は、現在実行中のカーネルコンフィグを利用。

$ cp /boot/config-$(uname -r) .config
$ make olddefconfig
$ make localmodconfig

じつは、このまま利用すると正しくビルドできないので手修正。
問題となるのは、.configの下記の設定。

CONFIG_SYSTEM_TRUSTED_KEYS="certs/rhel.pem"

そこで、下記のスクリプトを実行してクリアしておく。

./scripts/config --set-str CONFIG_SYSTEM_TRUSTED_KEYS ""
./scripts/config --set-str CONFIG_SYSTEM_REVOCATION_KEYS ""

カーネルのビルド

いよいよ、カーネルのビルドを実行。

$ make -j $(nproc)

  GEN     .version
  CHK     include/generated/compile.h
  LD      vmlinux.o
  MODPOST vmlinux.symvers
  MODINFO modules.builtin.modinfo
  GEN     modules.builtin
  CC      .vmlinux.export.o
  LD      .tmp_vmlinux.btf
  BTF     .btf.vmlinux.bin.o

なぜか、この表示で止まる。
これは、作業をAlmaLinuxをインストールした仮想マシン上で行なっていたためだが…
メモリを2048MBから8192MBに増量。仮想CPUも1→4つにしたら問題なく通ったw。
こんなところで悩むのは貧乏人だけか…

ちなみに.configをそのままビルドすると

$ du -sh .
17G     .

localmodconfig を適用すると

$ du -sh .
5.1G    .

その差は歴然である!