===== Install a FreeBSD13 Virtual Machine (VM) via bhyve =====
Install a %%FreeBSD%% VM is relatively easier now in a %%FreeBSD%% host via the bhyve hypervisor. The following is my simple list of actions to create a new %%FreeBSD%% 13 VM. My %%FreeBSD%% host (running 13.2-RELEASE-p4) is called //n1//.
==== necessary VM tools ====
cc@n1:/ % sudo pkg install vm-bhyve // simple vm(8) management
cc@n1:/ % sudo zfs create zroot/bhyve // parent data pool for VMs
cc@n1:/ % sudo zfs create zroot/bhyve/.templates // used to store VM configs
==== passthru device ====
Find the pci device (WiFi 6 wireless interface) on host to pass through the VM. The bus/slot/function is for this devices is 2/0/0.
cc@n1:~ % sudo pciconf -lv
...
iwlwifi0@pci0:2:0:0: class=0x028000 rev=0x1a hdr=0x00 vendor=0x8086 device=0x2723 subvendor=0x8086 subdevice=0x0084
vendor = 'Intel Corporation'
device = 'Wi-Fi 6 AX200'
class = network
...
==== /boot/loader.conf ====
vmm_load="YES"
nmdm_load="YES"
if_bridge_load="YES"
if_tap_load="YES"
# the passthru pci device
pptdevs="2/0/0"
# default AMD-Vi passthrough support is disabled, enable it
hw.vmm.amdvi.enable="1"
==== /etc/sysctl.conf ====
net.link.tap.up_on_open=1
==== /etc/rc.conf ====
# needed for virtualization support
vm_enable="YES"
vm_dir="zfs:zroot/bhyve"
==== reboot ====
==== my FreeBSD VM config file ====
This file is used as the config file for a new FreeBSD VM.
cc@n1:~ % cat /zroot/bhyve/.templates/fbsd.conf
loader="bhyveload"
cpu=4
cpu_sockets=1
cpu_cores=4
memory=4G
# put up to 8 disks on a single ahci controller. This avoids the creation of
# a new “controller” on a new “PCIe slot” for each drive added to the guest.
ahci_device_limit="8"
# e1000 works out-of-the-box, but virtio-net performs better. Virtio support
# is built in on FreeBSD and Linux guests, but Windows guests will need
# to have virtio drivers manually installed.
#network0_type="e1000"
network0_type="virtio-net"
network0_switch="public"
# bhyve/nvme storage is considerably faster than bhyve/virtio-blk storage.
#disk0_type="virtio-blk"
disk0_type="nvme"
disk0_name="disk0"
disk0_dev="sparse-zvol"
# passing of host PCI devices to a virtual machine for its exclusive use of them
passthru0="2/0/0"
==== setup the net bridge and create a new VM ====
cc@n1:/zroot/bhyve % sudo vm init
cc@n1:/zroot/bhyve % ifconfig | grep RUNNING
re0: flags=8843 metric 0 mtu 1500
lo0: flags=8049 metric 0 mtu 16384
cc@n1:/zroot/bhyve % sudo vm switch create public
cc@n1:/zroot/bhyve % sudo vm switch add public re0
cc@n1:/zroot/bhyve % sudo vm create -t fbsd -s 100G n1_iwl_vm
cc@n1:/zroot/bhyve % sudo vm install n1_iwl_vm ./FreeBSD-13.2-RELEASE-amd64-disc1.iso
Starting n1_iwl_vm
* found guest in /zroot/bhyve/n1_iwl_vm
* booting...
Use the "vm console" command to access the VM and finish the installation process.
cc@n1:~ % sudo vm console n1_iwl_vm
...
==== snapshot ====
cc@n1:/zroot/bhyve % sudo vm snapshot n1_iwl_vm@snapshot1 // create a snapshot of n1_iwl_vm
cc@n1:/zroot/bhyve % sudo vm rollback n1_iwl_vm@snapshot1 // restore to the snapshot of n1_iwl_vm