目次

vm-bhyveでお手軽にbhyveを使う

試した環境

準備

インストール

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'

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