FreeBSD 11.1-RELEASEのbhyveにWindows 10をインストール

bhyve用のBIOSイメージをインストール

# pkg install bhyve-firmware

必要なカーネルモジュールを読み込む

# kldload vmm
# kldload if_tap
# kldload if_bridge

上記モジュールを起動時に読み込むようにする

# echo 'vmm_load="YES"' >> /boot/loader.conf
# echo 'if_tap_load="YES"' >> /boot/loader.conf

仮想CPUのトポロジを設定する(要再起動)。デフォルト設定は1パッケージ1コアとなっており、特にWindows環境に複数個のCPUを割り当てた時にライセンス上の問題が出る。

# echo 'hw.vmm.topology.cores_per_package="12"' >> /boot/loader.conf

tapデバイスアクセス時に自動的に有効化されるようにする

# cat 'net.link.tap.up_on_open=1' >> /etc/sysctl.conf

ネットワークブリッジを作る

igb0が物理マシンの有効なNICで、tap10が仮想マシンに割り当てられる仮想NIC。

# ifconfig tap10 create up
# ifconfig tap10 create up
# ifconfig bridge0 create 0
# ifconfig bridge0 addm igb0 addm tap10

ディスクイメージを用意する

# truncate -s 30G disk0.img
# bhyve -c 2 -m 4G -H -w \
-s 0,hostbridge \
-s 3,ahci-cd,/path/to/WindowsInstall.iso \
-s 4,ahci-hd,./disk0.img \
-s 5,virtio-net,tap10 \
-s 29,fbuf,tcp=0.0.0.0:5902,wait \
-s 30,xhci,tablet \
-s 31,lpc \
-l bootrom,/usr/local/share/uefi-firmware/BHYVE_UEFI.fd \
Windows

引数の意味:

-c 2 CPUを2つ割り当てる
-m 4G メモリを4GB割り当てる
-H
-w 未実装のMSRレジスタへのアクセスを無視する。デバッグ用(付ける必要ないかも?)
-s 3,ahci-cd,/path/to/image PCIスロット3にAHCI接続の光学ドライブを接続
-s 4,ahci-hd,/path/to/image PCIスロット4にAHCI接続のHDDを接続
-s 5,virtio-net,tap10 PCIスロット5に準仮想化NICを接続
-s 29,fbuf,tcp=0.0.0.0:5902,wait PCIスロット29に仮想フレームバッファを用意しポート5902でVNC接続を待ち受ける。waitを付けるとVNCで接続されるまでVMの起動を待つ
-s 30,xhci,table PCIスロット30にUSBのポインティングデバイスを接続
-s 31,lpc PCIスロット31に仮想コンソールを接続。VMのBIOS画面をホストのターミナルにリダイレクト表示できるようになる。
-s bootrom,/path/to/image VMで使うBIOSを設定する
Windows 仮想マシンの名前

このコマンドは何度も打ち込むことになるので、↓こんな感じでシェルスクリプト化しとくと便利。

#!/bin/sh
bhyve -c 2 -m 4G -H -w \
  -s 0,hostbridge \
  -s 4,ahci-hd,/path/to/disk.img \
  -s 5,virtio-net,tap10 \
  -s 29,fbuf,tcp=0.0.0.0:5902 \
  -s 30,xhci,tablet \
  -s 31,lpc \
  -l bootrom,/usr/local/share/uefi-firmware/BHYVE_UEFI.fd \
  ${1} ${2} ${3} ${4} \
  VM_NAME

無事に仮想マシンが起動したら、VNCで接続し、いつも通りWindowsをインストールする。

ただ、bhyveのVNCサーバはかなり相性があるようで、Macの標準VNCビューワ、Chicken of the VNC、RealVNC、TigerVNCの何れも物凄いラグやキー入力が出来なかったりで、まともに使えなかった。うちの環境では、ホストマシンに標準VNCビューワで接続し、その中でTigerVNCビューワでVMにVNCするのが一番まともに動いたっていう…。

リモートデスクトップを有効化するまでの辛抱なので、実用上そこまで問題ではないけども。

  • freebsd/bhyve/freebsd_11.1r_install_win10_on_bhyve.txt
  • 最終更新: 2020-12-03 19:35
  • by Decomo