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:
- das Anlegen von virtuellen Festplatten
- die Verwendung von ISO-Images
- das Starten einer UEFI basierten virtuellen Maschine
- die VNC basierte Interaktion mit der virtuellen Maschine und
- 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:
- Nach erfolgreicher Verbindung über einen VNC-Client wird das Installationsmenü angezeigt und die Installation von Debian kann gestartet werden:
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.