Gastbetriebssystem am Beispiel von Debian Linux installieren

Im folgenden Beispiel soll Debian in einer virtuellen Maschine unter TwinCAT/BSD installiert werden. Als Vorlage können die Shell-Skripte aus dem GitHub-Repository https://github.com/Beckhoff/TCBSD_Hypervisor_Samples/tree/main/vm_autostart verwendet werden.

vm_autostart
├── Makefile
├── rc.d
│   └── samplevm
└── samplevm

Für die Debian Installation bedarf es einer erweiterten virtuellen Maschinen-Konfiguration. Der bhyve Aufruf innerhalb des samplevm Shell-Skripts kann dementsprechend angepasst werden:

bhyve \
-c sockets=1,cores=1,threads=1 \
-m 2G \
-l bootrom,/usr/local/share/uefi-firmware/BHYVE_BHF_UEFI.fd,/vms/samplevm/EFI_VARS.fd,fwcfg=qemu \
-s 0,hostbridge \
-s 2,fbuf,rfb=0.0.0.0:5900,w=1280,h=1024 \
-s 3,xhci,tablet \
-s 10,nvme,/dev/zvol/zroot/vms/samplevm/disk0 \
-s 15,ahci-cd,/vms/debian-installer.iso,ro \
-s 20,virtio-net,tap0 \
-s 31,lpc \
-A -H -P -w \
"${vm_name}"

Der bhyve Aufruf impliziert die folgenden Konfigurationsschritte:

  1. das Anlegen von virtuellen Festplatten
  2. die Verwendung von ISO-Images
  3. das Starten einer UEFI basierten virtuellen Maschine
  4. die VNC basierte Interaktion mit der virtuellen Maschine und
  5. die Konfiguration eines Bridged Netzwerks

Gehen Sie für die Installation wie folgt vor:

1. Wie im Kapitel ZFS-Datasets als Speicherort für virtuelle Maschinen beschrieben, wird zuerst ein ZFS-Dataset für die virtuelle Maschine angelegt.
doas zfs create -p -o mountpoint=/vms/samplevm zroot/vms/samplevm
2. Für die Installation des Betriebssystems soll die Debian “network install” CD-ISO verwendet werden. Die ISO Datei kann mit fetch(8), wie im Kapitel Verwendung von Installationsmedien (ISO-Images) beschrieben, heruntergeladen und später als Datenträger eines ahci-hd Geräts dem bhyve Aufruf übergeben werden:
doas fetch -o /vms/debian-installer.iso https://cdimage.debian.org/mirror/cdimage/archive/12.0.0/amd64/iso-cd/debian-12.0.0-amd64-netinst.iso
3. Um Debian auf einer virtuellen Festplatte installieren zu können, wird mit folgendem Kommando ein ZFS-Volume angelegt, welches als Backend für das emulierte nvme Gerät im oberen bhyve Aufruf verwendet wird:
doas zfs create -V 20G zroot/vms/samplevm/disk0
4. Debian nutzt EFI-Variablen, um Informationen über bootfähige Datenträger abzuspeichern. Daher sollte für die virtuelle Maschine eine Kopie der Datei /usr/local/share/uefi-firmware/BHYVE_BHF_UEFI_VARS.fd auf dem ZFS-Dataset abgelegt werden:
doas cp /usr/local/share/uefi-firmware/BHYVE_BHF_UEFI_VARS.fd /vms/samplevm/EFI_VARS.fd
5. Für die Debian-Installation benötigt die virtuelle Maschine eine Internetverbindung. Hierfür wird auf dem TwinCAT/BSD-Host ein Bridged-Netzwerk angelegt an das die virtuelle Maschine über eine virtio-net basierte Netzwerkschnittstelle und der tap0 Instanz verbunden wird.
6. Zudem soll die virtuelle Maschine über eine VNC-Verbindung bedient werden können, um beim ersten Start die grafische Installation des Debian-Installers nutzen zu können. Das samplevm Shell-Skript konfiguriert daher die Paketfilter-Regeln, um eingehende TCP-Verbindungen auf Port 5900 des TwinCAT/BSD-Hosts zuzulassen.
7. Mit dem angepassten bhyve(8) Aufruf innerhalb des samplevm Shell-Skripts, kann die virtuelle Maschine wie folgt gestartet werden:
doas sh samplevm start 
8. Der gestartet bhyve(8) Prozess erzeugt anschließend folgende Ausgabe auf der Kommandozeile:
fbuf frame buffer base: 0x881e00000 [sz 16777216]
9. Nun kann ein VNC-Client, wie beispielsweise Ultra-VNC verwendet werden, um sich mit der virtuellen Maschine zu verbinden:
Gastbetriebssystem am Beispiel von Debian Linux installieren 1:
Nach erfolgreicher Verbindung über einen VNC-Client wird das Installationsmenü angezeigt und die Installation von Debian kann gestartet werden:
Gastbetriebssystem am Beispiel von Debian Linux installieren 2:
Sobald die Installation von Debian abgeschlossen ist, wird die virtuelle Maschine neu gestartet. Dadurch bricht die VNC-Verbindung ab. Nach einem erneuten Verbindungsaufbau kann das Betriebssystem Debian in der virtuellen Maschine genutzt werden.