In bhyve Management wird die Verwaltung von VMs mit dem vm Tool beschrieben. Hier geht es darum bhyve ohne dem vm Tool zu verwenden.
bhyve wird üblicherweise mit einer boot ROM (oder bhyveload) verwendet, die das Gast-Betriebssystem laden kann.
Um einen neuen Gast zu erstellen, sind einige extra Schritt notwendig.
truncate -s 64G /var/vm/bsd1vm/disk0.img
ifconfig tap0 create
/usr/sbin/bhyveload -m 2G -d /var/vm/bsd1vm/disk0.img -c /dev/nmdm-bsd1vmloaderA bsd1vm
/usr/sbin/bhyve -c 4 -m 2G -A -H -P -s 0:0,hostbridge -s 1:0,virtio-net,tap0 -s 2:0,virtio-blk,/var/vm/bsd1vm/disk0.img -s 31,lpc -l com1,/dev/nmdm-bsd1vmA -D bsd1vm
Bei dem bhyve Kommando gibt es zahlreiche Optionen.
-s 3,ahci-cd,/path/to/uefi-OS-install.iso
hinzugefügt werden. Weitere Details enthält die man-Page: https://man.freebsd.org/cgi/man.cgi?query=bhyve
Nachdem erst bhyveload und dann bhyve gestartet wurden, erhält man Zugriff auf die Konsole über die /dev/nmdm-bsd1vm*. Zugriff auf die Ausgabe des Bootloaders:
sudo cu -s 115200 -l /dev/nmdm-bsd1vmloaderB
Zugriff auf die Ausgabe der VM nach dem Bootloader:
sudo cu -s 115200 -l /dev/nmdm-bsd1vmB
Sollte sich die VM nicht einmal nicht richtig ausschalten, kann nachgeholfen werden mit:
bhyvectl --vm=bsd1vm --destroy
Unter arm64 scheint es bhyveload nicht zu geben. Es wird also eine boot ROM benötigt. Aktuell gibt es nur die experimentelle boot ROM u-boot-bhyve-arm64, die erst installiert werden muss.
pkg install u-boot-bhyve-arm64
Die boot ROM startet immer von dem ersten VirtIO block device. Eine Installation von CD ist also nicht möglich. Als Alternative gibt es die Möglichkeit ein VM Image von freebsd.org herunterzuladen. Das ist eine Festplatten-Image auf dem FreeBSD bereits installiert ist. Da das recht klein ist, sollte es anschließend mit truncate vergrößert werden.
mkdir -p /var/vm/ampere128vm cd /var/vm/ampere128vm fetch https://download.freebsd.org/snapshots/VM-IMAGES/16.0-CURRENT/aarch64/Latest/FreeBSD-16.0-CURRENT-arm64-aarch64-ufs.raw.xz unxz FreeBSD-16.0-CURRENT-arm64-aarch64-ufs.raw.xz truncate -s 64GB FreeBSD-16.0-CURRENT-arm64-aarch64-ufs.raw
Nun kann die VM mit bhyve gestartet werden.
/usr/sbin/bhyve -c 32 -m 4G -s 0:0,hostbridge -o bootrom=/usr/local/share/u-boot/u-boot-bhyve-arm64/u-boot.bin -s 1:0,virtio-blk,/var/vm/ampere128vm/FreeBSD-16.0-CURRENT-arm64-aarch64-ufs.raw -s 2:0,virtio-net,tap0 -o console=stdio ampere128vm
Der Parameter
-o console=stdio
sorgt dafür, dass die Ausgabe der VM direkt im aktuellen Terminal erfolgt. Alternativ kann die Ausgabe mit
-o console=/dev/nmdm-ampere128vmA
auf ein nmdm Gerät geleitet werden. Zuvor muss eventl. das nmdm Modul geladen werden mit
kldload nmdm
Nach dem Starten der VM kann man die Konsole anzeigen über
sudo cu -s 115200 -l /dev/nmdm-ampere128vmB