【初心者向け】カーネルアップデートの方法【CentOS7】

CentOSのロゴ

カーネルはそう頻繁にアップデートするものでもないので備忘録として残しておこうと思います。CentOS7 での方法です。初めての人でもわかるように書きました(書いたつもりです)。

スポンサーリンク

カーネルアップデート方法

ELRepo の導入

ELRepoとは、RHEL系ディストリのカーネルやドライバを管理するリポジトリ。リポジトリの最新版URLは以下で入手できる。

http://elrepo.org/tiki/tiki-index.php#Get_started

#CentOS7 の場合
$ rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
# rpm -U:アップデート -v:情報の表示 -h:進行状況の表示
$ rpm -Uvh https://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm

既存のカーネル関連パッケージの確認

インストール直後のCentOS7.5に入っているカーネル関連パッケージは以下の3つだけでした。色々入れた後の場合、kernel-headersなど他のパッケージが入っている場合もあります。最終的にはこれら全てを最新版にアップデートします。

#"kernel"から始まるRPMパッケージ名を検索
$ rpm -qa | grep "^kernel"
kernel-3.10.0-862.el7.x86_64
kernel-tools-3.10.0-862.el7.x86_64
kernel-tools-libs-3.10.0-862.el7.x86_64

最新版カーネル本体のインストール

インストールするカーネルは、最新安定版と長期サポート版(LTS)から選べる。好きなほうを選んで構わない。インストールには少し時間がかかるので焦らず待つ。

#最新安定版をインストールする場合
$ yum --enablerepo=elrepo-kernel install kernel-ml

#長期サポート版をインストールする場合
$ yum --enablerepo=elrepo-kernel install kernel-lt

インストールができたら、サーバーを再起動し、新しいカーネルで起動する。起動すると、以下のような画面が表示されるので、新しいカーネルを選択してEnterを押す。

この画面を出せない環境の場合は、デフォルトで起動するカーネルの変更を参照。

起動するカーネルの選択画面

無事起動すると、新しいカーネルで起動できていることが確認できる。

$ uname -r
4.18.4-1.el7.elrepo.x86_64

デフォルトで起動するカーネルの変更

このままでは、起動画面でカーネルを選択しなかった場合に自動起動されるカーネルは前のバージョンのままなので、ブートローダー(OSを起動するためのプログラム)の設定を変更します。

また、上の画像のような画面を開けない環境の場合も(SSH接続のみ許可されている場合など)、ブートローダーの設定を変更することで起動するカーネルを変更することが可能です。

まず、以下のコマンドで起動可能なカーネルの一覧を取得します。

kernel バージョン ~4.x の場合

$ grep "^menuentry" /boot/grub2/grub.cfg
menuentry 'CentOS Linux (4.18.4-1.el7.elrepo.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-862.3.2.el7.x86_64-advanced-8c1540fa-e2b4-407d-bcd1-59848a73e463' {
menuentry 'CentOS Linux (3.10.0-862.3.2.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-862.3.2.el7.x86_64-advanced-8c1540fa-e2b4-407d-bcd1-59848a73e463' {
menuentry 'CentOS Linux (0-rescue-b30d0f2110ac3807b210c19ede3ce88f) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-0-rescue-b30d0f2110ac3807b210c19ede3ce88f-advanced-8c1540fa-e2b4-407d-bcd1-59848a73e463' {

kernel バージョン 5.x~ の場合

$ grep "^menuentry" /boot/efi/EFI/centos/grub.cfg
menuentry 'CentOS Linux (5.3.1-1.el7.elrepo.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-1062.el7.x86_64-advanced-cc9abdc1-7819-4079-b607-95e7ae1bc766' {
menuentry 'CentOS Linux (3.10.0-1062.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-1062.el7.x86_64-advanced-cc9abdc1-7819-4079-b607-95e7ae1bc766' {
menuentry 'CentOS Linux (0-rescue-f560f933331c454a919cd79bda187c11) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-0-rescue-f560f933331c454a919cd79bda187c11-advanced-cc9abdc1-7819-4079-b607-95e7ae1bc766' {

続いて、デフォルトで起動するカーネルを指定します。

#設定の変更
$ grub2-set-default 0

#設定の確認
$ grub2-editenv list
saved_entry=0

grub2-set-default の後に続く数字は、先ほど取得したカーネル一覧の、上から何番目を起動するかという意味です。(一番上を0番目とする点に注意!)

設定が終了したら、再起動し、新しいカーネルで起動していることを確認します。

最新版カーネル関連パッケージのインストール

以下、kernel-ml をインストールした場合の手順です。 kernel-lt をインストールした場合は、適宜読み替えてください。

①と②は順番通りにやらないとコンフリクトを起こしてインストールできないので注意。

①kernel-ml-tools-libs のインストール

yum install ではなく yum swap を使います。

#既存の kernel-tools-libs を削除して kernel-ml-tools-libs をインストールする
$ yum --enablerepo=elrepo-kernel swap kernel-tools-libs kernel-ml-tools-libs

...
削除しました:
  kernel-tools-libs.x86_64 0:3.10.0-862.el7

依存性の削除をしました:
  kernel-tools.x86_64 0:3.10.0-862.el7

インストール:
  kernel-ml-tools-libs.x86_64 0:4.18.4-1.el7.elrepo

上記のように、kernel-tools-libs を削除すると kernel-tools も削除されます。

②kernel-ml-tools のインストール

$ yum --enablerepo=elrepo-kernel install kernel-ml-tools

③その他カーネル関連パッケージのインストール(あれば)

既存のカーネル関連パッケージの確認でほかにインストールされているパッケージがあれば、同様にインストールします。

#kernel-headers がインストールされていた場合の例
yum --enablerepo=elrepo-kernel install kernel-ml-headers

 

ここまでの作業が完了すれば、カーネルのアップデートは完了です。

インストールの最終確認

#関連パッケージも含めてアップデートできたか確認する
$ rpm -qa | grep "^kernel"
kernel-3.10.0-862.el7.x86_64 #元のカーネル
kernel-ml-4.18.4-1.el7.elrepo.x86_64
kernel-ml-tools-4.18.4-1.el7.elrepo.x86_64
kernel-ml-tools-libs-4.18.4-1.el7.elrepo.x86_64

旧カーネル本体の削除(任意)

Redhatのマニュアルでは以下のように書かれていますが、旧カーネル本体を削除することも一応可能です。

新しいカーネルで問題がある可能性を考慮し、古いカーネルの維持を強くお薦めします。

最新カーネルと、その関連パッケージがインストールされていることを確認してから、旧カーネル本体を削除します。

$ yum remove kernel

念のため再起動し、問題がなければ完了です。

おまけ

意図せずアップデートされるのを防ぐ

必要に応じて。yum update でカーネルまでアップデートされると面倒なことになる可能性があるので、設定ファイルに次の記述をしておきます。

$ vi /etc/yum.conf

#以下の記述を追加する
exclude=kernel*
注意:他パッケージの依存関係でハマらないために

この手順は、名前が”kernel”から始まるパッケージすべてのインストール・アップデートを抑止するものです。そのため、この設定は適宜解除する必要があります。例えば、上記の設定を適用したまま、他のパッケージをインストールする際の依存関係で kernel-ml-headers などのアップデートやインストールが必要になった場合、そのインストールは失敗します。この際、特に気の利いたエラーメッセージが出るわけでもないので、カーネル関連のインストールを抑止していることを忘れないようにしましょう。

スポンサーリンク

あわせて読みたい

コメントを残す

質問・感想などお気軽にどうぞ。
*が付いている項目は入力必須です。メールアドレス以外の項目が公開されます。
スパム防止のため、コメント反映まで少々時間がかかります。