エンタープライズ:特集 2003/01/28 09:44:00 更新

Linuxでハイパー・スレッディング――Pentium4/3.06GHzで遊ぼう
第2回 泥沼のRedHatカーネルデバッギング (3/5)

Kernel 2.4.20で再チャレンジ

 となると、最新版の入手である。kernel.orgで確認すると、原稿記述時点でのlatest stable versionは2.4.20である。このままkernel.orgからダウンロードしてもよいが、国内だとRing Serverがここのミラーをしているので、こちらから落としたほうが高速かもしれない。

 さてその最新版だが、現状が2.4.18だから、

  1. 2.4.18のソースにpatch-2.4.19とpatch-2.4.20をあてて最新にする
  2. 2.4.20のソースを丸ごとダウンロードする

の2種類がある。が、残念ながら1のほうはだめだった。Kernel Versionが2.4.18ではなく2.4.18-14というところがミソで、あれこれパッチがあたっているらしく、patch-2.4.19がうまく適用できない。結局2の方法で丸ごとダウンロードし、「/usr/src/linux-2.4.20」というディレクトリにソースを展開することにした。

 さて、展開後の手順だが

  1. 「/usr/src/linux-2.4.20」に移動
  2. 「make mrproper」で「.config」の初期化をする。(RedHat 8.0の既存の.configを使うとどうもうまくいかないので放棄した)
  3. 「make menuconfig」なり「make xconfig」なりで必要な環境設定を行う。最低でもSMPは有効にしておくこと
  4. 「make dep;make clean」を実施
  5. 「make bzImage」でカーネル再構築
  6. 「make modules」でモジュール生成
  7. 「make modules_install」でモジュールのインストール
  8. 「depmod -av」でモジュールの関係性を再構築
  9. まず、
cp /usr/src/linux-2.4.20/arch/i386/boot/bzImage /boot/vmlinuz-2.4.20
cp /usr/src/linux-2.4.20/System.map /boot/System.map-2.4.20
    を実施し、カーネルを「/boot」にコピーする。ちなみにその後
rm -f /boot/System.map
ln -sf /boot/System.map-2.4.20 /boot/System.map
    をかけておく(これは最初の1回だけ)
  1. 「mkinitrd /boot/initrd-2.4.20.img 2.4.20」を実施し、initrd(RAMDISKイメージ)を生成する
  2. 「/etc/lilo.conf」を以下のように変更する
prompt
timeout=50
default=linuxsmpdebug
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
message=/boot/message
lba32

image=/boot/vmlinuz-2.4.18-14
  label=linux
  initrd=/boot/initrd-2.4.18-14.img
  read-only
  append="root=LABEL=/"

image=/boot/vmlinuz-2.4.18-14smp
  label=linuxsmp
  initrd=/boot/initrd-2.4.18-14smp.img
  read-only
  append="acpismp=force maxcpus=2 root=LABEL=/"

image=/boot/vmlinuz-2.4.20
  label=linuxsmpdebug
  initrd=/boot/initrd-2.4.20.img
  read-only
  root=/dev/hda3
  append="acpismp=force"

 いちばん下が、今回追加したカーネルデバッグ用の2.4.20のエントリである。上の2つは既存の2.4.18-14のイメージだ。既存のものを残す理由は、何かの理由でカーネル構築に失敗してカーネルパニックを起こしてしまった場合、古いものからブートして修正をかけるためのいわば「保険」である。ちなみに最初、rootエントリは「append="root=LABEL=/"」方式で記述したのだがうまく認識してくれず、結局直接ハードディスクのパーティションを指定する方式で解決した。

 さてここまでの環境設定、筆者の場合はうまく行った。コンパイルエラーも特になく、無事に全セクションを完了した。と書くと格好がいいのだが、ここまで来るのに丸2日過ぎており、やっとたどり着いたという気分である。

 ちなみに再起動してみると、ちゃんと立ち上がった。もっとも「ちゃんと」という言葉の定義が微妙なところで、とりあえずOSは立ち上がったものの、X Serverが立ち上がらない(gdmがエラーを吐いて強制終了する)とかext3ファイルシステムのサポートがないとか、/bootがマウントされないとか、わりといろいろ問題はある。ただ幸い筆者の環境では別のマシン上でX Serverが動いているので、「set host」することでX Serverの問題はとりあえず回避できた。また、/bootのマウントに関しても、毎回手動で

mount -t ext2 /dev/hda1 /boot

とかすれば回避できる(なぜ「/etc/fstab」に記述しても反映されないのか、が謎ではある)が、とにかくマウントすれば利用できるので深くは考えないことにした。このあたりが気になるのであれば、上の3に戻り、make xconfigあたりできちんと設定を行ってからカーネルを再構築すればだいぶまともになるはずだ。とりあえず今回の主題は845マザーにおけるHTの有効化なので、そちらに話をすすめたい。

前のページ | 1 2 3 4 5 | 次のページ

[大原雄介,ITmedia]