torutkのブログ

ソフトウェア・エンジニアのブログ

CentOS 5.2のカーネルを新しいバージョンに入れ替える(第1回:挫折編)

Red Hat Enterprise LinuxとそのクローンであるCentOSは、メジャーバージョンが同じ場合、Linuxカーネルのバージョンは固定(パッチは随時あたっているが)です。CentOS 5の場合、Linux 2.6.18で固定です。

そこで、新しいドライバが必要だが2.6.18(+RedHatのパッチ)でサポートされていないとき、あるいは新しいカーネルの機能を使いたい、といったときは、カーネルを入れ替えることになります。

新しいカーネルの入手

さて、まずLinuxの最新バージョンを調べてみると、本日現在の最新バージョンは、2.6.28です。しかし、「長期サポートカーネル(Long Time Supported Kernel:LTS)」なるバージョンは2.6.27なので、今回は2.6.27を入れることにチャレンジします。LTSは初めて目にした言葉ですが、Linuxの場合LTSではないバージョンとは違ってバグフィックス対応などの保守が継続されるもののようです。

そこで、近所のLinuxミラーサイトから、linux-2.6.27.13 をダウンロードします。

カーネルのビルド

  • 入手したカーネルソースを展開し、
  • CentOSカーネル設定ファイルをコピーしてきて、
  • make oldconfigを実行して不足の設定を追加し、
  • makeでカーネルをビルドし、
  • make modules_installでドライバ類を/lib/modules/<バージョン番号>にインストールし、
  • make installでカーネルイメージ等を/boot下にインストールし、
  • 再起動
work$ tar xvjf ~/linux-2.6.27.13.tar.bz2
    :
work$ cd linux-2.6.27.13
linux-2.6.27.13$ cp /usr/src/kernels/2.6.18-92.1.22.el5.i386/.config .
linux-2.6.27.13$ make oldconfig
    : (対話的に、既存.configにない設定を問い合わせてくるので入力)
linux-2.6.27.13$ make
    :
linux-2.6.27.13$ sudo make modules_install
    :
linux-2.6.27.13$ sudo make install
    :
linux-2.6.27.13$ 
カーネルの設定

カーネルが新しくなったことによって追加された設定項目は、コピーしてきた.configにはないので、make oldconfigでは設定を対話的に入力します。設定は、内容が不明であればデフォルトのままとしました(単にEnterキー入力)。

カーネルの設定をメニューで操作して変更するときは、make menuconfigを実行します。

起動しない

世の中には、問題を踏まずにうまく進められる人と、問題を踏んではまって苦労する人がいます。後者に属するなと感じている自分は今回も見事にはまっています。

実験なので、気軽に試せるVMware上のLinuxCentOS 5.2)上で新しいカーネルのビルド・インストールをして再起動してみました。残念ながらboot時にカーネルpanicで停止してしまいます。先行き長そう・・・。

No volume group found.
Volume group "VolGroup00" not found

initrdで失敗、ネットで検索して類似な問題がいくつかあったのでその対処を試してみたものの解決せず。一応調べて試したことの断片を以下にメモ

  • VMwareのLSILogic SCSI模擬は、カーネル2.26.21あたりで機能しない問題がある
    • VMwareSCSIアダプタ設定を"lsilogic"から"buslogic"に変更、カーネルの設定でBusLogic SCSI supportを手動()に指定
  • initrdにLVM対応の設定がない
    • 正常に起動するCentOS標準のinitrdと設定(init)の記述にほとんど違いはない