====== FreeBSD 11.1-RELEASEのbhyveにWindows 10をインストール ======
===== bhyveの準備 =====
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 | 仮想CPUのアイドル時に物理CPUをホールトする |
| -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をインストール =====
無事に仮想マシンが起動したら、VNCで接続し、いつも通りWindowsをインストールする。
ただ、bhyveのVNCサーバはかなり相性があるようで、Macの標準VNCビューワ、Chicken of the VNC、RealVNC、TigerVNCの何れも物凄いラグやキー入力が出来なかったりで、まともに使えなかった。うちの環境では、ホストマシンに標準VNCビューワで接続し、その中でTigerVNCビューワでVMにVNCするのが一番まともに動いたっていう…。
{{ :freebsd:bhyve:bhyve_connect_to_vm_via_vnc.jpg |}}
リモートデスクトップを有効化するまでの辛抱なので、実用上そこまで問題ではないけども。
===== 参考サイト =====
* [[https://www.freebsd.org/cgi/man.cgi?query=bhyve&sektion=8|bhyve(8)]]
* [[https://www.ateamsystems.com/tech-blog/howto-windows-10-bhyve-w-freebsd-11/|HOWTO: Windows 10 Under Bhyve /w FreeBSD 11 - A-Team Systems]]
* [[http://www.mousou.org/node/412|FreeBSD 11.0-RELEASE の bhyve に Windows 7 をインストールする。 | 妄想日記 by 妄想エンジン]]
* [[https://wiki.freebsd.org/bhyve/UEFI|bhyve/UEFI - FreeBSD Wiki]]
* [[http://pr1ntf.xyz/windows10.html|Installing Windows 10 Under the bhyve Hypervisor.]]