Im letzten Beitrag zu dem Thema war ich eigentlich schon überzeugt, eine ganz gute Lösung gefunden zu haben.
Aber offensichtlich gab es doch noch Optimierungspotential. 😉
In der Datei /etc/xinetd.d/vncprox liegen die Einträge für openvz- und qemu-VMs jetzt in einem einheitlichen Format vor:
service vnc-10100
{
disable = no
socket_type = stream
protocol = tcp
port = 10100
type = UNLISTED
wait = no
user = root
server = /usr/bin/startvnc.sh
server_args = 100
}
service vnc-10104
{
disable = no
socket_type = stream
protocol = tcp
port = 10104
type = UNLISTED
wait = no
user = root
server = /usr/bin/startvnc.sh
server_args = 104
}
Die /usr/bin/startvnc.sh sieht so aus:
#!/bin/bash
#VMID = uebergebener Parameter
vmid=$1
vmtyp=""
#Pruefen, ob es sich um eine KVM handelt
out=`qm status $vmid 2>&1` #KVM-Status abfragen und Ergebnis auslesen
if [[ "$out" = "status: "* ]]; then #VM ist eine KVM
vmtyp="KVM"
if [ "$out" != "status: running" ]; then #KVM laeuft nicht
ret=`qm start $vmid 2>&1` #KVM starten
fi
fi
#Bei Bedarf noch auf VZ pruefen
if [ "$vmtyp" = "" ]; then #VZ-Status abfragen und Ergebnis auslesen
out=`vzctl status $vmid 2>&1`
if [[ "$out" = *"exist"* ]]; then #VM ist eine VZ
vmtyp="VZ"
if [[ "$out" != *"running"* ]]; then # VZ laeuft nicht
ret=`vzctl start $vmid 2>%1` #VZ starten
fi
fi
fi
if [ "$vmtyp" = "KVM" ]; then
qm vncproxy $vmid #VNC Proxy fuer KVM starten
elif [ "$vmtyp" = "VZ" ]; then
#vncterm fuer Container VMID auf Port 20VMID starten und nicht warten...
vncterm -rfbwait 5 -rfbport 20$vmid -rfbauth /root/.vnc/passwd -c vzctl enter $vmid &
sleep 1 #1 Sekunde warten. Ja, ja...
nc -w 4 localhost 20$vmid #Umleitung auf Port 20VMID erstellen
fi