VMware ESX ServerにFreeBSD 7.1

実は、emulators/open-vm-tools と emulators/open-vm-tools-nox11のportsを今さらながらに知ったので、それを使った形で今、検証中です。検証が済んだら更新しますね。 (2009/01/23)

上の件、やっと書きました。こちらをお読みください。 (2009/07/03)

VMWare ESX Server 3.5に、本来サポートされていないFreeBSD 7.1-RELEASEを突っ込んだので、ちょっと手順をメモ。多分、VMware ESXi Serverにもこの手順は使える。

ただし、この手順が本当に正しいかどうかは私は保証しないし、あくまでVMware ESX ServerやESXi ServerはFreeBSDをゲストOSとして動作させる対象としていないことに注意して欲しい。

この手順の要点は「VMware ESX ServerはFreeBSDを公式サポートしないが、実際はVMware ServerのVMware Toolsを入れるとFreeBSDが使える」ということ。

  1. CD-Rに7.1-RELEASE(i386版)を焼き、VMware Infrastracture Clientのドライブに突っ込んで、仮想マシンに好きな設定でインストールする(なんか、isoイメージの直接利用もできるみたいだけど、やってみたところ少々トラブルがあったので、物理的なドライブを使った方が安定していた感じ)。
  2. VMware Server 2(Linux用)をhttp://www.vmware.com/download/server/からダウンロードする。
  3. tar xvfz VMware-server-2.0.0-122956.i386.tar.gz (バージョン名は例)で、適当な場所でtarballを展開する。
  4. 展開後の vmware-server-distrib/lib/isoimages/freebsd.iso をCD-Rに焼く。
  5. 仮想マシンの/usr/ports/emulators/vmware-guestd6 にこのパッチをあてる(このパッチはports管理者様に提供したので多分そのうち必要なくなるか、新しいportsになるかも?)。具体的にはこれでいい。
    # cd /usr/ports/emulators
    # patch -p0 < パッチファイルのパス/vmware-guestd6.diff
    
  6. このportsをmakeする。具体的には、先ほどfreebsd.isoを焼いたCD-Rをドライブに入れ、VMware Infrastracture Clientからそのドライブを仮想マシンに接続する。
    そして、portsをmakeする際に、以下のメッセージでYを答えると、CD-RからVMware-toolsのdistfilesを読み込んだ上で、コンパイル・インストールが行われる。
    # cd /usr/ports/emulators/vmware-guestd6
    # make install clean
    ===>  Vulnerability check disabled, database not found
    ========================================================================
    Choose "VM" -> "Install VMware Tools..." from VMware Workstation
    menu to connect VM's CD-ROM drive and installation CD image temporary.
    Press "Install" button when a dialog pops up.
    ========================================================================
    This port mounts /dev/acd0 to /mnt.
    Are you ready? [Y/n]: 
    
  7. /etc/rc.confに下記の内容を加える(vmxnetを使わないなら2行目は不要)。
    vmware_guest_kmod_enable="YES"
    vmware_guest_vmxnet_enable="YES"
    vmware_guestd_enable="YES"
    
  8. shutdown -r nowでゲストのFreeBSDを再起動する。
  9. pgrep -lf vmware で vmware-guestdの起動を確認する。
    % pgrep -lf vmware
    620 /usr/local/sbin/vmware-guestd --background /var/run/vmware_guestd.pid --halt-command /sbin/shutdown -p now
    
  10. kldstat でカーネルにvmmemctl.koと、必要ならvmxnet.koが組み込まれていることを確認する。
    % kldstat
    Id Refs Address    Size     Name
     1    6 0xc0400000 97f830   kernel
     2    1 0xc0d80000 6a2c4    acpi.ko
     3    1 0xc257d000 3000     vmmemctl.ko
     4    1 0xc25ab000 4000     vmxnet.ko
    
  11. カーネルのHZを1000から100に減らす。具体的には、ゲストFreeBSDの/boot/loader.confに以下の1行を加え、再起動する。
    kern.hz=100
    
  12. 仮想マシンの仮想NICをIntel PRO/1000互換にした方が安定するという話があるので、その設定法。ちなみにVMware ESXサーバ自体の管理者権限がないとこの設定は出来ないので注意。
    仮想マシンをshutdown -p nowでシャットダウンし、VMware Infrastracture Clientの画面の、 仮想マシンの「概要」で表示される「データストア」から、該当するマシンの*.vmxファイルを手元のマシンにダウンロードする。これをテキストエディタで開く(LF改行のファイルなので、メモ帳では開けないのに注意)。
    もし、その中に
    ethernet0.virtualDev = "...."
    
    のような行があったら(....の部分はlanceなど)、それを
    ethernet0.virtualDev = "e1000"
    
    に書き替える。もしそのような行がなかったら、
    ethernet0.virtualDev = "e1000"
    
    を追加する(ethernet1, ethernet2,... などがある場合はそれらについても同様)。
    なお、vmxnetを使いたい場合は
    ethernet0.virtualDev = "vmxnet"
    
    にすればよい。ちなみに、vmxnetは次のように認識される。
    # dmesg | fgrep vnx0
    vxn0: <VMware PCI Ethernet Adpater> port 0x1480-0x14bf irq 16 at device 19.0 on pci0
    vxn0: [ITHREAD]
    vxn0: WARNING: using obsoleted if_watchdog interface
    vxn0: Ethernet address: 00:50:56:8f:16:79
    vxn0: attached [num_rx_bufs=(100*24) num_tx_bufs=(100*64) driverDataSize=9000]
    # ifconfig vnx0
    vxn0: flags=8802<BROADCAST,SIMPLEX,MULTICAST> metric 0 mtu 1500
    	ether 00:50:56:8f:16:79
    
    ちょっと "WARNING: using obsoleted if_watchdog interface" が気になる。
  13. 書き替えた*.vmxファイルを、再びVMware Infrastracture ClientからVMFS上に書き戻す。
  14. ゲストFreeBSDを起動して、動作確認をする。不具合があれば頑張る。
  15. なお、仮想NICをIntel PRO/1000互換やvmxnetにした場合は、/etc/rc.confを編集し、 PRO/1000互換の場合は
    ifconfig_le0="..."
    
    の行を、
    ifconfig_em0="..."
    
    に、vmxnetを使う場合は
    ifconfig_vxn0="..."
    
    に書き替えればよい。

以上の手順で、サスペンドやスナップショット作成から復帰した時の時刻ずれの解消と、vmxnetデバイスの利用はできることを確認した。実際はこれに加えてメモリ関係の解放操作などを行うvmmemctl機能も、きちんと動作していると思われる。

外からsshでmake buildworldをかけながら、VMotionでノンストップで他のマシン上にFreeBSD仮想マシンがマイグレートするのを見てちょっと感激(笑)。