bhyve freebsd
Load bhyve kernel module.
kldload vmm
Create tap interface for the network device.
ifconfig tap0 create sysctl net.link.tap.up_on_open=1
Create bridge interface, add tap and physical interface to it.
ifconfig bridge0 create ifconfig bridge0 addm tap0 ifconfig bridge0 addm re0 ifconfig bridge0 up
create VM
Create ZFS datasets.
zfs create -o mountpoint=/bhyve zroot/bhyve zfs create zroot/bhyve/media zfs create zroot/bhyve/freebsd
Download FreeBSD image.
cd /bhyve/media fetch https://download.freebsd.org/releases/amd64/amd64/ISO-IMAGES/15.0/FreeBSD-15.0-RELEASE-amd64-bootonly.iso
Create virtual disk for the guest machine. It's a block device (ZFS volume), not directory.
zfs create -V 16G -o volmode=dev zroot/bhyve/freebsd/guest
Create and boot VM.
bhyve -AHP \
-c 4 \
-m 8G \
-s 0:0,hostbridge \
-s 1:0,lpc \
-s 2:0,virtio-net,tap0 \
-s 3:0,virtio-blk,/dev/zvol/zroot/bhyve/freebsd/guest \
-s 4:0,ahci-cd,/bhyve/media/FreeBSD-15.0-RELEASE-amd64-bootonly.iso \
-l bootrom,/usr/local/share/uefi-firmware/BHYVE_UEFI.fd \
-l com1,stdio \
freebsd
connect to VM
It's possible to use null modem device.
kldload nmdm
Replace stdio with /dev/nmdm0A.
You can connect with cu(1) (drop connection by pressing RET ~. RET).
cu -l /dev/nmdm0B
You can also connect with screen(4).
screen /dev/nmdm0B 115200
See currently running VMs.
ls -l /dev/vmm/
Use bhyvectl(8) to control instances.
Start previously created VM (remove CD).
bhyve -AHP \
-c 4 \
-m 8G \
-s 0:0,hostbridge \
-s 1:0,lpc \
-s 2:0,virtio-net,tap0 \
-s 3:0,virtio-blk,/dev/zvol/zroot/bhyve/freebsd/guest \
-l bootrom,/usr/local/share/uefi-firmware/BHYVE_UEFI.fd \
-l com1,/dev/nmdm0A \
freebsd &
There is also an example script for running VM in examples directory.
sh /usr/share/examples/bhyve/vmrun.sh -h
GUI via VNC
Use VNC for GUI.
bhyve -AHP \
-c 4 \
-m 8G \
-s 0:0,hostbridge \
-s 1:0,lpc \
-s 2:0,virtio-net,tap0 \
-s 3:0,virtio-blk,/dev/zvol/zroot/bhyve/freebsd/guest \
-s 4:0,fbuf,tcp=127.0.0.1:5900,w=800,h=600 \
-l bootrom,/usr/local/share/uefi-firmware/BHYVE_UEFI.fd \
-l com1,/dev/nmdm0A \
freebsd &
Connect to 127.0.0.1:5900 with your VNC client.