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は通るのにサービスにアクセス出来ないといった事が起こる。参考: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アドレス→Basic MACアドレス
手動で作ったbridge0をvm-bhyveのpublicな仮想スイッチとして登録。
# echo 'switch_list="public"' >> vm_dir/.config/system.conf' # echo 'bridge_public="bridge0" >> vm_dir/.config/system.conf'
テンプレート(-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の削除
# vm destroy VM名
データストアの削除。vm-bhyveの管理から削除されるだけでデータは残ったまま。
# vm datastore remove