#!/bin/sh

### BEGIN INIT INFO
# Provides:        migvncproxy
# Required-Start:  $network $remote_fs $syslog
# Required-Stop:   $network $remote_fs $syslog
# Default-Start:   2 3 4 5
# Default-Stop:    1
# Short-Description: Start MiG VNC proxy agent
### END INIT INFO

PATH=/sbin:/bin:/usr/sbin:/usr/bin

. /lib/lsb/init-functions

DAEMON=/opt/proxy/proxyagent.py
PIDFILE=/var/run/proxyagent.pid
LOG="/tmp/migvncproxy.log"
JOBUSER="mig"
MNTNAME="MIG_JOBDIR"

if [ -r /etc/default/migvncproxy ]; then
        . /etc/default/migvncproxy
fi

# Expand user variables
USERID=$(id -u $JOBUSER)
GROUPID=$(id -g $JOBUSER)
JOBMNT="/home/$JOBUSER/job-dir"
MNTLINE="$MNTNAME $JOBMNT vboxsf defaults,uid=$USERID,gid=$GROUPID,noauto 0 0"

touch $LOG

init_vbox_guest() {
	# Make sure VBoxControl from guest additions is available.
	# Install and reboot if not there to get correct drivers.
	# Force noninteractive mode to avoid whiptail promts hanging install.
	# Remove all downloaded packages from cache after build and install.
	export DEBIAN_FRONTEND=noninteractive
	while [ 1 ]; do
		echo "`date` look up VBoxControl and load vbox module" >> $LOG
		VBOXCONTROL=`which VBoxControl` && modprobe vboxguest && \
		               export VBOXCONTROL && return 2>> $LOG
		echo "`date` installing virtualbox guest additions" >> $LOG
		aptitude install -y linux-headers-`uname -r` && \
			aptitude install -y virtualbox-ose-guest-x11 && \
			sync && aptitude autoclean && aptitude clean && \
			break 2>> $LOG
		sleep 30
	done
	# After finishing install we setup manual mount of job dir in VM for
	# access to ordinary and live I/O files and then reboot.
	echo "$MNTLINE" >> /etc/fstab
	reboot
}

start_proxy() {
        init_vbox_guest
	# Delay mount until vbox guest is ready to avoid early mount hangs
	mkdir -p "$JOBMNT"
	mount "$JOBMNT"
	# Read settings and start proxy agent
	job_id=`$VBOXCONTROL -nologo guestproperty get job_id | cut -b 8-`
	proxy_host=`$VBOXCONTROL -nologo guestproperty get proxy_host | cut -b 8-`
	proxy_port=`$VBOXCONTROL -nologo guestproperty get proxy_port | cut -b 8-`
	sed -ie "s/^identifier =.*/identifier = $job_id/g" "/opt/proxy/etc/proxyagent.conf"
	sed -ie "s/^proxy_host =.*/proxy_host = $proxy_host/g" "/opt/proxy/etc/proxyagent.conf"
	sed -ie "s/^proxy_port =.*/proxy_port = $proxy_port/g" "/opt/proxy/etc/proxyagent.conf"
	echo "`date` using guest properties:" >> $LOG
	echo "job_id $job_id , proxy_host $proxy_host , proxy_port $proxy_port" >> $LOG

	echo "`date` starting vnc proxy agent" >> $LOG
	cd /opt/proxy
	/usr/bin/python proxyagent.py
	echo "`date` starting x11vnc" >> $LOG
	/usr/bin/x11vnc -rfbport 5900 -shared -forever -bg -noxdamage
}

stop_proxy() {
	pkill -9 -f x11vnc
	pkill -9 -f proxyagent.py
}

case $1 in
        start)
                log_daemon_msg "Starting MiG VNC proxy agent" "proxyagent.py"
                #start-stop-daemon --start --quiet --oknodo --pidfile $PIDFILE --startas $DAEMON -- -p $PIDFILE
                start_proxy
                status=$?
                log_end_msg $status
                ;;
        stop)
                log_daemon_msg "Stopping MiG VNC proxy agent" "proxyagent.py"
                #start-stop-daemon --stop --quiet --oknodo --pidfile $PIDFILE
                stop_proxy
                log_end_msg $?
                rm -f $PIDFILE
                ;;
        restart|force-reload)
                $0 stop && sleep 2 && $0 start
                ;;
        try-restart)
                if $0 status >/dev/null; then
                        $0 restart
                else
                        exit 0
                fi
                ;;
        reload)
                exit 3
                ;;
        status)
                status_of_proc $DAEMON "MiG VNC proxy agent"
                ;;
        *)
                echo "Usage: $0 {start|stop|restart|try-restart|force-reload|status}"
                exit 2
                ;;
esac

