# CentOSのカーネルアップデート

2017/06/04

鬱病なので東方M-1ぐらんぷり延々と見続けたり秋葉原でさみしくて3時間さまよって結局何もせずはなまるうどんだけ食べて帰るみたいなことをしてます。そんな状態でLPIC 201の勉強としてカーネルアップデートをやってみたのでまとめておきます。

カーネルアップデート。システム管理者なら絶対にやりたくないことの一つ。動いていたアプリケーションが動かない。そのアプリケーションが利用するモジュールが提供されていない。モジュールの挙動が変わっているなどなど。変化というものは怖いものです。俺はおうちの中で一人stableでいたい。人と関われない。

とはいえ「やりたくない」と「できない」は違うのでとりあえずやってみることにしました。俺は「やりたい」のに「できない」ことだらけだけど。

# 要件

  • CentOS 6.9(VM)
  • 2.6.32-696.1.1.el6.x86_64

今回は最新の安定版カーネル4.11.3に一気にアプデします。流れは以下の通り。

  1. カーネルソースのダウンロードと解凍
  2. コンフィギュレーションファイルの生成
  3. コンパイル
  4. インストール

コンフィギュレーションファイルとは、コンパイル時にどんなモジュールをカーネルに組み込むか/組み込まないか/必要時にロードできるようにしておくかを記述したファイルです。

ちなみにバックアップは必ずとっておきましょう。VMならディスクイメージをコピーしておくだけ。それではいきます。

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

# uname -r
2.6.32-696.1.1.el6.x86_64
1
2

rootでログインし、カーネルソースを配置するディレクトリに移動

# cd /usr/src
1

カーネル4.11.3をダウンロード

# curl https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.11.3.tar.xz > linux-4.11.3.tar.xz
1

解凍

# xz -dc linux-4.11.3.tar.xz | tar xvf -
1

解凍してできたディレクトリに移動

# cd linux-4.11.3
1

現在のカーネルで使用しているコンフィギュレーションファイルを流用するためにコピペ

# cp /boot/config-2.6.32-696.1.1.el6.x86_64 .config
1

コピーしてきたコンフィギュレーションファイルに新しいカーネルバージョンで使用する設定項目を反映

# make oldconfig
1

だばーっとこのモジュールいれますかいれませんかローダブルにしときますかといった質問がでてきますが、基本的にデフォルト値でいくのでエンターキーおしっぱなしでいいです。

これでコンフィギュレーションファイルができました。これをもとにコンパイルします。

# make
1

ここでこんなエラーが。

HOSTCC scripts/sign-file
scripts/sign-file.c:25:30: error: openssl/opensslv.h: そのようなファイルやディレクトリはありません
scripts/sign-file.c:26:25: error: openssl/bio.h: そのようなファイルやディレクトリはありません
scripts/sign-file.c:27:25: error: openssl/evp.h: そのようなファイルやディレクトリはありません
scripts/sign-file.c:28:25: error: openssl/pem.h: そのようなファイルやディレクトリはありません
scripts/sign-file.c:29:25: error: openssl/err.h: そのようなファイルやディレクトリはありません
scripts/sign-file.c:30:28: error: openssl/engine.h: そのようなファイルやディレクトリはありません
scripts/sign-file.c:52:27: error: openssl/pkcs7.h: そのようなファイルやディレクトリはありません
scripts/sign-file.c: In function ‘display_openssl_errors’
1
2
3
4
5
6
7
8
9

なんかファイルがないって怒られてるので、どのパッケージにあるのか確認

# yum provides '*/opensslv.h'
openssl-devel-1.0.1e-57.el6.x86_64 : Files for development of applications which will use OpenSSL
リポジトリー : base
一致 :
ファイル名 : /usr/include/openssl/opensslv.h

openssl-devel-1.0.1e-57.el6.i686 : Files for development of applications which will use OpenSSL
リポジトリー : base
一致 :
ファイル名 : /usr/include/openssl/opensslv.h</pre>
1
2
3
4
5
6
7
8
9
10

opennssl-develというパッケージにあることがわかったのでインストール

# yum install openssl-devel
1

満を持して再びコンパイル。

# make
1

1~2時間くらいかかるので放置。「道草屋-たびらこ3-いっしょにタッチケア/はみがきレッスン」を聞きながら待ちます。

おわったらモジュールをインストール

# make modules_install
1

おわったらカーネルをインストール。これまた時間がかかります。

# make install
1

きちんと作成できたか確認

# ls /boot
1

vmlinuz-4.11.3があればOK。一旦再起動し、ブートローダの起動オプションでこのカーネルを呼び出します。起動中にF12を押して、CentOS(4.11.3)のイメージを選択。無事起動できて、ログインできたら以下のコマンドでアプデできてるかを確認。

# uname -r
4.11.3
1
2

おわり。次回以降もこのカーネルを使いたいならば、grub Legacyの場合、/boot/grub/menu.lstを編集し、defaultの行に使用したいカーネルイメージの番号(一番上が0です)を記述しておきます。

本来動作確認とかきちんとしないといけないんだけどめんどいのでおわり。なんか最近もう何もかもやだ。