Oracle LinuxのデフォルトカーネルをスマートにUEKからRHCKに変更する
前提条件
※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するときは、このファイルが参照される。アップデートパッケージがあるときには、こちらで指定した方がでデフォルトカーネルになる。
# cat /etc/sysconfig/kernel --ここから下がファイルの中身-- # 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 --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
デフォルトカーネルを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系コマンドもあるが、それよりもずいぶんスマートにできたはずである。