====== vm-bhyveでお手軽にbhyveを使う ======
===== 試した環境 =====
* FreeBSD 11.1-RELEASE
* FreeBSD 11.2-RELEASE
* FreeBSD 12.0-RELEASE
* vm-bhyve 1.2.3
* vm-bhyve 1.3.0
* ZFS環境
===== 準備 =====
==== インストール ====
packagesからvm-bhyveを入れる
# pkg install vm-bhyve
==== 初期化 ====
vm-bhyve用のZFSファイルシステムを作る。ここにvm-bhyveの管理情報、VM情報、VMのストレージが格納されることになる。
# zfs create zvm/R/vm
rc.confに設定を追加。見てわかる通り、''vm_dir''にvm-bhyve用のFSのパスを指定する。
# echo 'vm_enable="YES"' >> /etc/rc.conf
# echo 'vm_dir="zfs:zvm/R/vm"' >> /etc/rc.conf
vm-bhyveの初期化(最初の1回のみ)
vm init
''vm_dir''のデフォルト構造は以下のようになる
$ find /zvm/R/vm
/zvm/R/vm
/zvm/R/vm/.iso
/zvm/R/vm/.templates
/zvm/R/vm/.config
/zvm/R/vm/.config/system.conf
/zvm/R/vm/.config/null.iso
VMのテンプレートをコピーする
# cp /usr/local/share/examples/vm-bhyve/* /zvm/R/vm/.templates/
==== 仮想スイッチの作成 ====
VMの通信は、VMの仮想NICから仮想スイッチを経由して物理ネットワークに出て行く。bhyveにおける仮想スイッチは、実のところFreeBSD標準の単なるネットワークブリッジである。
=== 一般的な方法 ===
以下ではpublicという名前の仮想スイッチを作成し、物理NICとしてigb0をスイッチに"接続"している。
# vm switch create public
# vm switch add public igb0
=== ゲストからホストにアクセスする場合 ===
VMからホストのサービスにアクセスする必要がある場合(VM上のWindowsからホストのSambaを使う時とか)は、手動でブリッジを作成し仮想スイッチとして登録しなければならない。
ブリッジにIPアドレスを割り当てるようにしないと、ゲスト→ホストのpingは通るのにサービスにアクセス出来ないといった事が起こる。参考:[[https://github.com/churchers/vm-bhyve/issues/146|strange network problem about bridge · Issue #146 · churchers/vm-bhyve · GitHub]]
# ifconfig_igb0="inet 192.168.1.1/24"
ifconfig_bridge0="ether xx:yy:zz:ww:uu:vv addm igb0 addm tap0 up"
ifconfig_bridge0_alias0="inet 192.168.1.1/24"
ifconfig_igb0="up"
ifconfig_tap0="description 'dummy-tap' up"
xx:yy:zz:ww:uu:vvには一意のMACアドレスを指定する。指定しないとランダム値が指定された気がするので、固定しといた方が無難(うろ覚え)。参考:プライベートなMACアドレス→[[https://hondou.homedns.org/pukiwiki/pukiwiki.php?Basic%20MAC%A5%A2%A5%C9%A5%EC%A5%B9#uaf233a3|Basic MACアドレス]]
手動で作ったbridge0をvm-bhyveのpublicな仮想スイッチとして登録。
# echo 'switch_list="public"' >> vm_dir/.config/system.conf'
# echo 'bridge_public="bridge0" >> vm_dir/.config/system.conf'
===== Windows 10を入れてみる =====
テンプレート(-t) windows、仮想ストレージ(-s) 60GB、VM名windowsでVMを作る。
# vm create -t windows -s 60 windows
''vm configure VM名''でVMの設定ファイルを編集できる。必要に応じて編集してくだしあ。自分はCPUとメモリを増量し、↓こんな感じにしますた。
# vm configure windows
uefi="yes"
cpu=2
memory=6G
network0_type="virtio-net"
network0_switch="public"
disk0_type="ahci-hd"
disk0_name="disk0.img"
uuid="7faf487e-ed4f-11e7-9682-XXXXXXXXXXXX"
graphics="yes"
なお、インストールに使うISOイメージはvm_dir/.iso/に入れておく必要がある。
# cp /path/to./windows_install.iso vm_dir/.iso/
インストールモードでVMを起動する
# vm install windows windows_install.iso
vm startとの違いは、指定したISOを自動マウントしてくれる点と、VNCでVMに接続するまで起動を止めてくれる点。
Windowsのインストールが完了したら、vm startで起動する事ができる。
# vm start windows
===== データストアを追加する =====
''vm datastore add''コマンドで、vm_dirとは別のVMストレージ置き場を追加する事ができる。
現状確認
# vm datastore list
NAME TYPE PATH ZFS DATASET
default zfs /zvm/R/vm zvm/R/vm
zhome2/ROOT/vmというZFSファイルシステムをデータストアとして追加してみる。
# vm datastore add mirrorhdd zfs:zhome2/ROOT/vm
追加されたか確認
# vm datastore list
NAME TYPE PATH ZFS DATASET
default zfs /zvm/R/vm zvm/R/vm
mirrorhdd zfs /zhome2/ROOT/vm zhome2/ROOT/vm
追加したデータストアを使う時は、vm createの-dオプションで指定する。
===== vm-bhyveコマンド例集 =====
VMの削除
# vm destroy VM名
データストアの削除。vm-bhyveの管理から削除されるだけでデータは残ったまま。
# vm datastore remove