カーネルはそう頻繁にアップデートするものでもないので備忘録として残しておこうと思います。CentOS7 での方法です。初めての人でもわかるように書きました(書いたつもりです)。
目次 [非表示]
カーネルアップデート方法
ELRepo の導入
ELRepoとは、RHEL系ディストリのカーネルやドライバを管理するリポジトリ。リポジトリの最新版URLは以下で入手できる。
#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-3.el7.elrepo.noarch.rpm
Bash
既存のカーネル関連パッケージの確認
インストール直後の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
Bash
最新版カーネル本体のインストール
インストールするカーネルは、最新安定版と長期サポート版(LTS)から選べる。好きなほうを選んで構わない。インストールには少し時間がかかるので焦らず待つ。
#最新安定版をインストールする場合
$ yum --enablerepo=elrepo-kernel install kernel-ml
#長期サポート版をインストールする場合
$ yum --enablerepo=elrepo-kernel install kernel-lt
Bash
インストールができたら、サーバーを再起動し、新しいカーネルで起動する。起動すると、以下のような画面が表示されるので、新しいカーネルを選択してEnterを押す。
この画面を出せない環境の場合は、デフォルトで起動するカーネルの変更を参照。
無事起動すると、新しいカーネルで起動できていることが確認できる。
$ uname -r
4.18.4-1.el7.elrepo.x86_64
Bash
デフォルトで起動するカーネルの変更
このままでは、起動画面でカーネルを選択しなかった場合に自動起動されるカーネルは前のバージョンのままなので、ブートローダー(OSを起動するためのプログラム)の設定を変更します。
また、上の画像のような画面を開けない環境の場合も(SSH接続のみ許可されている場合など)、ブートローダーの設定を変更することで起動するカーネルを変更することができる。
まず、以下のコマンドで起動可能なカーネルの一覧を取得します。
$ 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' {
Bash
続いて、デフォルトで起動するカーネルを指定します。今回起動したいバージョンは4.18.4-1なので、以下のようにします。
#設定の変更
$ grub2-set-default 0
#設定の確認
$ grub2-editenv list
saved_entry=0
Bash
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
Bash
上記のように、kernel-tools-libs を削除すると kernel-tools も削除されます。
②kernel-ml-tools のインストール
$ yum --enablerepo=elrepo-kernel install kernel-ml-tools
Bash
③その他カーネル関連パッケージのインストール(あれば)
既存のカーネル関連パッケージの確認でほかにインストールされているパッケージがあれば、同様にインストールします。
#kernel-headers がインストールされていた場合の例
yum --enablerepo=elrepo-kernel install kernel-ml-headers
Bash
ここまでの作業が完了すれば、カーネルのアップデートは完了です。
インストールの最終確認
#関連パッケージも含めてアップデートできたか確認する
$ 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
Bash
旧カーネル本体の削除(任意)
Redhatのマニュアルでは以下のように書かれていますが、旧カーネル本体を削除することも一応可能です。
新しいカーネルで問題がある可能性を考慮し、古いカーネルの維持を強くお薦めします。
最新カーネルと、その関連パッケージがインストールされていることを確認してから、旧カーネル本体を削除します。
$ yum remove kernel
Bash
念のため再起動し、問題がなければ完了です。
おまけ
意図せずアップデートされるのを防ぐ
必要に応じて。yum update でカーネルまでアップデートされると面倒なことになる可能性があるので、設定ファイルに次の記述をしておきます。
$ vi /etc/yum.conf
#以下の記述を追加する
exclude=kernel*
Bash
この手順は、名前が”kernel”から始まるパッケージすべてのインストール・アップデートを抑止するものです。そのため、この設定は適宜解除する必要があります。例えば、上記の設定を適用したまま、他のパッケージをインストールする際の依存関係で kernel-ml-headers などのアップデートやインストールが必要になった場合、そのインストールは失敗します。この際、特に気の利いたエラーメッセージが出るわけでもないので、カーネル関連のインストールを抑止していることを忘れないようにしましょう。
コメントを残す