はじめに
こんにちは。クラウド事業部の山田です。
1年の間に Ubuntu と Rocky Linux のカーネル切替を行う機会があったので手順をまとめてみます。
参考)
Ubuntuにおけるカーネルの変更方法
Kernel Update - Rocky Linux 8
Ubuntu で Linux カーネルのバージョンを変更する
目次
概要
切替手順の概要
1) OS上のパッケージマネージャー ( 今回はaptとdnf ) の操作によりカーネルパッケージをインストールします。
インストール方法には通常のパッケージと同様の下記パターンがあり、今回は a) c) のパターンを検証します。
a) オンラインでインストールする。
b) オフライン環境において、オンラインの別のLinuxサーバーでダウンロードしたパッケージファイルを利用する。
c) オフライン環境において、オンラインのWindowsでダウンロードしたパッケージファイルを利用する。
2) 次回起動時に使用されるカーネルを切り替え、再起動することでカーネルが切り替わります。
検証方法
1) 少し古いマイナーバージョンのOSで仮想マシンを作成します。
ディストリビューションによると思いますが、Rocky Linuxの最新バージョンではすでに最新のカーネルバージョンが使われており、かつ古いカーネルを選択できないものがあったためです。
2) 仮想マシンのチェックポイントを取って、上記 b) c) の操作をそれぞれ確認します。
切替手順
Ubuntu
全体の手順
仮想マシン作成
OSメディアの入手
Ubuntuを入手する の最新版
または
Official CD Mirrors for Ubuntu のミラーサイトのいずれか
※ Yamagata University の場合:対象バージョンを選択して [Server install image] から server の iso ファイルを入手します。仮想マシン作成とOSインストール
※ 今回は ubuntu-24.04.1-live-server-amd64.iso を使用しました。
手順省略
既存設定の確認
- 現カーネルの確認
# uname -r //---------------------------------------// 6.8.0-71-generic //---------------------------------------//
- インストール済みカーネルの確認
# ls /lib/modules //---------------------------------------// 6.8.0-71-generic //---------------------------------------//
カーネルインストール
カーネルインストール
次項 [オンラインのインストール手順] または [オフラインのインストール手順] によりカーネルをインストールします。追加されたカーネルの確認
# ls /lib/modules //---------------------------------------// 6.8.0-64-generic 6.8.0-71-generic //---------------------------------------//
カーネル切り替え
- カーネルのIDの確認
# grep -e menuentry -e submeny /boot/grub/grub.cfg
//---------------------------------------//
if [ x"${feature_menuentry_id}" = xy ]; then
menuentry_id_option="--id"
menuentry_id_option=""
export menuentry_id_option
menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-21fee17f-814f-4416-b42d-4cb194359887' {
submenu 'Advanced options for Ubuntu' $menuentry_id_option 'gnulinux-advanced-21fee17f-814f-4416-b42d-4cb194359887' {
menuentry 'Ubuntu, with Linux 6.8.0-71-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-6.8.0-71-generic-advanced-21fee17f-814f-4416-b42d-4cb194359887' {
menuentry 'Ubuntu, with Linux 6.8.0-71-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-6.8.0-71-generic-recovery-21fee17f-814f-4416-b42d-4cb194359887' {
menuentry 'Ubuntu, with Linux 6.8.0-64-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-6.8.0-64-generic-advanced-21fee17f-814f-4416-b42d-4cb194359887' {
menuentry 'Ubuntu, with Linux 6.8.0-64-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-6.8.0-64-generic-recovery-21fee17f-814f-4416-b42d-4cb194359887' {
menuentry 'UEFI Firmware Settings' $menuentry_id_option 'uefi-firmware' {
//---------------------------------------//
または下記全文を1度に貼り付けて実行します。
# awk -F\' -v l=-1 -v ll=-1 \
'/menuentry |submenu / {
if ($1=="menuentry ") {l+=1; print l "\t" $2}
else if ($1=="submenu ") {l+=1; ll=-1; print l "\t" $2}
else {ll+=1; print "\t" l ">" ll "\t" $2}
}' \
/boot/grub/grub.cfg
//---------------------------------------//
0 Ubuntu
1 Advanced options for Ubuntu
1>0 Ubuntu, with Linux 6.8.0-71-generic
1>1 Ubuntu, with Linux 6.8.0-71-generic (recovery mode)
1>2 Ubuntu, with Linux 6.8.0-64-generic
1>3 Ubuntu, with Linux 6.8.0-64-generic (recovery mode)
1>4 UEFI Firmware Settings
//---------------------------------------//
- 既定のカーネルの指定
# vi /etc/default/grub //---------------------------------------// GRUB_DEFAULT="" ← ""内に 1>2 など対象のIDを記載して保存する。 ↓ GRUB_DEFAULT="1>2" //---------------------------------------//
- 再起動
# shutdown -r now
- カーネルの再確認
# uname -r //---------------------------------------// 6.8.0-64-generic //---------------------------------------//
オンラインのインストール手順
- インストール対象の確認
インストール可能なパッケージを確認します。
その中で linux-image-xx.xx.xx-xx-generic の最新のものをインストール対象とします。
※ 今回は 6.8.0-71 より新しいものがなかったため 6.8.0-64 を指定します。
# apt search linux-image //---------------------------------------// ~略~ linux-image-6.8.0-64-generic/noble-updates,noble-security 6.8.0-64.67 amd64 Signed kernel image generic ~略~ linux-image-6.8.0-71-generic/noble-updates,noble-security,now 6.8.0-71.71 amd64 [installed,automatic] Signed kernel image generic ~略~ //---------------------------------------//
- インストール
※ linux-modules-xx.xx.xx-xx-generic も同時にインストールされることが分かります。
# apt install linux-image-6.8.0-64-generic //---------------------------------------// ~略~ Suggested packages: fdutils linux-tools linux-headers-6.8.0-64-generic linux-modules-extra-6.8.0-64-generic ~略~ //---------------------------------------//
オフラインのインストール手順
インストール対象の確認とダウンロード
下記いずれかのサイトにて、オンラインで自動的に取得されるのと同じパッケージファイル ( .deb ) を取得します。
※ 今回は linux-image-6.8.0-64-generic と linux-modules-6.8.0-64-generic
・packages.ubuntu.com の
https //packages.ubuntu.com/<UbuntuのOSバージョンのコード名>/kernel/
Ubuntu24の場合は https://packages.ubuntu.com/noble/kernel/
にて、linux-image-xx.xx.xx-xx-generic と linux-modules-xx.xx.xx-xx-generic
または
・archive.ubuntu.com
の /ubuntu/pool/main/l/linux-signed/ から linux-image-xx.xx.xx-xx-generic
の /ubuntu/pool/main/l/linux/ から linux-modules-xx.xx.xx-xx-genericディレクトリ準備
対象サーバーにそのカーネルバージョン専用のディレクトリを作成します。
# mkdir 6.8.0-64
- パッケージファイル配置
作成したディレクトリに取得したパッケージファイルを全て配置します。
# ls 6.8.0-64 //---------------------------------------// linux-image-6.8.0-64-generic_6.8.0-64.67_amd64.deb linux-modules-6.8.0-64-generic_6.8.0-64.67_amd64.deb //---------------------------------------//
- インストール
# cd 6.8.0-64 # apt-get install ./*.deb
以降はオンラインのインストール手順と同じです。
Rocky Linux
全体の手順
仮想マシン作成
OSメディアの入手
Rocky Linux の
[Default Images] - [DVD ISO] の各メジャーバージョン最新版
または
Index of /vault/rocky のアーカイブ
/vault/rocky/<OSバージョン>/isos/x86_64/ の Rocky-<OSバージョン>-x86_64-dvd1.iso
からisoファイルを入手します。仮想マシン作成とOSインストール
※ 今回は Rocky-8.8-x86_64-dvd1.iso を使用しました。
手順省略
既存設定の確認
- 現カーネルの確認
# uname -r //---------------------------------------// 4.18.0-477.10.1.el8_8.x86_64 //---------------------------------------//
- インストール済みカーネルの確認
# ls /lib/modules //---------------------------------------// 4.18.0-477.10.1.el8_8.x86_64 4.18.0-477.el8.x86_64 //---------------------------------------//
カーネルインストール
カーネルインストール
次項 [オンラインのインストール手順] または [オフラインのインストール手順] によりカーネルをインストールします。追加されたカーネルの確認
# ls /lib/modules //---------------------------------------// 4.18.0-477.10.1.el8_8.x86_64 4.18.0-477.el8.x86_64 4.18.0-553.63.1.el8_10.x86_64 //---------------------------------------//
- 既定のカーネルの確認
インストールしたカーネルが既定のカーネルに指定されていることを確認します。
# grubby --default-kernel //---------------------------------------// /boot/vmlinuz-4.18.0-553.63.1.el8_10.x86_64 //---------------------------------------//
- 既定のカーネルの変更
既定のカーネルを手動で変更する場合、インストール済みカーネルのインデックス番号で指定します。
※ インストールしたカーネルに切り替えずに、従来のカーネルを既定のカーネルに戻す場合。
# grubby --info=ALL | grep -E "^kernel|^index" //---------------------------------------// index=0 kernel="/boot/vmlinuz-4.18.0-553.63.1.el8_10.x86_64" index=1 kernel="/boot/vmlinuz-4.18.0-477.10.1.el8_8.x86_64" index=2 kernel="/boot/vmlinuz-0-rescue-ef59161bb7674916a540ccc1e6bc0036" //---------------------------------------//
# grubby --set-default-index=<インデックス番号> # grubby --set-default-index=1 # grubby --default-kernel //---------------------------------------// /boot/vmlinuz-4.18.0-477.10.1.el8_8.x86_64 //---------------------------------------//
- 再起動
# shutdown -r now
- カーネルの再確認
# uname -r //---------------------------------------// 4.18.0-553.63.1.el8_10.x86_64 //---------------------------------------//
オンラインのインストール手順
- インストール対象の確認
インストール可能なパッケージを確認します。
# dnf --showduplicates list kernel //---------------------------------------// ~略~ インストール済みパッケージ kernel.x86_64 4.18.0-477.10.1.el8_8 @anaconda 利用可能なパッケージ kernel.x86_64 4.18.0-553.el8_10 baseos kernel.x86_64 4.18.0-553.5.1.el8_10 baseos ~略~ kernel.x86_64 4.18.0-553.62.1.el8_10 baseos kernel.x86_64 4.18.0-553.63.1.el8_10 baseos //---------------------------------------//
- インストール
※ 今回は 4.18.0-553.63.1.el8_10 を指定します。
※ kernel-core と kernel-modules も同時にインストールされることが分かります。
# dnf install kernel-4.18.0-553.63.1.el8_10 //---------------------------------------// インストール: kernel x86_64 4.18.0-553.63.1.el8_10 baseos 10 M 依存関係のインストール: kernel-core x86_64 4.18.0-553.63.1.el8_10 baseos 44 M kernel-modules x86_64 4.18.0-553.63.1.el8_10 baseos 36 M //---------------------------------------//
オフラインのインストール手順
インストール対象の確認とダウンロード
下記いずれかのサイトにて、オンラインで自動的に取得されるのと同じパッケージファイル ( .rpm ) を取得します。
※ 今回は kernel-4.18.0-553.63.1.el8_10.x86_64.rpm 、kernel-core-4.18.0-553.63.1.el8_10.x86_64.rpm 、kernel-modules-4.18.0-553.63.1.el8_10.x86_64.rpm
/pub/rocky/8.10
※ 8.8向けのページは /vault/rocky/8.8 ですが、より新しいOSバージョンが出た以降のカーネルは新OSのページに表示されるようです。
オンライン環境において、dnf --showduplicates list kernel コマンドでインストール可能とされた 4.18.0-553.63.1 が
8.10 向けパッケージのページで入手できるのでそこからダウンロードします。ディレクトリ準備
対象サーバーにそのカーネルバージョン専用のディレクトリを作成します。
# mkdir 4.18.0-553.63.1.el8_10
- パッケージファイル配置
作成したディレクトリに取得したパッケージファイルを全て配置します。
# ls 6.8.0-64 //---------------------------------------// kernel-4.18.0-553.63.1.el8_10.x86_64.rpm kernel-core-4.18.0-553.63.1.el8_10.x86_64.rpm kernel-modules-4.18.0-553.63.1.el8_10.x86_64.rpm //---------------------------------------//
- インストール
# cd 6.8.0-64 # dnf install ./*.rpm --disablerepo='*'
以降はオンラインのインストール手順と同じです。