前提条件
- Oracle Linux 7
- Oracle Linux 8(※)
※UEKがデフォルトインストールされているのはOracle Linux 8 Update 2以降
はじめに
Oracle Linuxには2種類のカーネルがある。1つはデフォルトカーネルのUEK(Unbreakable Enterprise Kernel)で、もう1つはRed Hatと完全に互換性を持つRHCK(Red Hat Compatible Kernel)である。UEKにはR4、R5など、さらにいくつかあるのだが、本題では無いので無視する。
今回何が言いたいかというと、
UEK→RHCKの変更に関する情報はたくさん転がっているけれど、スマートではないものが多いんじゃね?
7系になってGRUB2に変更されたことが大きく影響しているのだけれど、独断と偏見で、スマートな変更方法について語りたい。
UEKとRHCKの互換性
UEKとRHCKではベースカーネルのバージョンは違うが、ユーザー空間で動作するアプリケーションについてはABI(Application Binary Interface)互換性がある。そのため一般的なアプリケーションの動作では、ほとんど影響しない。
- Unbreakable Enterprise Kernel Release Notes for Unbreakable Enterprise Kernel Release 6
- Oracle Linux for Oracle Cloud Infrastructure FAQ
なぜRHCKか?
UEKとRHCKでは互換性があるのは知っているけれど、RHCKを使いたいケースがある。
たとえば、使う商用パッケージがサポートするのはRHCKだけとか、RHCKのほうが利用者が多いので安定してるんじゃね(全RHEL系ディストリビューションを含む)といった理由だ。
次に実際の方法を解説する。
環境を確認する
これからOracle Linux 7 / 8における変更方法を説明する。6系は違うので注意すること。
ディストリビューション&バージョンを調べる。
# cat /etc/oracle-release
Oracle Linux Server release 7.6
現在のカーネルを確認すると、UEKカーネルになっていることがわかる。
# uname -r
4.14.35-1844.3.2.el7uek.x86_64
インストールされているカーネルを確認すると、UEKとRHCKがインストールされている。
# rpm -qa | grep kernel | sort
abrt-addon-kerneloops-2.1.11-52.0.1.el7.x86_64
kernel-3.10.0-957.10.1.el7.x86_64
kernel-3.10.0-957.12.1.el7.x86_64 ★これにしたい
kernel-3.10.0-957.5.1.el7.x86_64
kernel-tools-3.10.0-957.12.1.el7.x86_64
kernel-tools-libs-3.10.0-957.12.1.el7.x86_64
kernel-uek-4.14.35-1844.2.5.el7uek.x86_64
kernel-uek-4.14.35-1844.3.2.el7uek.x86_64 ★これが現在
kernel-uek-4.14.35-1844.4.5.el7uek.x86_64
見落としがちなのが/etc/sysconfig/kernelで、yum updateするときは、このファイルが参照される。アップデートパッケージがあるときには、こちらで指定した方がデフォルトカーネルになる。
# UPDATEDEFAULT specifies if new-kernel-pkg should make
# new kernels the default
UPDATEDEFAULT=yes
# DEFAULTKERNEL specifies the default kernel package type
DEFAULTKERNEL=kernel-uek
grubbyを使って変更する
GRUB2で便利なのがgrubbyである。grubbyを使うとかなりスマートに変更できる。詳しくはgrubby --help
や下記のマニュアルを見てほしい。
参考:grubby ツールを使用した GRUB 2 メニューの永続的な変更
デフォルトのカーネルを表示する。
# grubby --default-kernel
/boot/vmlinuz-4.14.35-1844.4.5.el7uek.x86_64
デフォルトのインデックス番号を表示する。これだけではよく分からないので、次にメニューを全表示する。
# grubby --default-index
0
メニューを全部表示するには--info=ALL
を指定する。
# grubby --info=ALL
index=0 ★現在はインデックス番号0のこれ↓
kernel=/boot/vmlinuz-4.14.35-1844.4.5.el7uek.x86_64
args="ro crashkernel=auto LANG=ja_JP.utf8 console=tty0 console=ttyS0,9600 rd.luks=0 rd.lvm=0 rd.md=0 rd.dm=0 netroot=iscsi:169.254.0.2:::1:iqn.2015-02.oracle.boot:uefi iscsi_param=node.session.timeo.replacement_timeout=6000 net.ifnames=1 nvme_core.shutdown_timeout=10 ipmi_si.tryacpi=0 ipmi_si.trydmi=0 ipmi_si.trydefaults=0 libiscsi.debug_libiscsi_eh=1 network-config=e2NvbmZpZzogZGlzYWJsZWR9Cg== loglevel=4"
root=UUID=0efcd14b-2edf-4b85-ae64-4c3855ca5a58
initrd=/boot/initramfs-4.14.35-1844.4.5.el7uek.x86_64.img
title=Oracle Linux Server 7.6, with Unbreakable Enterprise Kernel 4.14.35-1844.4.5.el7uek.x86_64
index=1
kernel=/boot/vmlinuz-3.10.0-957.12.1.el7.x86_64 ★これに変更したい
args="ro crashkernel=auto LANG=ja_JP.utf8 console=tty0 console=ttyS0,9600 rd.luks=0 rd.lvm=0 rd.md=0 rd.dm=0 netroot=iscsi:169.254.0.2:::1:iqn.2015-02.oracle.boot:uefi iscsi_param=node.session.timeo.replacement_timeout=6000 net.ifnames=1 nvme_core.shutdown_timeout=10 ipmi_si.tryacpi=0 ipmi_si.trydmi=0 ipmi_si.trydefaults=0 libiscsi.debug_libiscsi_eh=1 network-config=e2NvbmZpZzogZGlzYWJsZWR9Cg== loglevel=4"
root=UUID=0efcd14b-2edf-4b85-ae64-4c3855ca5a58
initrd=/boot/initramfs-3.10.0-957.12.1.el7.x86_64.img
title=Oracle Linux Server 7.6, with Linux 3.10.0-957.12.1.el7.x86_64
index=2
kernel=/boot/vmlinuz-0-rescue-9c95796465364eaf81b3c9f027d03ee6
args="ro crashkernel=auto LANG=en_US.UTF-8 console=tty0 console=ttyS0,9600 rd.luks=0 rd.lvm=0 rd.md=0 rd.dm=0 netroot=iscsi:169.254.0.2:::1:iqn.2015-02.oracle.boot:uefi iscsi_param=node.session.timeo.replacement_timeout=6000 net.ifnames=1 nvme_core.shutdown_timeout=10 ipmi_si.tryacpi=0 ipmi_si.trydmi=0 ipmi_si.trydefaults=0 libiscsi.debug_libiscsi_eh=1 network-config=e2NvbmZpZzogZGlzYWJsZWR9Cg== loglevel=4"
root=UUID=0efcd14b-2edf-4b85-ae64-4c3855ca5a58
initrd=/boot/initramfs-0-rescue-9c95796465364eaf81b3c9f027d03ee6.img
title=Oracle Linux Server 7.6 Rescue 9c95796465364eaf81b3c9f027d03ee6 (3.10.0-957.10.1.el7.x86_64)
★中略
index=8
non linux entry
次のようにgrepすれば簡潔に表示できる。
grubby --info=ALL | grep -A 2 index
デフォルトカーネルをRHCKに変更する。--set-default-index=<index number>
を使えばインデックス番号を使える。しかし間違いの元なので使わない。
# grubby --set-default /boot/vmlinuz-3.10.0-957.12.1.el7.x86_64
変更されていることを確認する。
# grubby --default-index
1
# grubby --default-kernel
/boot/vmlinuz-3.10.0-957.12.1.el7.x86_64
最後に/etc/sysconfig/kernelでデフォルトカーネルをRHCK変更する。これを変更しないとyum updateしたときにUEKに戻ってしまう。
# vi /etc/sysconfig/kernel
変更前:
DEFAULTKERNEL=kernel-uek
変更後:
DEFAULTKERNEL=kernel
#DEFAULTKERNEL=kernel-uek
ここまで終わればリブートする。
# reboot
再起動したら確認する。次のようにRHCKに変わっていることがわかる。
# grubby --default-kernel
/boot/vmlinuz-3.10.0-957.12.1.el7.x86_64
# grubby --default-index
1
おわりに
一通りの手順を見てどうだろうか。grub2-mkconfigなどのgrub2系コマンドもあるが、それよりもずいぶんスマートにできたはずである。