Shell-Skripte einsetzen

Das Starten und Verwalten von virtuellen Maschinen lässt sich vereinfachen und automatisieren, indem Shell-Skripte eingesetzt werden. Durch geskriptete VM-Anwendungen lassen sich Konfigurationen persistent speichern, die auch nach einem Neustart wieder verwendbar sind. In Kombination mit weiteren Anweisungen und Shell-Skripten lassen sich so beliebige VM-Anwendungen unter TwinCAT/BSD einrichten.

Das folgende Bespielskript zeigt den Grundaufbau einer geskripteten VM-Anwendung:

# root permissions are required to run VMs
if test "$(id -u)" -ne 0; then
printf "%s must be run as root\n" "${0##*/}"
exit 1
fi

# Default values for VM configuration
vm_name="samplevm"

# Ensure that kernel modul vmm.ko is loaded
kldload -n vmm.ko

while true; do
# destroy former VM instance to ensure we start
# with a clean VM configuration
if test -e "/dev/vmm/${vm_name}"; then
bhyvectl --vm="${vm_name}" --destroy
fi

# start a simple UEFI based VM instance
_bhyve_rc=0
bhyve \
-A -H -P \
-c sockets=1,cores=1,threads=1 \
-m 1G \
-s 0:0,hostbridge \
-l bootrom,/usr/local/share/uefi-firmware/BHYVE_BHF_UEFI.fd \
-l com1,stdio \
-s 31:0,lpc \
"${vm_name}"
_bhyve_rc=$?

# according to bhyve man pages the return codes indicates
# how the VM was terminated:
# 0: rebooted
# 1: powered off
# ...
# 4: exited due to an error
if test "${_bhyve_rc}" -ne 0; then
printf "bhyve exited with return code: %s\n" "${_bhyve_rc}"
break
fi
printf "Restarting %s\n" "${vm_name}"

done

Das Beispielskript kann in eine Textdatei auf dem TwinCAT/BSD-Host gespeichert und ausgeführt werden. Alternativ kann das Beispielskript auf GitHub-Repository unter https://github.com/Beckhoff/TCBSD_Hypervisor_Samples heruntergeladen und auf den TwinCAT/BSD-Host kopiert werden.

Gehen Sie dafür wie folgt vor:

1. Laden Sie sich das Beispielskript unter https://github.com/Beckhoff/TCBSD_Hypervisor_Samples herunter.
2. Kopieren Sie den gesamten Ordner auf den TwinCAT/BSD-Host in das Verzeichnis /usr/home indem Sie beispielsweise das Programm WinSCP verwenden.
Shell-Skripte einsetzen 1:
3. Navigieren Sie mit cd /usr/home/TCBSD_Hypervisor_Samples-main/basic_vm_script in das neue Verzeichnis.
4. Geben Sie den Befehl doas make ein, um das Beispielskript samplevm zu installieren. Zusätzlich zur Installation werden die Dateiberechtigungen eingestellt und damit das Beispielskript ausführbar gemacht. Ohne den Befehl doas make müssen die Dateiberechtigungen manuell eingestellt werden, um das Beispielskript ausführen zu können.
5. Geben Sie abschließend den Befehl doas samplevm ein, um das Beispielskript auszuführen.
Die virtuelle Maschine bootet in die UEFI-Shell, die auf der Kommandozeile ausgegeben wird.
UEFI Interactive Shell v2.2
EDK II
UEFI v2.70 (BHYVE, 0x00010000)
map: No mapping found.
Press ESC in 1 seconds to skip startup.nsh or any other key to continue.
Shell>

Sie können zur Kommandozeile zurückkehren, indem Sie die virtuelle Maschine mit dem Befehl reset -s herunterfahren. Um virtuelle Maschinen als Systemservice unter TwinCAT/BSD zu starten, können Shell-Skripte in Kombination mit dem rc-Framework eingesetzt werden und damit virtuelle Maschinen als Systemservice verwaltet oder beim Systemstart automatisch gestartet werden (siehe: Autostart von Shell-Skripten).