2011/06/16

Fedora 15 on Hyper-V with Hyper-V Synthetic Drivers(GPLv2)

先日の投稿では、 http://www.kernel.org/ から入手した Lastest Stable Kernel (2.6.39.1) を使用して、Debian 6.0.1 用のカーネルを、Hyper-V ドライバーをビルトインして再構築してみました。

今回は、先月リリースされた Fedora 15 でも試してみたいと思います。ただし、Linux ディストリビューション各社は、オリジナルの Linux Kernel に追加機能やパッチを含めているはずですので、やはり純正 !? のカーネル ソースを利用するべきだと考え、Fedora 15 ではその方法でチャレンジしてみたいと思います。結果から先に言うと、成功しました!!


まず、Hyper-V の仮想マシンに Fedora 15 をクリーン インストールします。今回は、x86_64 DVD (Fedora-15-x86_64-DVD.iso、Live CD ではありません!!) を使用しました。インストール方法に注意点は特にありません。仮想マシンに「レガシ ネットワーク アダプター」を追加しておくこと (hv_netvsc が利用可能になるまで標準の「ネットワーク アダプター」は利用できないため)、タイムゾーンの設定で「システム クロックで UTC を使用」のチェックを外すこと (その理由についてはこちら) くらいです。

Fedora 15 をクリーン インストールしたら、ネットワークが利用可能なことを確認してください。irqbalance が悪さをして、ネットワーク (IPv4) がアクティブにならないようです。次の 2 つのおまじないを実行して、NetworkManager で接続を開始するか、自動接続するように構成すれば、DHCPv4 で自動構成されるようになりました (NetworkManager さんごめんなさい)。固定 IP を割り当てたい場合は、以下の取り消し線の操作でよいかと。

chkconfig irqbalance off
reboot



NetworkManager が悪さをして、IPv4 が有効にならないかもしれません。以下の方法 (他にも何かしたかも) で NetworkManager から network デーモンに切り替えてあげればよいようですが、再現できていません。奇跡的に使えるようになったみたいです。

chkconfig NetworkManager off
chkconfig network on
/etc/init.d/NetworkManager Stop

system-config-network を実行してネットワークを設定
または /etc/sysconfig/network-scripts/ifcfg-eth0 を直接編集
/etc/init.d/network start


いよいよカーネルの再構築です。http://fedoraproject.org/wiki/Docs/CustomKernel の説明に従って、以下のように操作しました。作業は、root 以外のユーザーで、$HOME をベースに行いました (注: 行頭の $ はプロンプトです)。


$  su -c 'yum install rpmdevtools yum-utils'
#su -c 'yum install qt3-devel libXi-devel'
(※ make xconfig を使わないのでスキップ。)
$  su -c 'yum install kernel-devel'
(
ドキュメントには無いけど必要だと思う。)
$  su -c 'yum install ncurses-devel'
(
ドキュメントには無いけど必要だと思う。)
$  rpmdev-setuptree
$  yumdownloader --source kernel 

(※ kernel-2.6.38.7-30.fc15.src.rpm がダウンロードされました。)
$  su -c 'yum-builddep kernel-2.6.38.7-30.fc15.src.rpm'
$  rpm -Uvh kernel-2.6.38.7-30.fc15.src.rpm
(※ ドキュメントにあるように、「警告: ユーザー mockbuild は存在しません。 - root を使用します」「警告: グループ mockbuild は存在しません。 - root を使用します」は無視します)
$  cd $HOME/rpmbuild/SPECS
$  rpmbuild -bp --target=$(uname -m) kernel.spec

cd $HOME/rpmbuild/BUILD/kernel-2.6.38.fc15/linux-2.6.38.x86_64
(※ ここで、念のため drivers/staging/hv の存在を確認しました。ちゃんと、Hyper-V Synthetic Drivers のソースがありました。)
 
cp configs/kernel-2.6.38.7-x86_64.config .config
make oldconfig
make menuconfig
(※ Device Drivers > Staging Drivers > Microsoft Hyper-V client drivers を選択して保存します。ここで、仮想マシンで不要なドライバーをごっそりと削除しておくのも良いかも。)


vi .config
(ファイルの最初に # x86_64 を書いて保存します。必須の手順なのかは?)
cp .config $HOME/rpmbuild/SOURCES/config-`uname -m`-generic
(
` は ' ではありません。[Shift]+[@]の方。) 
cd $HOME/rpmbuild/SPECS
vi kernel.spec
(※ # % define buildid .local の行を %define buildid .hyperv に書き換えます。% と define の間の空きを取ること。)
 
rpmbuild -bb --target=`uname -m` kernel.spec
(※ カーネルのを再構築し、.rpm パッケージを作成します。非常に時間がかかります。気長に待ちましょう。)

su -c "rpm -ivh --force $HOME/rpmbuild/RPMS/x86_64/kernel-2.6.38.7-30.hyperv.fc15.x86_64tar.rpm"
(※ 再構築したカーネルをインストールします。)

reboot
(※ 新しいカーネルをインストールしたら、再起動。2.6.38.7-30.hyperv カーネルを選択して起動します。)

lsmod |grep hv_
(※ hv_vmbus などがロードされていることを確認します。)


めでたしめでたし。1 日かかりました。お疲れ様でした。 

※ kernel-2.6.38.7-30.hyperv.fc15.x86_64tar.rpm をとっておけば、他の仮想マシンに Fedora 15 をインストールしたときに、簡単に Hyper-V 対応済みカーネルを導入できます。

0 件のコメント: