Table of Contents

bhyve Anwendung

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.

amd64 Architektur mit bhyveload

FreeBSD Gast

Um einen neuen Gast zu erstellen, sind einige extra Schritt notwendig.

  1. Anlegen der Datei, die als Festplatte verwendet werden soll.
    truncate -s 64G /var/vm/bsd1vm/disk0.img
  2. Anlegen des tap-Interfaces, dass als Backend für die Netzwerkschnittstelle verwendet werden soll.
    ifconfig tap0 create
  3. Boot ROM starten, die das Gast-OS laden kann. Bei einem FreeBSD-Gast geht das mit bhyveload.
    /usr/sbin/bhyveload -m 2G -d /var/vm/bsd1vm/disk0.img -c /dev/nmdm-bsd1vmloaderA bsd1vm
  4. VM mit bhyve starten.
    /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.

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

arm64 Architektur

FreeBSD Gast

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