2011/06/15

最新の安定版 Linux Kernel 2.6.39.1 に Hyper-V ドライバーの新機能が...

COMPUTERWORLD BLOG のネタ集めのため、Hyper-V でサポート“されない” Linux ディストリビューションの対応状況について確認しておこうと思っていたところ、結構進んでいることが判明。

例えば、Ubuntu 11.04 と openSUSE 11.4 は、Hyper-V 仮想マシンにインストールするだけで、GPLv2 の Hyper-V ドライバー (Hyper-V Synthetic Drivers: hv_vmbus hv_storvsc hv_blkvsc hv_netvsc、hv_timesouce、hv_utils) が動き出します。4 CPU、時刻同期やシャットダウン連携、ハートビートも機能しているようなので、Linux Integration Services(Linux IS) for Hyper-V v2.1 相当が自動的に組み込まれるという状況になりました。Hyper-V 向けに何もしなくてもいいんです。

参考:
Linux kernel 2.6.32 以降には Hyper-V Linux ICs が組み込み済み [2010/03/18]
http://yamanxworld.blogspot.com/2010/03/linux-kernel-2632-hyper-v-linux-ics.html

Red Hat Enterprise Linux(RHEL) 6 や、クローンのScientific Linux(SL) 6、CentOS 6 (まだですが) の場合、標準の Kernel のモジュールから GPLv2 版の Hyper-V ドライバーは削除されています。ですが、ELRepo リポジトリの kmod-hyperv パッケージを使用して、簡単にインストールする方法がありました (RHEL 6.1 や SL 6.1 向けの kmod-hyperv はまだのようです)。ELRepo は、エンタープライズ向け Linux のためのコミュニティ リポジトリです。kmod-hyper-V のインストールは、次の 3 つのコマンドラインで完了です。簡単です。

rpm --import http://elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://elrepo.org/elrepo-release-6-3.el6.elrepo.noarch.rpm
yum --enablerepo=elrepo install kmod-hyperv


Debian に関しては、Yusuf Ozturk という方がスペシャリストのようです。この方は、Debian 5 向けの deb パッケージを提供したり、Unattended Linux VM Configuration Tool for Hyper-V という PowerShell モジュールを開発、提供したりと、virtualizaiton.info のニュースでもお馴染みの方。Yusuf Ozturk 氏は、Debian 6 への Hyper-V ドライバーの組み込み方法として、kernel 2.6.36 を Hyper-V ドライバーを含めて再構築する手順を説明しています。同様の手順をマイクロソフトの Andrey Beshkov 氏もスクリーンショット付で説明しています(ロシア語ですが)。これらの手順を参考に、Stable Linux Kernel の最新バージョンである 2.6.39.1 (2011/06/03) で試してみたところ、新たな発見が...


Debian 6.0.1 (squeeze) の 64 ビット (amd64) 版をクリーン インストールし、標準のカーネル (kernel 2.6.32-5-amd64) 上で、カーネル 2.6.39.1 を Hyper-V ドライバー込みで再構築しました。その手順はざっと以下のとおり。作業中、仮想マシンのゲストがインターネットに接続できるように、レガシー ネットワーク アダプターを追加しておく必要があります。

(※Debian のインストール中にネットワーク ミラーを使用しないように設定してしまった場合は、/etc/apt/sources.list を先に見直してね deb http://ftp.debian.org/debian/ squeeze main と deb-src http://ftp.debian.org/debian/ squeeze main を追加すればいいでしょう。そうしないと ncurses-dev と fakeroot のインストールに失敗しまーす。またー686 カーネルがインストールされた場合は -amd64 を -686 に読み替えて下さーい。)
apt-get update
aptitude update
apt-get install build-essential
 
apt-get install ncurses-dev kernel-package fakeroot
apt-get install linux-headers-2.6.32-5-amd64
apt-get install linux-source-2.6.32
cd /usr/src
wget -c http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.39.1.tar.bz2
bzip2 -d linux-2.6.39.1.tar.bz2
tar xf linux-2.6.39.1.tar
cd linux-2.6.39.1
cp /boot/config-2.6.32-5-amd64 ./.config
make menuconfig
(Device Drivers > Staging Drivers > Microsoft Hyper-V client drivers を選択して保存)
(※ ワイヤレス関連や ISDN、他の Staging ドライバーなど、確実に不要なものはこの時点で削除しちゃいませう。)
make-kpkg clean
fakeroot make-kpkg --initrd --append-to-version=-hyperv kernel_image kernel_headers

(長時間がかかるけど待つ)
cd /usr/src
dpkg -i *.deb
(/usr/src に作成されたカスタム カーネルの 2 つの deb パッケージをインストール)
reboot


カーネル再構築はとてつもなく時間もかかり、ほんとうに面倒です。カーネルに手を加えると、その後のカーネルの更新や、セキュリティ パッチの管理もややこしくなるので、決してお勧めできる方法ではありません。でも、勉強にはなります。

マウス統合(hv_mouse) が追加 !?


例えば、Linux Kernel 2.6.39.1 で make manuconfig を実行する際、モジュールが1つ追加になっていることを発見しました。ホストとゲストのマウス統合を提供する Microsoft Hyper-V mouse driver (hv_mouse)です。少なくとも、2.6.38 までは無かったモジュールです (2.6.38 の Ubuntu 11.04 にはありませんでした)。

マウス統合機能は GPLv2 下で提供されている Citrix Project Satori (inputvsc) が既にありますが、これは Linux IS の vmbus.ko を期待しており、GPLv2 版の hv_vmbus.ko の環境では利用できません。hv_mouse は inputvsc に代わるもののようです。

hv_mouse は自動的にロードされませんが、/lib/modules/2.6.39.1-hyperv/kernel/drivers/staging/hv/hv_mouse.ko はインストールされました。これを自動的にロードするようにするには、/etc/initramfs-tools/modules に hv_mouse の行を追加し、update-inframs -u -k 2.6.39.1-hyperv を実行後、再起動すればよいと思います。ただし、やってみたところ正常に起動できなくなってしまいました。insmod hv_mouse.ko でテストすると、-1 unknown symbol in module となるので、少なくとも Debian 上では動かないようです。残念でした。

データ交換サービス (KVP) が追加 !?


Hyper-V ドライバーのソース コードを覗いてみたところ、もう 1 つ発見しました。hv_kvp.c というコードが追加されています。KVP は、Key Value Pair の略で、日本語では「データ交換サービス」と呼ばれている Hyper-V 統合サービスの機能です。KVP は、ゲストの IP アドレスなどの情報をホストに提供します。詳しくは、以下の投稿をご覧ください。

参考:
Hyper-V Scripting: “実行中”の仮想マシン=ゲスト OS が“実行中”ではない

hv_kvp は単体のモジュールではなく、hv_utils にリンクされるもののようです。実際に動くかどうか、上の投稿で作成した hvvminfo.vbs を使用して試してみました。その結果、一度、「Unknown key: Guest timed out」と答えて、その後、応答しなくなりました。こちらも残念。

とりあえず、ひと安心

マウス連携と KVP の 2 つの新機能は、残念ながら正常な動作を確認できませんでしたが、KVP は Linux IC v2.1 の TODO リストに挙げられていた最初の項目 (Linux IS v2.1 の README を参照)。Linux IC v2.1 の後継について音沙汰が無い中、開発が進んでいることがわかりひと安心です。今後は、Microsoft Connect での Beta や RC の提供ではなく、Linux コミュニティの方で開発が進むのでしょうか?

===============================================
5.    TODO list
===============================================
    5.1    Add Integration Services
          5.1.1    KVP: Allow the Parent to obtain Linux guest information like the Linux guest IP address through a generic key value exchange mechanism.

    5.2    Add support for hot add/remove of storage on the Linux Guest
    5.3    Add support to the integration services for using Jumbo frames for Linux Guests

1 件のコメント:

山市 良(仮名) さんのコメント...

Fedora 15 を Linux Kernel 2.6.39.2 にアップグレードしてみましたが、hv_kvp_daemon はコア ダンプを出力、hv_mouse.ko はハングアップでした。残念。