#!/bin/zsh
export cmd=$1
export vm=$2
export sessid=$3
function start
{
export host=`cat /home/vmuser/$vm/$vm.vars|grep -w host|head -n 1|cut -f 2 -d =`
export port=`cat /home/vmuser/$vm/$vm.vars|grep -w port|head -n 1|cut -f 2 -d =`
export sessport=$(($port+$sessid))
while true;do
upnpc -r $(($sessport+5900)) tcp&
upnpc -r $(($sessport+5900)) udp&
sleep 1
done&
mkdir -p /home/vmuser/$vm\_$sessid
cp /home/vmuser/$vm/$vm.vars /home/vmuser/$vm\_$sessid/$vm\_$sessid.vars
sed -i "s|port=$port|port=$sessport|g" /home/vmuser/$vm\_$sessid/$vm\_$sessid.vars
sed -i "s|name=$vm|name=$vm\_$sessid|g" /home/vmuser/$vm\_$sessid/$vm\_$sessid.vars
if [ -e /home/vmuser/$vm/$vm.nvram ];then
ln -s /home/vmuser/$vm/$vm.nvram /home/vmuser/$vm\_$sessid/$vm\_$sessid.nvram
fi
if [ -f /home/vmuser/$vm\_$sessid/$vm\_$sessid.nvram ];then
sleep .01
else
qemu-img create /home/vmuser/$vm\_$sessid/$vm\_$sessid.nvram 128K
fi
if [ -f /home/vmuser/$vm\_$sessid/$vm\_$sessid.rom ];then
sleep .01
else
ln -s /home/vmuser/$vm/$vm.rom /home/vmuser/$vm\_$sessid/$vm\_$sessid.rom
fi
if [ -e /home/vmuser/$vm/$vm.qcow2 ];then
ln -s /home/vmuser/$vm/$vm.qcow2 /home/vmuser/$vm\_$sessid/$vm\_$sessid.qcow2
fi
if [ -e /home/vmuser/$vm/acpi ];then
ln -s /home/vmuser/$vm/acpi /home/vmuser/$vm\_$sessid/acpi
fi
if [ -f /home/vmuser/$vm\_$sessid/$vm\_$sessid.qcow2 ];then
sleep .01
else
export size=`qemu-img info /home/vmuser/$vm/$vm.qcow2|grep -w "virtual size"|cut -f 2 -d \(|cut -f 1 -d \  `
qemu-img create /home/vmuser/$vm\_$sessid/$vm\_$sessid.qcow2 -f qcow2 $size"b"
fi
chown -R vmuser:vmuser /home/vmuser/$vm\_$sessid
echo $(($sessport+5900)) >> /usr/share/webapps/vmlab/$vm/sessid.$vm
chown -R http:http /usr/share/webapps/vmlab/$vm/sessid.$vm
while true;do
if netstat -an|grep -w $sessport;then
sleep .25
else
systemctl start vm@$vm\_$sessid
sleep .25
fi
if netstat -an|grep -w $(($sessport+5900));then
sleep .25
else
systemctl start vmws@$vm\_$sessid
sleep .25
fi
done
}
function stop
{
export host=`cat /home/vmuser/$vm/$vm.vars|grep -w host|head -n 1|cut -f 2 -d =`
export port=`cat /home/vmuser/$vm/$vm.vars|grep -w port|head -n 1|cut -f 2 -d =`
export sessport=$(($port+$sessid))
export vmcpids=`pgrep -af vmc|grep -w start|grep -w $vm|grep -w $sessid|cut -f 1 -d \  `
for vp in `echo $vmcpids`;do
kill -9 $vp
done
systemctl --no-block stop vm@$vm\_$sessid
export qpids=`pgrep -af qemu|grep -w $vm\_$sessid.qcow2|cut -f 1 -d \  `
for qp in `echo -n $qpids`;do
kill -9 $qp
done
systemctl --no-block stop vmws@$vm\_$sessid
export wspids=`pgrep -af websockify|grep -w $sessport|cut -f 1 -d \  `
for wp in `echo $wspids`;do
kill -9 $wp
done
sed -i "/$(($sessport+5900))/d" /usr/share/webapps/vmlab/$vm/sessid.$vm
if wc -l /usr/share/webapps/vmlab/$vm/sessid.$vm|grep -qw 0;then
rm /usr/share/webapps/vmlab/$vm/sessid.$vm
fi
rm -rf /home/vmuser/$vm\_$sessid
}
case "$cmd" in
start)
start $@
;;
stop)
stop $@
;;
esac
