search
LoginSignup
13

More than 1 year has passed since last update.

posted at

updated at

Oracle LinuxのデフォルトカーネルをスマートにUEKからRHCKに変更する

前提条件

  • 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)互換性がある。そのため一般的なアプリケーションの動作では、ほとんど影響しない。

なぜ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するときは、このファイルが参照される。アップデートパッケージがあるときには、こちらで指定した方がデフォルトカーネルになる。

/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を使うとかなりスマートに変更できる。詳しくは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系コマンドもあるが、それよりもずいぶんスマートにできたはずである。

参考資料

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
What you can do with signing up
13