LoginSignup
0
0

Linuxカーネルビルド環境をCentOS-7からAlmaLinux8に移行したのでビルド手順の差異を調べてみる

Posted at

概要

Linuxカーネルのstableで追加された機能を試す環境として、CentOS-7を長らく利用していたのですが、サポート期限が今年の6月末(204/06/30)で終了してしまいます。そこで新天地(?)としてAlmaLinux-8を次の実験用環境として利用してみることにしました。さっそく年初めにLinux 6.7がリリースされたので、カーネルビルド手順確認も兼ねて調べてみました。

カーネルビルドとインストール手順はCentOS-7の頃とほとんど変わらないのですが、 /boot/loader/entries/*-6.7.x86_64.conf の内容を手動で変更する必要がありました。この手順を抜かしてしまうと、カーネル起動時に"Faled to start Switch Root."エラーが発生し起動に失敗してしまいます。

このあたりの注意点も踏まえた状態で、AlmaLinux-8でのLinuxカーネルビルド手順をまとめてみました。

カーネルビルドに必要なパッケージのインストール

事前準備として、カーネルに必要なパッケージのインストールを実施しておきます。 ncurses-develmake menuconfig によるカーネルコンフィグで利用され、 dracutgrub2 はそれぞれinitramfs(カーネルが起動時に使用する初期イメージ)の作成とブートローダーの更新に使用します。

その他、コンパイラなどのツールはグループインストール機能で一括インストールします。その際の注意点として、グループ名は環境変数 LANG によって変わる( LANG=ja_JP.UTF-8 だと「開発ツール」というグループ名になる)ため、グループインストール時のみ LANG=C とするのが個々の環境設定で挙動が変わらずに済むので便利かと思います。

# sudo dnf install -y ncurses-devel dracut grub2
# LANG=C dnf group install "Development Tools"

カーネルアーカイブの取得と展開、カーネルのコンフィグ設定

# # カーネルソースアーカイブの取得。
# curl -sLO https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.7.tar.xz
#
# # カーネルソースの展開。
# mkdir -p /usr/src
# tar Jxf local/src/ARCHIVE/linux-6.7.tar.xz -C /usr/src
#
# # カーネルコンフィグの設定
# cd /usr/src/linux-6.7
# make defconfig  # デフォルトコンフィグの作成。
# cp .config .config.defconfig  # 構成変更したカーネルコンフィグとの比較用に、オリジナルをコピーしておく。
# # (カーネルコンフィグを編集する)
# diff -u .config.defconfig .config

.config.defconfig と設定を変更・追加した .config との差分は以下になります。別の実験用に設定していたbcacheのコンフィグが混じっていますが、実際はxfsをカーネルに組み込む設定のみが追加されていればOKです。

カーネルのビルドとインストール

カーネルのビルドとインストールはCentOS-7の頃とほぼ変わりません。一点だけ違う箇所は initramfs の作成コマンドが mkinitrd ではなく dracut になっている所です。

# # カーネルをビルドします。
# time make -j `cat /proc/cpuinfo | grep processor | wc -l`
#
# # カーネルをインストールします。
# # dracutコマンド実行時のみ、「6.7.0」と指定する点に注意。
# cd /usr/src/linux-6.7
# make modules_install
# cp -f arch/x86_64/boot/bzImage /boot/vmlinuz-6.7.x86_64
# dracut --force /boot/initramfs-6.7.x86_64.img 6.7.0

grub(ブートローダー)の更新もCentOS-7の時と同じです。

# # grub.cfgの更新。
# grub2-mkconfig -o /boot/grub2/grub.cfg
#
# # EFI環境の場合は以下の手順でgrub.cfgを更新してください。
# # grub2-mkconfig -o /boot/efi/EFI/almalinux/grub.cfg
#
# # grubへのエントリ追加。
# grubby --add-kernel=/boot/vmlinuz-6.7.x86_64 --title 'AlmaLinux 8(6.7.x86_64)'
#
# # 追加したエントリが起動時に選択されるように設定します。
# grub2-set-default 0

AlmaLinux-8で追加設定が必要な項目

ここまでの手順はCentOS-7環境でもほぼ同じですが、AlmaLinux-8環境では /boot/loader/entries/*-6.7.x86_64.conf への設定を追加する必要があります( grubby コマンドで行ってくれても良さそうな気はするのですが…🥺)。

具体的には以下の手順が追加で必要となります。

# # 既存のloaderコンフィグを確認する。
# ls /boot/loader/entries/c59bd1f73d9744b9914c27c39e91ae61-*.conf
/boot/loader/entries/c59bd1f73d9744b9914c27c39e91ae61-0-rescue.conf
/boot/loader/entries/c59bd1f73d9744b9914c27c39e91ae61-4.18.0-513.5.1.el8_9.x86_64.conf
/boot/loader/entries/c59bd1f73d9744b9914c27c39e91ae61-4.18.0-513.9.1.el8_9.x86_64.conf
/boot/loader/entries/c59bd1f73d9744b9914c27c39e91ae61-6.7.x86_64.conf
# 
# # 既存のloaderコンフィグには「options」の設定がある。
# grep options /boot/loader/entries/c59bd1f73d9744b9914c27c39e91ae61-4.18.0-513.9.1.el8_9.x86_64.conf
options $kernelopts $tuned_params
#
# # 今回ビルドしたlinux-6.7はloaderコンフィグこそ作成されているが、
# # optionsの設定が含まれていない。
# grep options /boot/loader/entries/c59bd1f73d9744b9914c27c39e91ae61-6.7.x86_64.conf | wc -l
0

ビルドしたLinuxカーネルのloaderコンフィグは作成されているのですが、既存のものと比べて options $kernelopts $tuned_params の設定が入っていません。このため /boot/loader/entries/*-6.7.x86_64.conf には手動で options $kernelopts $tuned_params の設定を追加します。

# diff -u /boot/loader/entries/c59bd1f73d9744b9914c27c39e91ae61-6.7.x86_64.conf.ORIG /boot/loader/entries/c59bd1f73d9744b9914c27c39e91ae61-6.7.x86_64.conf
--- /boot/loader/entries/c59bd1f73d9744b9914c27c39e91ae61-6.7.x86_64.conf.ORIG  2024-01-25 03:05:31.702399614 +0900
+++ /boot/loader/entries/c59bd1f73d9744b9914c27c39e91ae61-6.7.x86_64.conf       2024-01-25 03:11:53.073380770 +0900
@@ -2,7 +2,7 @@
 version 6.7.x86_64
 linux /boot/vmlinuz-6.7.x86_64
 initrd /boot/initramfs-6.7.x86_64.img
-options
+options $kernelopts $tuned_params
 id almalinux-0-6.7.x86_64
 grub_users $grub_users
 grub_arg --unrestricted

ちなみに、 options $kernelopts $tuned_params が入っていない場合、起動時に以下のようなエラーが発生してしまいます…😭

_img.png

エラー内容は以下のようになっており、一見しただけでは options $kernelopts $tuned_params の設定が入っていないことが原因とは分かりづらくなっています…😖

[FAILED] Faled to start Switch Root.
See 'systemctl status initrd-switch-root.service' for details.

Generating "/run/initramfs/rdsosreport.txt"

ここまでの設定を行ったのち、マシンを再起動するとビルドしたLinuxカーネルで起動してきます。

# uname -a
Linux alma8test 6.7.0 #1 SMP PREEMPT_DYNAMIC Thu Jan 18 15:55:07 JST 2024 x86_64 x86_64 x86_64 GNU/Linux

まとめ

AlmaLinux-8の環境でLinux-6.7(stable)のカーネルビルドとインストールを行う手順を調べてみました。
Linuxカーネル、というかLinuxディストリビューションはメジャーバージョンが上がるとカーネルビルドとインストールの手順が微妙に変わるので、折に触れて手順をアップデートしておきたいところです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0