Hyper-V環境のCentOS 5.5 のカーネルをバージョンアップする

元のカーネルバージョン
2.6.18-194.32.1.el5

バージョンアップ後
2.6.37
(2011/01/12最新)

検証環境

ホストOS
Windows2008Server R2 Enterprise

ゲストOS
CentOS5.5 32bit

※事前にLinux統合ドライバ2.1をインストールしてある事

CentOS5.5って結構古いカーネルバージョンだったりするので、新しいバージョンを使ってみようという事でやってみました。
正直言いまして、かなりハマリました。
途中で挫折もしており、成功するまでに4カ月かかりましたよorz
Hyper-V環境での事例は少ないので、自分で分かった範囲の事を記述しています。
うp主はLinuxについてプロフェッショナルではないので、あんまり期待しないでね。


コンパイラの準備
# yum install -y gcc glib glib-devel ncurses-devel

カーネルソースの準備

# cd /usr/src/kernels
# wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.37.tar.bz2

# tar xvjf linux-2.6.37.tar.bz2
# cd linux-2.6.37
# cp /boot/config-2.6.18-194.32.1.el5 /usr/src/kernels/linux-2.6.37/.config

# make mrproper
# make oldconfig
ずっとEnterで決定。
細かい設定は後でするのでここではスルー。

カーネルのコンフィグレーション指定

# make menuconfig
対話式のカーネル設定画面を起動します。
make xconfigというGUIのもありますが、KDEとかなんやらインスコしてないと使えません。
ここでは省略。

要注意
ここで適切な設定を行わないと起動しません!

「General setup」 →「Enter」キー
[*] enable deprecated sysfs features to support old userspace tools
[*] enabled deprecated sysfs features by default
*が付いた事を確認します。
ここで設定しておかないと起動しません。

「Processor type and features」 →「Enter」キー
「Processor family (Pentium-Pro)」 →「Enter」キー
(X) Opteron/Athlon64/Hammer/K8 にxマークが付いている事を確認します。
[*] AMD microcode patch loading support →「Space」キー
*マークが付いている事を確認します。

ここでの作業ですが、今回使用しているHostマシンはOpteron PE2970を2way搭載しています。
ゲストOSは仮想化しているいえ、命令はホストOSの管理レイヤーを素通りしますので
実際にゲストOSで使用されるCPUもOpteron PE2970になります。
(詳しくは調べてください)
ファミコンとかのエミュレーションとは仕組みが違うので注意してください。
ここではAMDのCPUを使うので、AMDのマイクロコードを有効化します。
ちなみに有効化してない場合は起動しません。
また、Intel系の場合はAMD microcode patch loading supportはチェック入れたらだめだと思います。
(テストしてないです)
CPUについてよくわからん場合はPentium-Proを指定すればだいたい起動するっぽいです。

IPtableのエラー解消

「Networking support」 →「Enter」キー
「Networking options」 →「Enter」キー
「Network packet filtering framework (Netfilter)」 →「Enter」キー
「Core Netfilter Configuration」
「IP: Netfilter Configuration」
「IPv6: Netfilter Configuration」
の以下全ての項目を*かMにします。
これをやらないとIPtableが動かないです。

Hyper-Vのドライバ組み込み
「Device Drivers」→「Enter」キー
[] Starting drivers →「Space」キー
[*] Starting drivers →「Enter」キー
[*] Exclude Staging drivers from being built (NEW) →「Space」キー
<>Microsoft Hyper-V client drivers (NEW) →「Space」キー
<*> Microsoft Hyper-V client drivers
<*> Microsoft Hyper-V virtual storage driver (NEW)
<*> Microsoft Hyper-V virtual block driver (NEW)
<*> Microsoft Hyper-V virtual network driver (NEW)

ここで組み込まないとseth0が見えなくなります。

起動時ファイルシステムの設定
「File systems」 →「Enter」キー
<*> Ext3 journalling file system support →「Space」キー
Mから*に変更します。

Mのままですと、起動してからドライバを読み込みます。
初期のファイルシステムがext3の場合はドライバ類の読み込みができないため起動すらできません。
*に変更し静的組み込みにした場合カーネルに組み込まれるため、最初から認識できます。
今回はext3で構築しているので、ext4などの場合は該当ファイルシステムを*に変えてください。




並列コンパイルの設定
コンパイルに1時間以上かかるので、マルチコアプロセッサを積んでいる場合は
並列化オプションを使用してスピードアップを行います。
4コアの場合
# alias make=’make -j5′
スレッド数を増やしすぎるとメモリー使い切ってハングするので要注意!
スレッド4でメモリ2Gぐらい必要っぽいです。
# vmstat 5 2000
と打って状態見ておきましょう

コンパイル開始

# make clean
# make bzImage
# make modules
# make modules_install
# make install
一気にコンパイル用
# make clean;make bzImage;make modules;make modules_install;make install

ブルートゥース関連でエラーが出るかもしれないので、使わないのならシステムサービスで止めておいた方がいいかも。
今回の設定だとUSB周りのドライバなどが標準で入ってますので、適当に調整してください。
もちろんデバイスドライバは、最低限の方が効率がいいです。

用語
*とMの違い
*だと静的カーネル組み込みとなりまして、ブートイメージ?に最初から組み込まれます。
Mだと起動してから読み込まれます。
というわけで、起動初期から使用する必要がある機器については*で有る必要が有ります。
でも、*ばっかりつけちゃうとイメージが肥大化して遅くなったり、メモリを圧迫したりと
あんまりいい事はありません。

カテゴリー: Linux, Windows, コンピュータ パーマリンク

コメントは停止中です。