2014/01/20

Windows Server 2012 R2 Hyper-V and FreeBSD 10.0-RELEASE & hv-kvp-1.0

FreeBSD 10 正式版 (10.0-RELEASE) が出ました。FreeBSD 10 は、Hyper-V 対応の BSD Integration Services (BIS) をビルトインしています。Windows Server 2012 R2 Hyper-V の仮想マシンへのインストール手順&ネットワーク周りの Tips など...

(PR) その前に、Hyper-V における Linux ゲストの対応状況、Linux Integration Service (LIS) や BIS のコンポーネント (hv_vmbus、hv_storvsc、hv_netvsc、hv_kvp_daemon など) の機能など、詳しく知りたい方は、1/30 発売の『Windows Server 2012 R2 テクノロジ入門』→をお勧めします。BSD はまだ登場したばかり。LIS に比べると機能が少ないですが、LIS について知っていると理解が早いと思います。(/PR)

FreeBSD 10.0-RELEASE amd64 の場合...


DVD の ISO イメージ (FreeBSD-10.0-RELEASE-amd64-dvd1.iso) を使用して Hyper-V 仮想マシンを起動し、 何も考えずにインストールしましょう。


仮想マシンに FreeBSD 1.0.0 をインストールするだけで、ビルトインの Hyper-V ドライバーが有効になります。ビルトインの Hyper-V ドライバーは、ストレージ VSC (SCSI および IDE)、ネットワーク VSC、シャットダウン連携、時刻同期、ハートビートを提供します。

ちなみに、ブート デバイスは /dev/da、ネットワーク アダプターは hn0 として認識されます。Hyper-V のドライバーは次の場所にあります。

/boot/kernel/hv_vmbus.ko
/boot/kernel/hv_utils.ko
/boot/kernel/hv_storvsc.ko
/boot/kernel/hv_netvsc.ko
/boot/kernel/hv_ata_pci_disengage.ko

FreeBSD で KVP データ交換サービスの機能を使用したい場合は、追加の手順を実行して、KVP デーモン (hv_kvp_daemon) を導入する必要があります。KVP デーモンは、FreeBSD 10.0 ports for Hyper-V が提供するプリ ビルド パッケージ (hv-kvp) またはソースを使用してインストールできます。プリ ビルド パッケージからインストールするには、こんな感じで。

pkg install curl   (curl をまだインストールしていない場合)
curl -L -o hv-kvp-x64.txz https://github.com/FreeBSDonHyper-V/Hyperv-Ports/raw/hyperv-ic-master/BIS-1.0/FreeBSD-10.0/bin/hv-kvp-x64.txz 
pkg add hv-kvp-x64.txz
reboot

再起動後、hv_kvp_daemon が開始され、詳細なゲスト情報を取得できるようになります。また、KVP IP インジェクションの機能 (Hyper-V レプリカでフェールオーバーの TCP/IP) も利用できるようになるはずですが...   Windows Server 2012 R2 Hyper-V の Hyper-V レプリカで試したところ、プライマリ仮想マシン側が DHCP の場合も、静的 IP の場合も、フェールオーバーの TCP/IP は機能しませんでいした。(2014/1/24 追記)




ちなみに、hv-kvp をインストールすると、以下のものが追加されました。

/boot/kernel/hv_kvp.ko
/usr/sbin/hv_kvp_daemon
/etc/rc.d/hv_kvpd
/usr/local/hyperv/scripts/hv_get_dhcp_info
/usr/local/hyperv/scripts/hv_get_dns_info
/usr/local/hyperv/scripts/hv_set_ifconfig


IntegrationServicesVersion は BSD Pre-Release version なのが気になりますが、とりあえず気にしないでおきます。(1/28 追記: BSD Pre-Release version は hv_kvp_daemon.c にハード コーディングされてました。)

ネットワーク hn0 を DHCP 構成にした場合、DHCP で正しく構成されず、ネットワークが不到達の状態になりました。


この問題は /etc/rc.conf に次の 1 行を追加することで回避できました。

synchronous_dhclient="YES"

(または ifconfig_hn0="SYNCDHCP" でもいいかも)

もう 1 つ気になることが。RC5 で試したとき (Windows Server 2012 R2 Hyper-V and FreeBSD 10 (RC5) & hv-kvp-1.0 ) 、KVP デーモン (hv_kvp_daemon or hv_kvp.ko) が異常終了するという問題に遭遇しましたが、どうやら IP アドレスを静的に割り当てた場合、そうなるようです。プリビルド パッケージ (hv-kvp-i386.txz) が古いのかなぁ? 静的 IP を使用する場合は、仕方が無いので hv-kvp をアンインストール。

pkg delete hv-kvp-1.0


(↑静的 IP 設定の場合、hv_kvp_daemon or hv_kvp.ko が異常終了)

もしかしてだけど... Windows Server 2012 Hyper-V だと、案外うまくいったりして? こちら (https://wiki.freebsd.org/HyperV) には、、"Futhermore, please note that these ports have only been tested on Windows Server 2012 based Hyper-V servers. You may see issues while trying to run these ports on other Windows Server releases."って書いてますし。
(↑同じでした。hv-kvp をソースからビルドしても状況変わらず)

2014/02/25 追記) 更新された hv-kvp-x64.txz で解消されました。
Windows Server 2012 R2 Hyper-V and FreeBSD 10.0-RELEASE & hv-kvp-1.0 (再び) 
 
FreeBSD 10.0-RELEASE i386 の場合...

DVD の ISO イメージ (FreeBSD-10.0-RELEASE-i386-dvd1.iso) を使用して Hyper-V 仮想マシンを起動し、 何も考えずにインストールしましょう。しかし、i386 版は既定では Hyper-V ドライバーが読み込まれません。そのため、インストール中に統合タイプのネットワークは検出されません。

インストールが完了したら、/boot/loader.conf に次のように記述し、再起動します。こちら (https://wiki.freebsd.org/HyperV) には、/etf/fstab のデバイス名を /dev/ada0p2 や /dev/ada0p3 から  /dev/gptid/UUID  の形式に変更しろと書いてますが、書き換えなくても台ジョブみたい (書き換えたほうがよいんでしょうけど)。
再起動後、Hyper-V ドライバーが読み込まれます。ネットワークを設定するには、bsdconfig を実行してください。

KVP デーモンをプリ ビルド パッケージからインストールするには、こんな感じで。

pkg install curl   (← curl をまだインストールしていない場合)
curl -L -o hv-kvp-i386.txz https://github.com/FreeBSDonHyper-V/Hyperv-Ports/raw/hyperv-ic-master/BIS-1.0/FreeBSD-10.0/bin/hv-kvp-i386.txz 
pkg add hv-kvp-i386.txz
reboot

DHCP 有効時のネットワーク問題、および静的 IP 設定時のhv_kvp_daemon の異常終了の問題は、amd64 と同じ。

1 件のコメント:

山市 良 さんのコメント...

Microsoft Azure IaaSで動かす場合は、さらに Azure Linux エージェントも必要。→ Azure で FreeBSD を実行する (http://blogs.msdn.com/b/windowsazurej/archive/2014/05/30/blog-running-freebsd-in-azure.aspx)