カーネルをアップデートする方法について

カーネルのアップデート方法についてですが、 kernel-*.el7.x86_64 全てを一気にアップデートするのではなく、まず一番最初に、最新安定版のカーネルをインストールします。

その後、新しいカーネルで問題なく起動できることを確認し、問題なかったら残りの kernel-headers-*.el7.x86_64kernel-devel-*.el7.x86_64 等を新しいものに切り替えることで、より安全に作業できると思います。

今回は、最新安定版のカーネルを提供する ELRepo リポジトリを使って、CentOS 7 のカーネルバージョン kernel-3.10.0-229 からこの記事を作成した時点で、一番最新安定版カーネルである kernel-ml-4.6.3-1 へアップデートする方法についてご紹介します。

主に、以下の作業を実施します。

  • 最新安定版カーネルのインストール
  • 最新安定版カーネルでシステム再起動
  • 旧カーネル関連パッケージの切り替え
  • 旧カーネル本体の削除
  • 最終確認

最新安定版カーネルのインストール、及び起動

Step 1. 現在のカーネルバージョン確認

まずは、現在のシステム上で動いているカーネルのバージョンとパッケージ一覧を確認します。

カーネルのバージョン 3.10.0-229 がインストールされていることが分かります。

現在のカーネルバージョン確認
01
02
03
04
05
06
07
08
09
10
11
# uname -a
Linux centos 3.10.0-229.el7.x86_64 #1 SMP Fri Mar 6 11:36:42 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

# rpm -qa | grep "^kernel" | sort
kernel-3.10.0-229.11.1.el7.x86_64
kernel-3.10.0-229.el7.x86_64
kernel-devel-3.10.0-229.11.1.el7.x86_64
kernel-devel-3.10.0-229.el7.x86_64
kernel-headers-3.10.0-229.11.1.el7.x86_64
kernel-tools-3.10.0-229.11.1.el7.x86_64
kernel-tools-libs-3.10.0-229.11.1.el7.x86_64

Step 2. 最新安定版カーネルのインストール

ELRepo リポジトリを使って、最新安定板カーネルをインストールするには、以下のコマンドを実施します。

ELRepo を導入してない場合には、前回の記事を参考にし、インストールしてください。

最新安定板カーネルのインストール
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# yum --enablerepo=elrepo-kernel -y install kernel-ml
読み込んだプラグイン:fastestmirror, langpacks
base                                            | 3.6 kB  00:00:00
elrepo                                          | 2.9 kB  00:00:00
elrepo-kernel                                   | 2.9 kB  00:00:00
extras                                          | 3.4 kB  00:00:00
updates                                         | 3.4 kB  00:00:00

・・・

Determining fastest mirrors
* base: download.nus.edu.sg
* elrepo: dfw.mirror.rackspace.com
* elrepo-kernel: dfw.mirror.rackspace.com
* extras: ftp.iij.ad.jp
* updates: download.nus.edu.sg
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ kernel-ml.x86_64 0:4.6.3-1.el7.elrepo を インストール      | 418 kB  00:00:01
--> 依存性解決を終了しました。

依存性を解決しました

=======================================================================================
 Package             アーキテクチャー   バージョン              リポジトリー      容量
=======================================================================================
インストール中:
 kernel-ml           x86_64             4.6.3-1.el7.elrepo      elrepo-kernel     38 M

トランザクションの要約
=======================================================================================
インストール  1 パッケージ

総ダウンロード容量: 38 M
インストール容量: 173 M
Downloading packages:
kernel-ml-4.6.3-1.el7.elrepo.x86_64.rpm          |  38 MB  00:00:15
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
警告: RPMDB は yum 以外で変更されました。
  インストール中          : kernel-ml-4.6.3-1.el7.elrepo.x86_64     1/1
  検証中                  : kernel-ml-4.6.3-1.el7.elrepo.x86_64     1/1

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

完了しました!

Step 3. 新しいカーネルで再起動

カーネルのインストールが終わったら以下のコマンドで新しいカーネルがインストールされていることを確認します。

インストールされるカーネルのバージョンについて、詳細は後で説明しますが、この例では、この記事を書いた時点での最新安定版カーネル kernel-ml-4.6.3-1.el7.elrepo.x86_64 がインストールされました。

新しいカーネルインストール確認
1
2
3
4
5
6
7
8
9
# rpm -qa | grep "^kernel" | sort
kernel-3.10.0-229.11.1.el7.x86_64
kernel-3.10.0-229.el7.x86_64
kernel-devel-3.10.0-229.11.1.el7.x86_64
kernel-devel-3.10.0-229.el7.x86_64
kernel-headers-3.10.0-229.11.1.el7.x86_64
kernel-ml-4.6.3-1.el7.elrepo.x86_64
kernel-tools-3.10.0-229.11.1.el7.x86_64
kernel-tools-libs-3.10.0-229.11.1.el7.x86_64

後は、新しいカーネルで問題なく起動できることを確認するために、再起動を実施します。

画像があった方が分かりやすいので、ここからは画像で。。

現在、動いているカーネルは、バージョン 3.10.0-229 です。 # shutdown -r now で再起動を実施します。

OS 再起動

# shutdown -r now

そうすると、カーネルのバージョンを選択する画面が表示されるので、新しいカーネル 4.6.3-1 を選択し、Enter を押します。

OS 再起動

新しいカーネルで起動

起動が完了するまで、しばらく待ちます。 (この画面はバージョンによって違うかもしれません)

OS 再起動

しばらく待機

起動完了後には、以下のようにログインプロンプトが表示されます。

新しいカーネル 4.6.3-1 で問題なく起動できました。

OS 再起動

新しい Kernel 4.6.3-1 で起動完了

# uname -a を実行してみるとカーネルのバージョンが上がっていることが分かります。

新しいカーネルのバージョン確認
1
2
# uname -a
Linux centos 4.6.3-1.el7.elrepo.x86_64 #1 SMP Sat Jun 25 11:28:39 EDT 2016 x86_64 x86_64 x86_64 GNU/Linux

これで新しいカーネルのインストールが完了しました。

旧カーネルと関連パッケージの切り替え

最新版カーネルのインストールは終わったものの、以下のように、昔のカーネル kernel-*3.10.0-229* がそのまま残っている状態なので、不要なものは削除し、切り替えが必要なものに関しては、新しいバージョンへの切り替えを実施します。

旧カーネル リスト確認
1
2
3
4
5
6
7
8
9
# rpm -qa | grep "^kernel" | sort
kernel-3.10.0-229.11.1.el7.x86_64
kernel-3.10.0-229.el7.x86_64
kernel-devel-3.10.0-229.11.1.el7.x86_64
kernel-devel-3.10.0-229.el7.x86_64
kernel-headers-3.10.0-229.11.1.el7.x86_64
kernel-ml-4.6.3-1.el7.elrepo.x86_64
kernel-tools-3.10.0-229.11.1.el7.x86_64
kernel-tools-libs-3.10.0-229.11.1.el7.x86_64

Step 1. 旧カーネル関連パッケージの切り替え

まずは、kernel-3.10.0-229 を除いて、以下のカーネル関連パッケージを新しいものに切り替えます。

  • kernel-headers-3.10.0-*
  • kernel-tools-libs-3.10.0-*
  • kernel-tools-3.10.0-*
  • kernel-devel-3.10.0-*

特に、kernel-headers-* は、依存関係上、あちこちで使われているため、削除してしまうとまずいことになりますが、ありがたいことに、yum swap を使うことによって、kernel-* から kernel-ml-* へ安全に切り替えることができます。

ちなみに、旧カーネルの本体である kernel-3.10.0-* は、一番最後に削除します。 最初に削除しても構いませんが、なんとなく、最後まで残しといた方が良いと思っただけなので、そうします。

kernel-headers 切り替え

まずは、kernel-headers-3.10.0-* の切り替えから。

kernel-headers 切り替え
01
02
03
04
05
06
07
08
09
10
11
12
13
# yum --enablerepo=elrepo-kernel -y swap \
kernel-headers -- \
kernel-ml-headers

・・・

Running transaction
  インストール中 : kernel-ml-headers-4.6.3-1.el7.elrepo.x86_64    1/2
  削除中         : kernel-headers-3.10.0-229.11.1.el7.x86_64      2/2
  検証中         : kernel-ml-headers-4.6.3-1.el7.elrepo.x86_64    1/2
  検証中         : kernel-headers-3.10.0-229.11.1.el7.x86_64      2/2

・・・

kernel-tools-libs 切り替え

次に、kernel-tools-libs-3.10.0-* を切り替えます。

kernel-tools-libs の切り替えについて

kernel-tools を切り替えようとすると以下のように衝突が発生します。

エラー: kernel-ml-tools conflicts with kernel-tools-3.10.0-327.22.2.el7.x86_64

問題を回避するために --skip-broken を用いることができます。

これらを試行できます: rpm -Va --nofiles --nodigest

そのため、先に kernel-tools-libs の切り替えを実施します。

また、kernel-tools-libs を切り替えると kernel-tools は自動的に削除されるため、切り替えが終わったら kernel-ml-tools を個別に新規インストールする必要があります。

kernel-tools-libs 切り替え
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
# yum --enablerepo=elrepo-kernel -y swap \
kernel-tools-libs -- \
kernel-ml-tools-libs

・・・

Running transaction
  インストール中 : kernel-ml-tools-libs-4.6.3-1.el7.elrepo.x86_64    1/3
  削除中         : kernel-tools-3.10.0-327.22.2.el7.x86_64           2/3
  削除中         : kernel-tools-libs-3.10.0-327.22.2.el7.x86_64      3/3
  検証中         : kernel-ml-tools-libs-4.6.3-1.el7.elrepo.x86_64    1/3
  検証中         : kernel-tools-3.10.0-327.22.2.el7.x86_64           2/3
  検証中         : kernel-tools-libs-3.10.0-327.22.2.el7.x86_64      3/3

・・・

kernel-ml-tools 新規インストール

次に、kernel-tools-3.10.0-* が削除されていることを確認し、 kernel-ml-tools を新規インストールします。

kernel-ml-tools 新規インストール
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
# rpm -qa | grep "^kernel" | sort
kernel-3.10.0-229.11.1.el7.x86_64
kernel-3.10.0-229.el7.x86_64
kernel-devel-3.10.0-229.11.1.el7.x86_64
kernel-devel-3.10.0-229.el7.x86_64
kernel-ml-4.6.3-1.el7.elrepo.x86_64
kernel-ml-headers-4.6.3-1.el7.elrepo.x86_64
kernel-ml-tools-libs-4.6.3-1.el7.elrepo.x86_64

# yum --enablerepo=elrepo-kernel -y install kernel-ml-tools

・・・

Running transaction
  インストール中 : kernel-ml-tools-4.6.3-1.el7.elrepo.x86_64    1/1
  検証中         : kernel-ml-tools-4.6.3-1.el7.elrepo.x86_64    1/1

・・・

kernel-devel 切り替え

次に、kernel-devel-3.10.0-* を切り替えます。

kernel-devel 切り替え
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
# yum --enablerepo=elrepo-kernel -y swap \
kernel-devel -- \
kernel-ml-devel

・・・

Running transaction
  インストール中 : kernel-ml-devel-4.6.3-1.el7.elrepo.x86_64    1/3
  削除中         : kernel-devel.x86_64                          2/3
  削除中         : kernel-devel.x86_64                          3/3
  検証中         : kernel-ml-devel-4.6.3-1.el7.elrepo.x86_64    1/3
  検証中         : kernel-devel-3.10.0-229.el7.x86_64           2/3
  検証中         : kernel-devel-3.10.0-229.11.1.el7.x86_64      3/3

・・・

Step 2. 旧カーネルの本体削除

最後に、既存のカーネル本体は残してもしょうがないので、削除します。

カーネル関連パッケージ一覧確認
01
02
03
04
05
06
07
08
09
10
11
12
13
14
# rpm -qa | grep "^kernel" | sort
kernel-3.10.0-229.11.1.el7.x86_64
kernel-3.10.0-229.el7.x86_64
kernel-ml-4.6.3-1.el7.elrepo.x86_64
kernel-ml-devel-4.6.3-1.el7.elrepo.x86_64
kernel-ml-headers-4.6.3-1.el7.elrepo.x86_64
kernel-ml-tools-4.6.3-1.el7.elrepo.x86_64
kernel-ml-tools-libs-4.6.3-1.el7.elrepo.x86_64

# ls -l /lib/modules/
合計 12
drwxr-xr-x. 7 root root 4096  9月 16  2015 3.10.0-229.11.1.el7.x86_64
drwxr-xr-x. 7 root root 4096  9月 14  2015 3.10.0-229.el7.x86_64
drwxr-xr-x  7 root root 4096  7月  5 13:58 4.6.3-1.el7.elrepo.x86_64
旧カーネル本体削除
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
# yum -y remove kernel

・・

Running transaction
  削除中 : kernel.x86_64                        1/2
警告: ファイル /lib/modules/3.10.0-229.el7.x86_64/weak-updates: 削除に失敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /lib/modules/3.10.0-229.el7.x86_64/modules.softdep: 削除に失敗しました: そのようなファイルやディレクトリはありませ ん
警告: ファイル /lib/modules/3.10.0-229.el7.x86_64/modules.devname: 削除に失敗しました: そのようなファイルやディレクトリはありませ ん
  削除中 : kernel.x86_64                        2/2
警告: ファイル /lib/modules/3.10.0-229.11.1.el7.x86_64/weak-updates: 削除に失敗しました: そのようなファイルやディレクトリはありま せん
警告: ファイル /lib/modules/3.10.0-229.11.1.el7.x86_64/modules.softdep: 削除に失敗しました: そのようなファイルやディレクトリはありません
警告: ファイル /lib/modules/3.10.0-229.11.1.el7.x86_64/modules.devname: 削除に失敗しました: そのようなファイルやディレクトリはありません
  検証中 : kernel-3.10.0-229.11.1.el7.x86_64    1/2
  検証中 : kernel-3.10.0-229.el7.x86_64         2/2

削除しました:
  kernel.x86_64 0:3.10.0-229.el7
  kernel.x86_64 0:3.10.0-229.11.1.el7

完了しました!

旧カーネル削除時に表示される警告メッセージについて

削除時に、カーネルのモジュールが格納されている /lib/modules/ ディレクトリ内のいくつかのモジュールが見つからないという警告が表示されますが、どうせ、yum remove で旧カーネル本体を削除すれば、/lib/modules/3.10.* ディレクトリは丸ごと削除されるので無視しても良いです。

旧カーネルの本体が削除が完了した後は、/lib/modules/ を確認し、新しいカーネルのみ存在することを確認します。

カーネルのモジュールディレクトリ確認
01
02
03
04
05
06
07
08
09
10
# ls -l /lib/modules/
合計 4
drwxr-xr-x 7 root root 4096  7月  5 13:58 4.6.3-1.el7.elrepo.x86_64

# rpm -qa | grep "^kernel" | sort
kernel-ml-4.6.3-1.el7.elrepo.x86_64
kernel-ml-devel-4.6.3-1.el7.elrepo.x86_64
kernel-ml-headers-4.6.3-1.el7.elrepo.x86_64
kernel-ml-tools-4.6.3-1.el7.elrepo.x86_64
kernel-ml-tools-libs-4.6.3-1.el7.elrepo.x86_64

だいぶスッキリしましたね。

最終確認

最終確認ですが、念のためもう一回再起動を実施し、問題なく起動できることを確認します。

# shutdown -r now コマンドで再起動を実施します。

centos7 カーネルアップデート後の再起動

# shutdown -r now

そうすると、もう旧カーネルは完全に削除されたため、新しいカーネルしか残ってないことが分かります。

centos7 カーネルアップデート後のブート画面

無事にログイン画面も表示されました。

centos7 カーネルアップデート完了

以上、CentOS 7 : 最新安定版カーネルインストール、及び切り替え でした。