#!/bin/bash

# Copyright 2012 Severalnines AB
#
# MODIFY THE BELOW TO SUIT YOU ENV:
JOBID=0
function init
{    
    FILES=`ls /etc/cmon.cnf 2>&1`
    FILES2=`ls /etc/cmon.d/*.cnf 2>&1`
    FILES="$FILES $FILES2"
    configfile=""
    for f in $FILES
    do
	X=`grep -l cluster_id=${CLUSTER_ID} $f 2>&1 `
	if [ $? -eq 0 ]; then
            source $f
            configfile=$f
        fi
    done

    if [ -z "$configfile" ]; then
        echo "No matching configuration file found having cluster_id=${CLUSTER_ID}"
        exit 1
    fi

    source $configfile;

    CLUSTER_ID=$cluster_id
    CMON_DB_PORT=$mysql_port
    CLUSTER_TYPE=$type
    CMON_USER=cmon
    CMON_PASSWORD=$mysql_password
    CMON_DB_HOST=$mysql_hostname
    CMON_DB_DB=cmon
    BACKUP_LOGFILE=/tmp/s9s_sw_update_${CLUSTER_ID}.log
    LOCKFILE="/tmp/s9s_sw_update_${CLUSTER_ID}.lock"
### NO MODS BELOW UNLESS YOU KNOW WHAT YOU DO:
    
    OSUSER=$USER
    if [ "$USER" != "root" ]; then
	echo "must be executed as 'root' or with 'sudo'"
	exit 1
    fi
    MYSQL_BIN=$mysql_basedir/bin//mysql
    MYSQL_BIN2=$mysql_bindir/mysql 
    if ! test -f $MYSQL_BIN; then
	if ! test -f $MYSQL_BIN2; then
	    echo "Could not find mysql client binary"
	    echo "Change MYSQL_BIN in beginning of the scipt"
	    exit 1
	fi
	MYSQL_BIN=$MYSQL_BIN2
    fi
    if ! test -f $MYSQL_BIN; then
	echo "Could not find mysql client binary"
	log_job_message "Could not find mysql client binary" 1
	log_job 'FAILED' 's9s_sw_update failed' 1
	exit 1
    fi
    WWWROOT=`$MYSQL_BIN -N -B -A --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT -e "select value from cmon_configuration where param='WWWROOT' AND cid=$CLUSTER_ID"`

}






function log_job_message
{    
    MSG=$1
    EXIT_CODE=$2
    QUERY="INSERT INTO cmon_job_message(cid, JOBID,message,exit_code,report_ts) VALUES($CLUSTER_ID,$JOBID,\"$MSG\",$EXIT_CODE,now())"
    if [ $JOBID -ne 0 ]; then 
	$MYSQL_BIN  -B -N  --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT  -e "$QUERY" 2>&1 >/tmp/err.log
    else
	if [ $EXIT_CODE -eq 0 ]; then
   	   echo "$MSG"
	else
   	   echo "Failed: $MSG"
	fi
    fi
}

function create_job
{    
    MSG=$1
    STATUS=$2
    EXIT_CODE=$3
    QUERY="INSERT INTO cmon_job(cid, JOBID, jobspec,status,status_txt,exit_code,report_ts) VALUES($CLUSTER_ID,$JOBID,'internal','$STATUS',\"$MSG\",$EXIT_CODE,now())"
    echo $QUERY >> /tmp/queries
    if [ $JOBID -ne 0 ]; then 
	$MYSQL_BIN  -B -N  --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT  -e "$QUERY" 2>&1 >/tmp/err.log
    else
	if [ $EXIT_CODE -eq 0 ]; then
   	   echo "$MSG"
	else
   	   echo "Failed: $MSG"
	fi
    fi
}

function log_job
{    
    STATUS=$1
    STATUS_TXT=$2
    EXIT_CODE=$3
    QUERY="UPDATE cmon_job SET status='$STATUS', status_txt='$STATUS_TXT', exit_code=$EXIT_CODE, report_ts=NOW()  WHERE cid=$CLUSTER_ID AND JOBID=$JOBID"
    if [ $JOBID -ne 0 ]; then 
	$MYSQL_BIN  -B -N  --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT  -e "$QUERY" 2>&1 >/tmp/err.log
    fi
}

function write_email
{
  SUBJECT=$1
  MSG=$2
  cat $BACKUP_LOGFILE | sed  -e "s/'/\\\'/g" -e 's/"/\\"/g' > /tmp/s9s_backup_log_escaped_${CLUSTER_ID}
  df -h > /tmp/s9s_diskspace_${CLUSTER_ID}
  MSG="$MSG \nBackup log follows:\n `cat /tmp/s9s_backup_log_escaped_${CLUSTER_ID}`\n\n`cat /tmp/s9s_diskspace_${CLUSTER_ID}`" 
  QUERY="INSERT INTO simple_email(cid,subject,message) VALUES($CLUSTER_ID, \"$SUBJECT\", \"$MSG\")"
  $MYSQL_BIN  -B -N  --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT  -e "$QUERY" 2>&1 >/tmp/err.log
}

function write_logfile
{
   cat $BACKUP_LOGFILE | sed  -e "s/'/\\\'/g" -e 's/"/\\"/g' > /tmp/s9s_backup_log_escaped_${CLUSTER_ID}
   LOG_CONTENT=`cat /tmp/s9s_backup_log_escaped_${CLUSTER_ID}`
   SIZE=`stat --printf='%s' /tmp/s9s_backup_log_escaped_${CLUSTER_ID}`
   HNAME=`$MYSQL_BIN -N -B -A --user=$CMON_USER --password=$CMON_PASSWORD  --host=127.0.0.1 --port=$CMON_DB_PORT -e "SHOW GLOBAL VARIABLES LIKE 'hostname'" | awk '{print $2;}'`
   QUERY="REPLACE INTO cmon_host_log(cid, hostname, filename, result_len, result, report_ts,description, tag) VALUES ($CLUSTER_ID,'$HNAME', '$BACKUP_LOGFILE', $SIZE, \"$LOG_CONTENT\", NOW(), 's9s_backup log', 's9s_backup')"
   $MYSQL_BIN  -B -N  --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT  -e "$QUERY" 2>&1 >/tmp/err.log
   rm -rf /tmp/s9s_backup_log_escaped_${CLUSTER_ID}
}



function remote_cmd_getreply()
{
   desthost=$1
   xcommand=$2
   x=`ssh -q $SSH_OPTS $SSH_USER@$desthost "$SUDO $xcommand 2>/dev/null"`
   x=`echo $x | grep -v "password"`
   echo $x
}

function remote_cmd_getretcode()
{
   desthost=$1
   xcommand=$2
   ssh -q $SSH_OPTS $SSH_USER@$desthost "$SUDO $xcommand 2>/dev/null"
   return $?
}

function remote_copy()
{
   srcfile=$1
   desthost=$2
   destfile=$3
   printf "%-4s: Copying '%s' " "$desthost" "$srcfile"
   scp $SSH_OPTS2 $srcfile $SSH_USER@$desthost:$destfile >> $HOME/s9s_deploy.log  2>/dev/null
   if [ $? -eq 0 ]; then
      printf "\033[32m[ok]\033[0m\n"
      return 0
   else
      log_job_message "copying file $srcfile --> $desthost:$destfile" 1
      log_job 'FAILED' 'job failed' 1
      log_job_message "scp $SSH_OPTS2 $srcfile $os_user@$desthost:$destfile" 1
      write_email "s9s_sw_update failed" "s9s_sw_update, remote_cpy failed. Check job messages."
      printf "\033[31m[failed]\033[0m\n"
      exit 1
   fi
}

function remote_cmdx()
{
   desthost=$1
   xcommand=$2
   printf "%-4s: Executing '%s'" "$desthost" "$xcommand"
   ssh -q $SSH_OPTS $SSH_USER@$desthost "$SUDO $xcommand "
   if [ $? -eq 0 ]; then
      printf "\033[32m[ok]\033[0m\n"
      return 0
   else
      log_job_message "command failed: $xcommand" 1
      log_job 'FAILED' 'backup failed' 1
      write_email "s9s_sw_update failed" "s9s_sw_update, remote_cmdx failed. Check job messages."
      printf "\033[31m[failed]\033[0m\n"
      exit 1
   fi
}

function remote_cmd_nofail()
{
   desthost=$1
   xcommand=$2
   printf "%-4s: Executing '%s'" "$desthost" "$xcommand"
   ssh -q $SSH_OPTS $SSH_USER@$desthost "$SUDO $xcommand "  >> $HOME/s9s_deploy.log 2>&1
   ret=$?
   if [ $ret -ne 0 ]; then
       log_job_message "Failed (but moving on) $desthost : $xcommand" 0
   else
       log_job_message "Executed $desthost : $xcommand" 0
   fi
   printf "\033[32m[ok]\033[0m\n"
   return $ret
}

function remote_cmd()
{
   desthost=$1
   xcommand=$2
   MAX_RETRIES=1
   printf "%-4s: Executing '%s' " "$desthost" "$xcommand"
   retry=0
   while [ $retry -lt $MAX_RETRIES ]; 
   do
      x=`ssh -q $SSH_OPTS $SSH_USER@$desthost "$SUDO $xcommand " >> $HOME/s9s_deploy.log 2>&1`
      if [ $? -eq 0 ]; then
        printf "\033[32m[ok]\033[0m\n"
	log_job_message "Executed on $desthost : $xcommand" 0
        return 0
      fi
      retry=`expr $retry + 1`
      printf "\033[31m[failed: retrying ${retry}/${MAX_RETRIES}]\033[0m\n"
      ssh -q $SSH_OPTS $SSH_USER@$desthost " sync " 2>&1  >> $HOME/s9s_deploy.log
      sleep 1
   done
   
   log_job_message "Command failed: $xcommand" 1
   log_job 'FAILED' 's9s_sw_update failed' 1
   printf "\033[31m[failed]\033[0m\n"
   echo $x
   echo 'The following command failed:'
   echo "ssh -q $SSH_OPTS $SSH_USER@$desthost \" $SUDO  $xcommand \""
   cat $HOME/s9s_cmd.log
   echo 'Try running the command on the line above again, contact http://support.severalnines.com/ticket/new, attach the output from deploy.sh and the error from running the command to the Support issue.'
   write_email "s9s_sw_update failed" "s9s_sw_update, remote_cmd failed. Check job messages."
   exit 1
}


function remote_cmd3()
{
   desthost=$1
   xcommand=$2
   printf "%-4s: Executing '%s' " "$desthost" "$xcommand"
   ssh $SSH_OPTS $SSH_USER@$desthost "$SUDO $xcommand "   
   if [ $? -eq 0 ]; then
      printf "\033[32m[ok]\033[0m\n"
      return 0
   else
      printf "\033[31m[failed]\033[0m\n"
      exit 1
   fi
}

function update_cmon_pkg
{   
    args=`getopt p:s:P:h:i:N:n:f: $*`
    set -- $args
    for i
    do
        case "$i" in
            -p)
                CMON_PASSWORD="$2"; shift;
                shift;;
            -i)
                CLUSTER_ID="$2"; shift;
                shift;;
            -f)
                CMON_FILENAME="$2"; shift;
                shift;;
            --)
                shift; break;;
                esac
    done

    if [ -z "$CMON_FILENAME" ]; then
	echo "cmon pkg was not specified. Usage example (for RPM, DO NOT ADD THE CONTROLLER RPM to the package):"
	echo "s9s_sw_update --update-cmon-pkg -f cmon-1.1.36-64bit-glibc23-mc70.tar.gz"
	echo "s9s_sw_update --update-cmon-pkg -f cmon-agent-1.1.36-1.x86_64.rpm"
	exit 1
    fi

    if [ -z "$CLUSTER_ID" ]; then
	echo "s9s_sw_update --update-cmon-pkg -i <clusterid>"
	exit 1
    fi
    init
    if [ ! -s $CMON_FILENAME ]; then
	echo "$CMON_FILENAME does not exists or is zero bytes"
	exit 1
    fi
    sum=`md5sum $CMON_FILENAME | awk '{print $1;}'`
    filesize=`stat --printf='%s' $CMON_FILENAME`
    fname=`basename $CMON_FILENAME`

    echo "Do you want to add $CMON_FILENAME to CMON_DEFAULT install package (press y or Y to continue)?"
    read x
    if [ "$x" == "y" ] || [ "$x" == "Y" ]; then	
	echo "Updating software package"
	cp -rf $CMON_FILENAME  $WWWROOT/cmon/upload/
	if [ $? -ne 0 ]; then 
	    echo "FAILED: cp -rf $CMON_FILENAME  $WWWROOT/cmon/upload/"
	    exit 1
	fi
	QUERY="BEGIN; DELETE FROM cmon_uploads WHERE cid=$CLUSTER_ID AND packageid=(SELECT packageid FROM cmon.cmon_sw_package WHERE name='CMON_DEFAULT' AND cid=$CLUSTER_ID);\
                INSERT IGNORE INTO cmon.cmon_uploads ( cid, packageid, filename,path,cluster_type,version_tag,md5sum,filesize,selected) VALUES (1,1,'$fname','${WWWROOT}/cmon/upload/','$CLUSTER_TYPE','','$sum', $filesize ,1); COMMIT"    
	$MYSQL_BIN  -B -N  --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT  -e "$QUERY" 2>&1 >/tmp/err.log    
	if [ $? -ne 0 ]; then 
	    echo "FAILED: $QUERY"
	    echo "Nothing was changed"
	    exit 1
	fi
	echo "Completed updating software package."
    else
	echo "Aborting upgrade of software package"
    fi    
}

function update_mysql_pkg
{   
    args=`getopt p:s:P:h:i:N:n:f: $*`
    set -- $args
    for i
    do
        case "$i" in
            -p)
                CMON_PASSWORD="$2"; shift;
                shift;;
            -i)
                CLUSTER_ID="$2"; shift;
                shift;;
            -f)
                COMMASEP_FILELIST="$2"; shift;
                shift;;
            -n)
                PKG_NAME="$2"; shift;
                shift;;
            --)
                shift; break;;
                esac
    done
    if [ -z "$CLUSTER_ID" ]; then
	echo "s9s_sw_update --update-mysql-pkg -i <clusterid>"
	exit 1
    fi
    init
    if [ -z "$PKG_NAME" ]; then
	echo "s9s_sw_update --update-mysql-pkg -n <pkgname>"
	exit 1
    fi

    if [ -z "$COMMASEP_FILELIST" ]; then
	echo "A comma-separated list of files was not specified. Usage example:"
	echo '  s9s_sw_update --update-mysql-pkg -i <clusterid> -f mysql-5.5.28_wsrep_23.7-linux-x86_64.tar.gz,galera-23.2.2-amd64.deb -n <package_name>'
	echo 'or'
	echo '  s9s_sw_update --update-mysql-pkg -i <clusterid> -f MySQL-server-5.5.28_wsrep_23.7-1.rhel5.x86_64.rpm,galera-23.2.2-1.rhel5.x86_64.rpm -n <package_name>'
	exit 1
    fi

    CMON_DB='cmon'
    if [ -z "$PKG_NAME" ]; then
	PKG_NAME="MYSQL_INITIAL_DEPLOY"
    fi
    FILELIST=""
    
    FILELIST=`echo $COMMASEP_FILELIST | awk '{gsub(","," ");print}'`
    rpm=0
    for f in $FILELIST 
    do
	if [ ! -s $f ]; then
	    echo "$f does not exists or is zero bytes"
	    exit 1
	else
	    ext=${f##*.}
	    if [ "$ext" = "rpm" ]; then
		rpm=1
	    fi
	fi
    done

    echo "Do you want to add $FILELIST to $PKG_NAME install package (press y or Y to continue)?"
    read x
    if [ "$x" == "y" ] || [ "$x" == "Y" ]; then	
	echo "Updating software package"
	QUERY="SELECT packageid FROM ${CMON_DB}.cmon_sw_package WHERE name='$PKG_NAME' AND cid=$CLUSTER_ID"
	PID=`$MYSQL_BIN -B  -N  --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT  -e "$QUERY"`	
	if [ -z "$PID" ]; then
	    echo "Creating package $PKG_NAME"
	    QUERY="INSERT INTO ${CMON_DB}.cmon_sw_package(cid,name,rpm) VALUES($CLUSTER_ID, '$PKG_NAME', $rpm)"
	    $MYSQL_BIN  -B -N  --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT  -e "$QUERY"
	fi
	QUERY="SELECT packageid FROM ${CMON_DB}.cmon_sw_package WHERE name='$PKG_NAME' AND cid=$CLUSTER_ID"
	PID=`$MYSQL_BIN  -N  --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT  -e "$QUERY"`
	if [ -z "$PID" ]; then
	    echo "Creating package failed"
	    exit 1	    
	fi
	QUERY="BEGIN; DELETE FROM cmon_uploads WHERE cid=$CLUSTER_ID AND packageid=(SELECT packageid FROM ${CMON_DB}.cmon_sw_package WHERE name='$PKG_NAME' AND cid=$CLUSTER_ID); UPDATE ${CMON_DB}.cmon_sw_package SET selected=0 WHERE cid=$CLUSTER_ID and name<>'CMON_DEFAULT'; UPDATE ${CMON_DB}.cmon_sw_package SET selected=1 WHERE cid=$CLUSTER_ID AND packageid=$PID"
	for f in $FILELIST 
	do
	    sum=`md5sum $f | awk '{print $1;}'`
	    filesize=`stat --printf='%s' $f`
	    fname=`basename $f`
	    cp -rf $f  $WWWROOT/cmon/upload/
	    if [ $? -ne 0 ]; then 
		echo "FAILED: cp -rf $f  $WWWROOT/cmon/upload/"
		exit 1
	    fi
	    QUERY="$QUERY; INSERT IGNORE INTO ${CMON_DB}.cmon_uploads ( cid, packageid, filename,path,cluster_type,version_tag,md5sum,filesize,selected) VALUES ($CLUSTER_ID,$PID,'$fname','${WWWROOT}/cmon/upload/','$CLUSTER_TYPE','','$sum', $filesize ,1)"
	done
	QUERY="$QUERY;COMMIT"
	$MYSQL_BIN  -B -N  --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT  -e "$QUERY" 2>&1 >/tmp/err.log    
	if [ $? -ne 0 ]; then 
	    echo "FAILED: $QUERY"
	    echo "Nothing was changed"
	    exit 1
	fi	
	echo "Completed updating software package."
    else
	echo "Aborting upgrade of software package"
    fi    
}



function install_mysql
{
    args=`getopt p:i:P:t:d:j:h:f:V:n: $*`
    set -- $args
    for i
    do
	case "$i" in
            -p)
		CMON_PASSWORD="$2"; shift;
		shift;;
            -i)
		CLUSTER_ID="$2"; shift;
		shift;;
            -h)
		XHOSTNAME="$2"; shift;
		shift;;
            -n)
		PKG_NAME="$2"; shift;
		shift;;
            -j)
		JOBID="$2"; shift;
		shift;;
            --)
		shift; break;;
	esac
    done    
    
    if [ -z "$XHOSTNAME" ]; then
	log_job_message 'Syntax: s9s_sw_update --install-mysql -i <clusterid> -n <package_name> -h <hostname>' 1
	log_job 'FAILED' 'job failed' 1
	exit 1
    fi
    if [ -z "$CLUSTER_ID" ]; then
	log_job_message 'Syntax: s9s_sw_update --install-mysql -i <clusterid> -n <package_name> -h <hostname>' 1
	log_job 'FAILED' 'job failed' 1
	exit 1
    fi
    init
    log_job_message "Installing .. " 0
    sleep 5
    log_job 'RUNNING' 's9s_sw_update is running' 0
    load_opts $CLUSTER_ID
    
    if [ -z "$VENDOR" ]; then
	VENDOR=$XVENDOR
    fi

    if [ -z "$VENDOR" ]; then
	VENDOR="internal_pkg"
    fi
    log_job_message "vendor = $VENDOR" 0

    mkdir -p $S9S_TMPDIR
    chown -R $SSH_USER:$SSH_USER $S9S_TMPDIR
    if [ -z "$DATADIR" ]; then
	log_job_message "datadir is not set in my.cnf - aborting" 1 
	log_job 'FAILED' 'job failed' 1
	exit 1
    fi
    log_job 'RUNNING' 's9s_sw_update is running' 0
    remote_cmd_nofail $XHOSTNAME "mkdir -p $S9S_TMPDIR"
    remote_cmd_nofail $XHOSTNAME "chown  -R $SSH_USER:$SSH_USER $S9S_TMPDIR"
    if [ "$OS" = "redhat" ]; then
        if  remote_cmd_getretcode $XHOSTNAME "grep -q -i 'release 6' /etc/redhat-release" ; then
            RHEL=6
            EPEL_REL="6-8"
        fi
        if  remote_cmd_getretcode $XHOSTNAME "grep -q -i 'release 1' /etc/redhat-release" ; then
            RHEL=5
            EPEL_REL="5-4"
        fi
        if  remote_cmd_getretcode $XHOSTNAME "grep -q -i 'Amazon Linux AMI' /etc/issue" ; then
            RHEL=6
            EPEL_REL="6-8"
        fi
	$HTTP_PROXY wget  -c --no-check-certificate --tries=5 -O$S9S_TMPDIR/epel-release-${EPEL_REL}.noarch.rpm  http://dl.fedoraproject.org/pub/epel/$RHEL/x86_64/epel-release-${EPEL_REL}.noarch.rpm
	if [ $? -ne 0 ]; then
	    log_job_message "FAILED : download failed - check link and/or that EPEL version. EPEL is needed for socat." 1
	    log_job 'FAILED' 'job failed' 1	   
	    write_email "s9s_sw_update failed" "wget epel failed. Check job messages."
	    exit 1
	else
	    remote_copy $S9S_TMPDIR/epel-release-${EPEL_REL}.noarch.rpm $XHOSTNAME $S9S_TMPDIR
	    remote_cmd_nofail $XHOSTNAME sync
	    remote_cmd_nofail $XHOSTNAME "$HTTP_PROXY yum -y remove epel-release"	
	    remote_cmd $XHOSTNAME "rpm -Uvh ${S9S_TMPDIR}/epel-release-6-8.noarch.rpm"
	fi
	remote_cmd_nofail $XHOSTNAME "rm -rf /var/lib/mysql/RPM_UPGRADE_MARKER"
	remote_cmd_nofail $XHOSTNAME "$HTTP_PROXY yum -y remove MySQL* mysql* Percona* percona* MariaDB* mariadb* MySQL-Cluster* MySQL-cluster* mysql-cluster* galera*"	
	remote_cmd_nofail $XHOSTNAME "rpm -e `rpm -qa |grep -i maria`"	
	remote_cmd_nofail $XHOSTNAME "rpm -e `rpm -qa |grep -i percona`"	
	remote_cmd_nofail $XHOSTNAME "rpm -e `rpm -qa |grep -i mysql`"	
	remote_cmd_nofail $XHOSTNAME "/usr/sbin/setenforce 0 "
	remote_cmd_nofail $XHOSTNAME "echo '0' > /selinux/enforce "
        remote_cmd_nofail $XHOSTNAME "sed -i.bak 's#SELINUX=enforcing#SELINUX=permissive#g' /etc/selinux/config"
	remote_cmd_nofail $XHOSTNAME "$HTTP_PROXY yum -y install nc libaio rsync wget"	
	remote_cmd_nofail $XHOSTNAME "$HTTP_PROXY yum -y install socat"	
	remote_cmd_nofail $XHOSTNAME "$HTTP_PROXY yum -y install nc"	
	remote_cmd_nofail $XHOSTNAME "$HTTP_PROXY yum -y install perl"	
	remote_cmd_nofail $XHOSTNAME "$HTTP_PROXY yum -y install libevent"	
    else
	remote_cmd_nofail $XHOSTNAME "touch /etc/init.d/mysql"	
	remote_cmd_nofail $XHOSTNAME "LC_ALL=C DEBIAN_FRONTEND=noninteractive $HTTP_PROXY apt-get -y -f install"
	remote_cmd_nofail $XHOSTNAME "LC_ALL=C DEBIAN_FRONTEND=noninteractive $HTTP_PROXY apt-get autoremove -y  maria-common"	
	remote_cmd_nofail $XHOSTNAME "LC_ALL=C DEBIAN_FRONTEND=noninteractive $HTTP_PROXY apt-get autoremove -y --purge percona-xtradb-cluster-*"
	remote_cmd_nofail $XHOSTNAME "LC_ALL=C DEBIAN_FRONTEND=noninteractive $HTTP_PROXY apt-get autoremove -y --purge percona-server-*"    
	remote_cmd_nofail $XHOSTNAME "LC_ALL=C DEBIAN_FRONTEND=noninteractive $HTTP_PROXY apt-get autoremove -y --purge mysql*"	
	remote_cmd_nofail $XHOSTNAME "LC_ALL=C DEBIAN_FRONTEND=noninteractive $HTTP_PROXY apt-get autoremove -y --purge galera*"	
	remote_cmd_nofail $XHOSTNAME "LC_ALL=C DEBIAN_FRONTEND=noninteractive $HTTP_PROXY apt-get autoremove -y --purge mariadb*"	
	remote_cmd_nofail $XHOSTNAME "LC_ALL=C DEBIAN_FRONTEND=noninteractive $HTTP_PROXY apt-get autoremove -y --purge MariaDB*"	
	remote_cmd_nofail $XHOSTNAME "LC_ALL=C DEBIAN_FRONTEND=noninteractive $HTTP_PROXY apt-get autoremove -y --purge mysql-cluster*"	
	remote_cmd_nofail $XHOSTNAME "$HTTP_PROXY apt-get -y autoremove"	
	remote_cmd_nofail $XHOSTNAME "LC_ALL=C DEBIAN_FRONTEND=noninteractive dpkg --configure -a"
	remote_cmd_nofail $XHOSTNAME "rm -rf /etc/my.cnf"
	remote_cmd_nofail $XHOSTNAME "rm -rf /etc/mysql/"
	remote_cmd_nofail $XHOSTNAME "rm -rf /var/lib/mysql"
	remote_cmd_nofail $XHOSTNAME "rm -rf /var/run/mysqld"
	remote_cmd_nofail $XHOSTNAME "rm -rf /usr/bin/wsrep*"
	remote_cmd_nofail $XHOSTNAME "rm -rf /etc/rc*.d/*mysql"
	remote_cmd_nofail $XHOSTNAME "rm -rf /var/lib/update-rc.d/mysql"
	remote_cmd_nofail $XHOSTNAME "rm -rf /etc/init.d/mysql"
	remote_cmd_nofail $XHOSTNAME "sed -i.bak '/repo.percona.com/d'  /etc/apt/sources.list"
	remote_cmd_nofail $XHOSTNAME "sed -i.bak '/mariadb/d'  /etc/apt/sources.list"
	remote_cmd_nofail $XHOSTNAME "$HTTP_PROXY apt-get -y update"
	remote_cmd_nofail $XHOSTNAME "$HTTP_PROXY wget -O${S9S_TMPDIR}/libssl0.9.8_0.9.8o-4squeeze14_amd64.deb  http://ftp.us.debian.org/debian/pool/main/o/openssl/libssl0.9.8_0.9.8o-4squeeze14_amd64.deb"
	remote_cmd_nofail $XHOSTNAME "dpkg -i ${S9S_TMPDIR}/libssl0.9.8_0.9.8o-4squeeze14_amd64.deb"
	remote_cmd_nofail $XHOSTNAME "$HTTP_PROXY apt-get -y install libssl0.9.8"
	remote_cmd_nofail $XHOSTNAME "$HTTP_PROXY apt-get -y install socat"
	remote_cmd_nofail $XHOSTNAME "$HTTP_PROXY apt-get -y install lsb-release"
	remote_cmd_nofail $XHOSTNAME "$HTTP_PROXY apt-get -y install perl"
	#remote_cmd_nofail $XHOSTNAME "$HTTP_PROXY apt-get -y install libevent"
	remote_cmd $XHOSTNAME "$HTTP_PROXY apt-get -y install libssl0.9.8 libssl1.0.0  wget rsync psmisc netcat-openbsd"
	remote_cmd_nofail $XHOSTNAME "ln --force -s /lib/x86_64-linux-gnu/libssl.so.1.0.0 /lib/x86_64-linux-gnu/libssl.so.10"
	remote_cmd_nofail $XHOSTNAME "ln --force -s /lib/x86_64-linux-gnu/libcrypto.so.1.0.0 /lib/x86_64-linux-gnu/libcrypto.so.10"
	remote_cmd_nofail $XHOSTNAME "ln --force -s /usr/lib/x86_64-linux-gnu/libssl.so.1.0.0 /usr/lib/x86_64-linux-gnu/libssl.so.10"
	remote_cmd_nofail $XHOSTNAME "ln --force -s /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0 /usr/lib/x86_64-linux-gnu/libcrypto.so.10"
	remote_cmd_nofail $XHOSTNAME "ln --force -s /lib/x86_64-linux-gnu/libssl.so.1.0.0 /lib/x86_64-linux-gnu/libssl.so.6"
	remote_cmd_nofail $XHOSTNAME "ln --force -s /lib/x86_64-linux-gnu/libcrypto.so.1.0.0 /lib/x86_64-linux-gnu/libcrypto.so.6"
	remote_cmd_nofail $XHOSTNAME "ln --force -s /usr/lib/x86_64-linux-gnu/libssl.so.1.0.0 /usr/lib/x86_64-linux-gnu/libssl.so.6"
	remote_cmd_nofail $XHOSTNAME "ln --force -s /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0 /usr/lib/x86_64-linux-gnu/libcrypto.so.6"
	remote_cmd $XHOSTNAME "$HTTP_PROXY apt-get -y install libaio1"
        #remote_cmd_nofail $XHOSTNAME "rm -rf $CONFIGDIR/my.cnf"
       # remote_cmd_nofail $XHOSTNAME "rm -rf /etc/mysql/*"
	remote_cmd $XHOSTNAME "$HTTP_PROXY apt-get -y install libdbd-mysql-perl"
    fi
    log_job 'RUNNING' 's9s_sw_update is running' 0
    remote_cmd_nofail $XHOSTNAME "rm -rf /etc/my.cnf"
    remote_cmd_nofail $XHOSTNAME "rm -rf /usr/bin/wsre*"
#    remote_cmd_nofail $XHOSTNAME "rm -rf /etc/mysql/*"
    remote_cmd_nofail $XHOSTNAME "rm -rf /var/lib/mysql"
    remote_cmd_nofail $XHOSTNAME "rm -rf /var/run/mysqld"
    remote_cmd_nofail $XHOSTNAME "rm -rf /etc/init.d/mysql*"
    remote_cmd_nofail $XHOSTNAME "rm -rf /etc/init.d/mysql.server"
    
    remote_cmd_nofail $XHOSTNAME "mkdir -p $S9S_TMPDIR"
    remote_cmd_nofail $XHOSTNAME "chown  -R $SSH_USER:$SSH_USER $S9S_TMPDIR"
    remote_copy /usr/bin/s9s_backup $XHOSTNAME $S9S_TMPDIR/s9s_backup
    remote_cmd $XHOSTNAME "mv $S9S_TMPDIR/s9s_backup /usr/bin"
    remote_cmd_nofail $XHOSTNAME "chmod u+x /usr/bin/s9s_backup"
     #remote_copy $S9S_TMPDIR/my.cnf $XHOSTNAME $S9S_TMPDIR
#    remote_cmd $XHOSTNAME "mkdir -p $CONFIGDIR/"
#    remote_cmd $XHOSTNAME "mv -f $S9S_TMPDIR/my.cnf $CONFIGDIR/"

    if [ -n "$DATADIR" ]; then
	if [ "$DATADIR" != "/" ]; then
	    remote_cmd_nofail $XHOSTNAME "rm -rf $DATADIR/*"	    
	fi
    else
	log_job_message "datadir is not set in my.cnf - aborting" 1
    fi

    remote_cmd $XHOSTNAME "mkdir -p $DATADIR/"
    CMON_PASSWORD_ESCAPED=$(printf '%q' $CMON_PASSWORD)
    QUERY="GRANT INSERT,UPDATE,DELETE, SELECT ON $CMON_DB_DB.* TO 'cmon'@'$XHOSTNAME' IDENTIFIED BY '$CMON_PASSWORD_ESCAPED'"    
    $MYSQL_BIN  -B -N  --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT  -e "$QUERY" 2>&1 >/tmp/err.log    
    if [ $? -ne 0 ]; then 
	write_email "s9s_sw_update failed" "GRANT failed: $QUERY. Check job messages."
	log_job_message "FAILED: $QUERY" 1
	log_job 'FAILED' 'job failed' 1
	exit 1
    fi	
    CMON_PASSWORD_ESCAPED=$(printf '%q' $CMON_PASSWORD)
    QUERY="GRANT SUPER ON *.* TO 'cmon'@'$XHOSTNAME' IDENTIFIED BY '$CMON_PASSWORD_ESCAPED'"    
    $MYSQL_BIN  -B -N  --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT  -e "$QUERY" 2>&1 >/tmp/err.log    
    if [ $? -ne 0 ]; then 
	write_email "s9s_sw_update failed" "GRANT failed: $QUERY. Check job messages."
	log_job_message "FAILED: $QUERY" 1
	log_job 'FAILED' 'job failed' 1
	exit 1
    fi	

    remote_cmd_nofail $XHOSTNAME "killall -9 mysqld mysqld_safe mysql mysql_chk ndb_mgmd ndbmtd ndbd "
    
    if [ "$NETWORKLESS" = "yes" ]; then
	VENDOR=percona_nonet
    fi    

    if [ "$RPM" = "0" ]; then
	VENDOR="${VENDOR}_tgz"
    fi    
    echo $VENDOR
    case $VENDOR in
	percona)
	    if [ "$OS" = "redhat" ]; then
		#remote_cmd_nofail $XHOSTNAME "$HTTP_PROXY yum -y install perl-DBD-MySQL.x86_64"	
		remote_cmd $XHOSTNAME "$HTTP_PROXY rpm -Uhv --force http://www.percona.com/downloads/percona-release/percona-release-0.0-1.x86_64.rpm"
		if [ "$GALERA_VERSION" = "3.x" ]; then
		    remote_cmd $XHOSTNAME "$HTTP_PROXY yum -y install Percona-XtraDB-Cluster-server-56 Percona-XtraDB-Cluster-client-56 Percona-XtraDB-Cluster-galera-3 percona-xtrabackup"
		fi
		if [ "$GALERA_VERSION" = "2.x" ]; then
		    remote_cmd $XHOSTNAME "$HTTP_PROXY yum -y install Percona-XtraDB-Cluster-server-55 Percona-XtraDB-Cluster-client-55 Percona-XtraDB-Cluster-galera-2 percona-xtrabackup"
		fi
	    else
		remote_cmd $XHOSTNAME "$HTTP_PROXY apt-get update"
		remote_cmd_nofail $XHOSTNAME "sed -i.bak '/repo.percona.com/d'  /etc/apt/sources.list"
		$HTTP_PROXY wget --no-check-certificate --tries=5  -O ${S9S_TMPDIR}/RPM-GPG-KEY-percona http://www.percona.com/redir/downloads/RPM-GPG-KEY-percona
		if [ $? -ne 0 ]; then
		    log_job_message "Failed: $HTTP_PROXY wget --no-check-certificate --tries=5  -O ${S9S_TMPDIR}/RPM-GPG-KEY-percona http://www.percona.com/redir/downloads/RPM-GPG-KEY-percona" 1
		    log_job 'FAILED' 'install garbd failed' 1
		    write_email "s9s_sw_update failed" "wget RPM-GPG-KEY-percona failed. Check job messages."
		    exit 1
		fi
		remote_cmd_nofail $XHOSTNAME "chown  -R $SSH_USER:$SSH_USER $S9S_TMPDIR"
		remote_copy $S9S_TMPDIR/RPM-GPG-KEY-percona ${XHOSTNAME} ${S9S_TMPDIR}/RPM-GPG-KEY-percona
		remote_cmd $XHOSTNAME "gpg --import ${S9S_TMPDIR}/RPM-GPG-KEY-percona"
		remote_cmd $XHOSTNAME "/bin/sh -c 'gpg -a --export CD2EFD2A | apt-key add -'"
		remote_cmd $XHOSTNAME "/bin/sh -c 'echo \"deb http://repo.percona.com/apt `lsb_release -c -s` main\" >> /etc/apt/sources.list'"
		remote_cmd $XHOSTNAME "/bin/sh -c 'echo \"deb-src http://repo.percona.com/apt `lsb_release -c -s` main\" >> /etc/apt/sources.list'"
		remote_cmd $XHOSTNAME "$HTTP_PROXY apt-get -q -y update"
		if [ "$GALERA_VERSION" = "3.x" ]; then
		    remote_cmd $XHOSTNAME "LC_ALL=C DEBIAN_FRONTEND=noninteractive $HTTP_PROXY apt-get -o Dpkg::Options::='--force-confnew' -y -q install percona-xtradb-cluster-galera-3.x percona-xtradb-cluster-client-5.6 percona-xtradb-cluster-server-5.6 percona-xtrabackup"
		fi
		if [ "$GALERA_VERSION" = "2.x" ]; then
		    remote_cmd $XHOSTNAME "LC_ALL=C DEBIAN_FRONTEND=noninteractive $HTTP_PROXY apt-get -o Dpkg::Options::='--force-confnew' -y -q install percona-xtradb-cluster-galera-2.x percona-xtradb-cluster-client-5.5 percona-xtradb-cluster-server-5.5 percona-xtrabackup"
		fi
		remote_cmd $XHOSTNAME "sync"	
		remote_cmd $XHOSTNAME "test -f /usr/sbin/mysqld"
		remote_cmd $XHOSTNAME "test -f /etc/init.d/mysql"
	    fi
	    ;;
	internal_pkg | codership | percona_nonet | mariadb_tgz | percona_tgz)	    
	    if [ -z "$PKG_NAME" ]; then
		## default to MYSQL_INITIAL_DEPLOY if not set
		PKG_NAME="MYSQL_INITIAL_DEPLOY"
	    fi
	    QUERY="SELECT packageid FROM ${CMON_DB}.cmon_sw_package WHERE name='$PKG_NAME' AND cid=$CLUSTER_ID"
	    PID=`$MYSQL_BIN  -B -N  --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT  -e "$QUERY"`	
	    if [ -z "$PID" ]; then
		log_job_message "Invalid package name $PKG_NAME" 1
		log_job 'FAILED' 'job failed' 1
		write_email "s9s_sw_update failed" "Invalid package name $PKG_NAME. Check job messages."
		exit 1
	    fi
	    QUERY="SELECT group_concat(concat(path,',', filename) SEPARATOR ' ') FROM ${CMON_DB}.cmon_uploads WHERE packageid='$PID' AND cid=$CLUSTER_ID"
	    FILELIST=`$MYSQL_BIN  -B -N  --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT  -e "$QUERY"`	    
	    if [ -z "$FILELIST" ]; then
		log_job_message "No files in package $PKG_NAME" 1
		log_job 'FAILED' 'job failed' 1
		write_email "s9s_sw_update failed" "No files in $PKG_NAME. Check job messages."
		exit 1	    
	    fi
	    
	    if [ "$FILELIST" = "NULL" ]; then
		log_job_message "No files in package $PKG_NAME" 1
		log_job 'FAILED' 'job failed' 1
		write_email "s9s_sw_update failed" "No files in $PKG_NAME. Check job messages."
		exit 1	    
	    fi
	    
	    
	    remote_cmd $XHOSTNAME "mkdir -p $S9S_TMPDIR"
	    remote_cmd $XHOSTNAME "chown  -R $SSH_USER:$SSH_USER $S9S_TMPDIR"
	    if [ "$VENDOR" = "codership" ] && [ "$OS" = "debian" ]; then
		    remote_cmd_nofail $XHOSTNAME "LC_ALL=en_US.utf8 DEBIAN_FRONTEND=noninteractive apt-get -o Dpkg::Options::='--force-confnew' -y -q install mysql-client"            
		    remote_cmd $XHOSTNAME "/bin/sh -c 'echo \"deb http://repo.percona.com/apt `lsb_release -c -s` main\" >> /etc/apt/sources.list'"
		    remote_cmd $XHOSTNAME "/bin/sh -c 'echo \"deb-src http://repo.percona.com/apt `lsb_release -c -s` main\" >> /etc/apt/sources.list'"
		    remote_cmd $XHOSTNAME "apt-get -q -y update"
		    remote_cmd $XHOSTNAME "LC_ALL=C DEBIAN_FRONTEND=noninteractive apt-get -o Dpkg::Options::='--force-confnew' --force-yes -y -q install percona-xtrabackup percona-toolkit"
	    fi
	    if [ "$VENDOR" = "codership" ] && [ "$OS" = "redhat" ]; then
            remote_cmd $XHOSTNAME "$HTTP_PROXY rpm -Uhv --force http://www.percona.com/downloads/percona-release/percona-release-0.0-1.x86_64.rpm"
		    remote_cmd $XHOSTNAME "$HTTP_PROXY yum -y install percona-xtrabackup"
        fi
	    for f in $FILELIST 
	    do
		path=`echo $f | awk -F, '{print $1;}'`
		filename=`echo $f | awk -F, '{print $2;}'`	 
		if [ -f $path/$filename ]; then
		    remote_copy $path/$filename $XHOSTNAME $S9S_TMPDIR	    	    
		else
		    log_job_message "File did not exist: $path/$filename" 1
		    log_job 'FAILED' 'job failed' 1
		    write_email "s9s_sw_update failed" "File did not exist: $path/$filename. Check job messages."
		    exit 1	    
		fi
	    done
	    RPMLIST=""
	    for f in $FILELIST 
	    do
		filename=`echo $f | awk -F, '{print $2;}'`	    
		ext=${filename##*.}
		case $ext in
		    gz)
			MYSQL_BASEDIR2=${MYSQL_BASEDIR%/}
			remote_cmd_nofail $XHOSTNAME "rm -f ${MYSQL_BASEDIR2}*"
			remote_cmd $XHOSTNAME "tar xvfz ${S9S_TMPDIR}/$filename -C `dirname $MYSQL_BASEDIR`"
			remote_cmd $XHOSTNAME "ln -s `dirname $MYSQL_BASEDIR`/`basename $filename .tar.gz`  $MYSQL_BASEDIR2"
			;;
		    rpm)
			RPMLIST="$RPMLIST $S9S_TMPDIR/$filename"
			;;
		    deb)
			DEBLIST="$DEBLIST $S9S_TMPDIR/$filename"
			;;
		esac	    
	    done
	    if [ -n "$RPMLIST" ]; then
		remote_cmd $XHOSTNAME "rpm -Uvh $RPMLIST"
	    fi
	    if [ -n "$DEBLIST" ]; then
		remote_cmd $XHOSTNAME "LC_ALL=C DEBIAN_FRONTEND=noninteractive /usr/bin/dpkg -i $DEBLIST"
	    fi
	    remote_cmd $XHOSTNAME "test -f ${MYSQL_BASEDIR}/bin/mysql"	    
	    ;;
	    mariadb)
	        if [ "$OS" = "redhat" ]; then
                if [ "$GALERA_VERSION" = "2.x" ]; then
		            cat << 'EOF' > $S9S_TMPDIR/MariaDB.centos5
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/5.5/centos5-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1                 
EOF
		            cat << 'EOF' > $S9S_TMPDIR/MariaDB.centos6
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/5.5/centos6-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1                 
EOF
		            cat << 'EOF' > $S9S_TMPDIR/MariaDB.rhel5
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/5.5/rhel5-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1                 
EOF
		            cat << 'EOF' > $S9S_TMPDIR/MariaDB.rhel6
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/5.5/rhel6-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1                 
EOF
                fi
                if [ "$GALERA_VERSION" = "3.x" ]; then
		            cat << 'EOF' > $S9S_TMPDIR/MariaDB.centos5
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.0/centos5-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1                 
EOF
		            cat << 'EOF' > $S9S_TMPDIR/MariaDB.centos6
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.0/centos6-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1                 
EOF
		            cat << 'EOF' > $S9S_TMPDIR/MariaDB.rhel5
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.0/rhel5-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1                 
EOF
		            cat << 'EOF' > $S9S_TMPDIR/MariaDB.rhel6
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.0/rhel6-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1                 
EOF
                fi
		        if [ -f /etc/system-release ]; then
		            RHEL=6
		            OS2='rhel'		    
		        else
		            RHEL=$(cat /etc/redhat-release | egrep "[0-9]" -o | head -1)
		            OS2=$(awk '{print $1}' /etc/redhat-release | tr '[:upper:]' '[:lower:]')
		        fi
		        remote_cmd_nofail $XHOSTNAME "chown  -R $SSH_USER:$SSH_USER $S9S_TMPDIR"
		        remote_copy ${S9S_TMPDIR}/MariaDB.${OS2}${RHEL} $XHOSTNAME ${S9S_TMPDIR}/MariaDB.${OS2}${RHEL}.tmp
		        remote_cmd $XHOSTNAME "mv -f ${S9S_TMPDIR}/MariaDB.${OS2}${RHEL}.tmp /etc/yum.repos.d/MariaDB.repo"
                remote_cmd $XHOSTNAME "$HTTP_PROXY yum -y install MariaDB-Galera-server.x86_64 MariaDB-client.x86_64 galera"
		        remote_cmd $XHOSTNAME "$HTTP_PROXY rpm -Uhv --force http://www.percona.com/downloads/percona-release/percona-release-0.0-1.x86_64.rpm"
		        remote_cmd $XHOSTNAME "$HTTP_PROXY yum -y install percona-xtrabackup"
	        else
		        remote_cmd_nofail $XHOSTNAME "killall -9 mysqld mysqld_safe mysql mysql_chk ndb_mgmd ndbmtd ndbd cmon"
		        $HTTP_PROXY wget --no-check-certificate --tries=5  -O ${S9S_TMPDIR}/RPM-GPG-KEY-percona http://www.percona.com/redir/downloads/RPM-GPG-KEY-percona
		        remote_copy ${S9S_TMPDIR}/RPM-GPG-KEY-percona ${XHOSTNAME} ${S9S_TMPDIR}/RPM-GPG-KEY-percona
		        remote_cmd $XHOSTNAME "gpg --import ${S9S_TMPDIR}/RPM-GPG-KEY-percona"
		        remote_cmd $XHOSTNAME "/bin/sh -c 'gpg -a --export CD2EFD2A | apt-key add -'"
		        remote_cmd $XHOSTNAME "apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db"
		        if [ "$GALERA_VERSION" = "2.x" ]; then
		            remote_cmd $XHOSTNAME "/bin/sh -c 'echo \"deb http://ftp.osuosl.org/pub/mariadb/repo/5.5/`lsb_release -i -s | tr '[A-Z]' '[a-z]'` `lsb_release -c -s` main\" > /etc/apt/sources.list.d/MariaDB.list'"
		            remote_cmd $XHOSTNAME "/bin/sh -c 'echo \"deb-src http://ftp.osuosl.org/pub/mariadb/repo/5.5/`lsb_release -i -s | tr '[A-Z]' '[a-z]'` `lsb_release -c -s` main\" >> /etc/apt/sources.list.d/MariaDB.list'"
		            remote_cmd $XHOSTNAME "/bin/sh -c 'echo \"Package: *\nPin: origin osuosl.org\nPin-Priority: 1000\n\nPackage: *\nPin: origin ftp.osuosl.org\nPin-Priority: 1000\n\nPackage: libmysqlclient18\nPin: origin ftp.osuosl.org\nPin-Priority: 1000\" > /etc/apt/preferences.d/00MariaDB.pref'"
		            remote_cmd $XHOSTNAME "apt-get -q -y update"
		            remote_cmd $XHOSTNAME "LC_ALL=C DEBIAN_FRONTEND=noninteractive apt-get -o Dpkg::Options::='--force-confnew' --force-yes -y -q install  galera  mariadb-galera-server-5.5 mariadb-client-5.5 libmariadbclient18 mariadb-client-core-5.5 rsync netcat-openbsd"		
                fi
		        if [ "$GALERA_VERSION" = "3.x" ]; then
		            remote_cmd $XHOSTNAME "/bin/sh -c 'echo \"deb http://ftp.osuosl.org/pub/mariadb/repo/10.0/`lsb_release -i -s | tr '[A-Z]' '[a-z]'` `lsb_release -c -s` main\" > /etc/apt/sources.list.d/MariaDB.list'"
		            remote_cmd $XHOSTNAME "/bin/sh -c 'echo \"deb-src http://ftp.osuosl.org/pub/mariadb/repo/10.0/`lsb_release -i -s | tr '[A-Z]' '[a-z]'` `lsb_release -c -s` main\" >> /etc/apt/sources.list.d/MariaDB.list'"
		            remote_cmd $XHOSTNAME "/bin/sh -c 'echo \"Package: *\nPin: origin osuosl.org\nPin-Priority: 1000\n\nPackage: *\nPin: origin ftp.osuosl.org\nPin-Priority: 1000\n\nPackage: libmysqlclient18\nPin: origin ftp.osuosl.org\nPin-Priority: 1000\" > /etc/apt/preferences.d/00MariaDB.pref'"
		            remote_cmd $XHOSTNAME "apt-get -q -y update"
		            remote_cmd $XHOSTNAME "LC_ALL=C DEBIAN_FRONTEND=noninteractive apt-get -o Dpkg::Options::='--force-confnew' --force-yes -y -q install mariadb-galera-server galera mariadb-client galera rsync netcat-openbsd"		
                fi
		        remote_cmd $XHOSTNAME "/bin/sh -c 'echo \"deb http://repo.percona.com/apt `lsb_release -c -s` main\" >> /etc/apt/sources.list'"
		        remote_cmd $XHOSTNAME "/bin/sh -c 'echo \"deb-src http://repo.percona.com/apt `lsb_release -c -s` main\" >> /etc/apt/sources.list'"
		        remote_cmd $XHOSTNAME "apt-get -q -y update"
		        remote_cmd $XHOSTNAME "LC_ALL=C DEBIAN_FRONTEND=noninteractive apt-get -o Dpkg::Options::='--force-confnew' --force-yes -y -q install percona-xtrabackup percona-toolkit"
		        remote_cmd_nofail $XHOSTNAME "killall -9 mysqld mysqld_safe mysql mysql_chk ndb_mgmd ndbmtd ndbd"
		        remote_cmd_nofail $XHOSTNAME "rm -rf /etc/my.cnf"
		        remote_cmd $XHOSTNAME  "chown 755 /etc/init.d/mysql"
		        remote_cmd $XHOSTNAME  "sed -i.bak 's#MYSQLD_STARTUP_TIMEOUT:-30#MYSQLD_STARTUP_TIMEOUT:-3600#g' /etc/init.d/mysql"
		        remote_cmd $XHOSTNAME  "/usr/sbin/update-rc.d mysql defaults"
	        fi
	        remote_cmd $XHOSTNAME "test -f /usr/sbin/mysqld"
	        remote_cmd $XHOSTNAME "test -f /etc/init.d/mysql"
	        ;;
	    *)
	        log_job_message "Not a supported vendor" 1
	        log_job 'FAILED' 'job failed' 1
	        write_email "s9s_sw_update failed" "Not a supported vendor. Check job messages."
	        exit 1;	           	     
    esac
    
                
    remote_cmd_nofail $XHOSTNAME "killall -9 mysqld mysqld_safe mysql mysql_chk ndb_mgmd ndbmtd ndbd "
    remote_cmd_nofail $XHOSTNAME "rm -rf /etc/my.cnf"
#    remote_cmd_nofail $XHOSTNAME "rm -rf /etc/mysql/*"
    remote_cmd_nofail $XHOSTNAME "rm -rf /var/lib/mysql"
    remote_cmd_nofail $XHOSTNAME "rm -rf /var/run/mysqld"
    # remote_cmd_nofail $XHOSTNAME "rm -rf /etc/init.d/mysql"
    
    if [ -n "$DATADIR" ]; then
	    if [ "$DATADIR" != "/" ]; then
	        remote_cmd_nofail $XHOSTNAME "rm -rf $DATADIR/*"	    
	    fi
    else
	    log_job_message "datadir is not set in my.cnf - aborting" 1
	    log_job 'FAILED' 'job failed' 1
	    write_email "s9s_sw_update failed" "datadir is not set in my.cnf. Check job messages."
	    exit 1
    fi
    
   # if [ -n "$CONFIGDIR" ]; then
	#remote_cmd_nofail $XHOSTNAME "rm -rf /etc/mysql/*"
    #fi
    
    
    remote_cmd_nofail $XHOSTNAME "mkdir -p $S9S_TMPDIR"
    remote_cmd_nofail $XHOSTNAME "chown  -R $SSH_USER:$SSH_USER $S9S_TMPDIR"
    remote_cmd $XHOSTNAME "chown -R $SSH_USER:$SSH_USER $S9S_TMPDIR"
    remote_copy $S9S_TMPDIR/my.cnf $XHOSTNAME $S9S_TMPDIR
    rm -rf $S9S_TMPDIR/my.cnf
    remote_cmd $XHOSTNAME "mkdir -p $CONFIGDIR/"
    remote_cmd $XHOSTNAME "mv -f $S9S_TMPDIR/my.cnf $CONFIGDIR/"
    remote_cmd $XHOSTNAME "chmod 600 $CONFIGDIR/my.cnf"
    remote_cmd_nofail $XHOSTNAME "chown mysql.mysql $CONFIGDIR/my.cnf"
    
    case $CLUSTER_TYPE in
	    galera)
	    if [ "$VENDOR" != "percona_nonet" ]; then
		$HTTP_PROXY wget --no-check-certificate --tries=5  -O ${S9S_TMPDIR}/RPM-GPG-KEY-percona http://www.percona.com/redir/downloads/RPM-GPG-KEY-percona
		if [ $? -ne 0 ]; then
		    log_job_message "Failed: $HTTP_PROXY wget --no-check-certificate --tries=5  -O ${S9S_TMPDIR}/RPM-GPG-KEY-percona http://www.percona.com/redir/downloads/RPM-GPG-KEY-percona" 1
		    log_job 'FAILED' 'download RPM-GPG-KEY-percona failed' 1
		    exit 1
		fi
		remote_cmd_nofail $XHOSTNAME "chown  -R $SSH_USER:$SSH_USER $S9S_TMPDIR"
		if [ "$OS" = "debian" ]; then
		    remote_copy $S9S_TMPDIR/RPM-GPG-KEY-percona ${XHOSTNAME} ${S9S_TMPDIR}/RPM-GPG-KEY-percona
		    remote_cmd $XHOSTNAME "gpg --import ${S9S_TMPDIR}/RPM-GPG-KEY-percona"
		    remote_cmd $XHOSTNAME "/bin/sh -c 'gpg -a --export CD2EFD2A | apt-key add -'"
		fi
		remote_cmd $XHOSTNAME "/usr/bin/s9s_backup --install -i $CLUSTER_ID -b /tmp/  -u $CMON_USER -p'$CMON_PASSWORD' -h $CMON_DB_HOST -P $CMON_DB_PORT -B$MYSQL_BASEDIR/bin/mysql"
	    fi
	    log_job_message "Installing s9s_notify_cc on $XHOSTNAME"
	    bash /usr/bin/s9s_galera --install-notifycc -i${CLUSTER_ID} -h${XHOSTNAME} -j${JOBID}
	    log_job_message "Installing s9s_notify_cc the rest of the cluster"
	    bash /usr/bin/s9s_galera --install-notifycc -i${CLUSTER_ID} -j${JOBID}
	    ;;
	*)
	    ;;
    esac


    ### POST INSTALL
    mkdir -p $S9S_TMPDIR
    chown  -R $SSH_USER:$SSH_USER $S9S_TMPDIR

    case $VENDOR in
	percona)
	    if [ "$OS" = "redhat" ]; then
		remote_cmd $XHOSTNAME "chmod 755 /etc/init.d/mysql"
		remote_cmd $XHOSTNAME "/sbin/chkconfig --add mysql "
		remote_cmd $XHOSTNAME "/sbin/chkconfig mysql off --level 2345"
	    else
		remote_cmd $XHOSTNAME "chmod 755 /etc/init.d/mysql"
		remote_cmd_nofail $XHOSTNAME "/usr/sbin/update-rc.d -f mysql remove"
		remote_cmd_nofail $XHOSTNAME "/usr/sbin/update-rc.d mysql stop 20 0 1 6 ."
	    fi
	    ;;
	internal_pkg | codership)	 
	    if [ "$OS" = "redhat" ]; then   
		remote_cmd $XHOSTNAME "chmod 755 /etc/init.d/mysql"
		remote_cmd $XHOSTNAME "/sbin/chkconfig --add mysql "
		remote_cmd $XHOSTNAME "/sbin/chkconfig mysql off --level 2345"
	    else
		MYSQL_BASEDIR=$(readlink -m $MYSQL_BASEDIR)
		if [ "$MYSQL_BASEDIR" = "/usr" ]; then
  		    remote_cmd $XHOSTNAME "cp $MYSQL_BASEDIR/share/mysql/mysql.server /etc/init.d/mysql"
		else
		    remote_cmd $XHOSTNAME "cp $MYSQL_BASEDIR/support-files/mysql.server  /etc/init.d/mysql"
		fi
		remote_cmd $XHOSTNAME "chmod 755 /etc/init.d/mysql"
		remote_cmd_nofail $XHOSTNAME "/usr/sbin/update-rc.d -f mysql remove"
		remote_cmd_nofail $XHOSTNAME "/usr/sbin/update-rc.d mysql stop 20 0 1 6 ."
	    fi
	    ;;
	percona_nonet)
	    if [ "$OS" = "redhat" ]; then
		remote_cmd $XHOSTNAME "chmod 755 /etc/init.d/mysql"
		remote_cmd $XHOSTNAME "/sbin/chkconfig --add mysql "
		remote_cmd $XHOSTNAME "/sbin/chkconfig mysql off --level 2345"
	    else
		remote_cmd $XHOSTNAME "chmod 755 /etc/init.d/mysql"
		remote_cmd_nofail $XHOSTNAME "/usr/sbin/update-rc.d -f mysql remove"
		remote_cmd_nofail $XHOSTNAME "/usr/sbin/update-rc.d mysql stop 20 0 1 6 ."
	    fi
	    ;;
	mariadb)
	    if [ "$OS" = "redhat" ]; then
		remote_cmd $XHOSTNAME "chmod 755 /etc/init.d/mysql"
		remote_cmd $XHOSTNAME "/sbin/chkconfig --add mysql "
		remote_cmd $XHOSTNAME "/sbin/chkconfig mysql off --level 2345"
	    else
		remote_cmd_nofail $XHOSTNAME "/usr/sbin/update-rc.d -f mysql remove"
		remote_cmd_nofail $XHOSTNAME "/usr/sbin/update-rc.d mysql stop 20 0 1 6 ."
	    fi
	    ;;
	mariadb_tgz | percona_tgz)	 	    
	    remote_cmd $XHOSTNAME "cp $MYSQL_BASEDIR/support-files/mysql.server  /etc/init.d/mysql"
	    remote_cmd $XHOSTNAME "chmod 755 /etc/init.d/mysql"
	    remote_cmd_nofail $XHOSTNAME "/usr/sbin/update-rc.d -f mysql remove"
	    remote_cmd_nofail $XHOSTNAME "/usr/sbin/update-rc.d mysql stop 20 0 1 6 ."	    
	    ;;
	*)
	    log_job_message  "Not a supported vendor" 1
	    log_job 'FAILED' 'job failed' 1
	    write_email "s9s_sw_update failed" "Not a supported vendor. Check job messages."
	    exit 1;	           	     
    esac    
    exit 0
}

function install_mysql_pkg
{   
    args=`getopt p:s:P:h:i:N:n:f: $*`
    set -- $args
    for i
    do
        case "$i" in
            -p)
                CMON_PASSWORD="$2"; shift;
                shift;;
            -i)
                CLUSTER_ID="$2"; shift;
                shift;;
            -h)
		XHOSTNAME="$2"; shift;
                shift;;
            -n)
                PKG_NAME="$2"; shift;
                shift;;
            --)
                shift; break;;
                esac
    done


    if [ -z "$XHOSTNAME" ]; then
	echo 'Syntax:'
	echo ' s9s_sw_update --install-mysql-pkg -i <clusterid> -n <package_name> -h <hostname>'
	exit 1
    fi
    if [ -z "$CLUSTER_ID" ]; then
	echo 'Syntax:'
	echo ' s9s_sw_update --install-mysql-pkg -i <clusterid> -n <package_name> -h <hostname>'
	exit 1
    fi
    init
    load_opts $CLUSTER_ID
    CMON_DB='cmon'
    echo "Do you want install $PKG_NAME on '$XHOSTNAME' (press y or Y to continue)?"
    read x
    if [ "$x" == "y" ] || [ "$x" == "Y" ]; then
	QUERY="SELECT packageid FROM ${CMON_DB}.cmon_sw_package WHERE name='$PKG_NAME' AND cid=$CLUSTER_ID"
	PID=`$MYSQL_BIN  -B -N  --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT  -e "$QUERY"`
	if [ -z "$PID" ]; then
	    echo "Invalid package name $PKG_NAME - not found."
	    exit 1
	fi
	QUERY="SELECT group_concat(concat(path,',', filename) SEPARATOR ' ') FROM ${CMON_DB}.cmon_uploads WHERE packageid='$PID' AND cid=$CLUSTER_ID"
	FILELIST=`$MYSQL_BIN  -B -N  --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT  -e "$QUERY"`
	
	if [ -z "$FILELIST" ]; then
	    echo "No files in package $PKG_NAME"
	    exit 1    
	fi
	
	if [ "$FILELIST" = "NULL" ]; then
	    echo "No files in package $PKG_NAME"
	    exit 1    
	fi
	
	remote_cmd $XHOSTNAME "mkdir -p $STAGING_DIR"
	remote_cmd $XHOSTNAME "chown  -R $SSH_USER:$SSH_USER $STAGING_DIR"
	
	if [ $OS = "debian" ]; then
	    remote_cmd $XHOSTNAME "$HTTP_PROXY apt-get -y install libssl0.9.8 libssl1.0.0  wget rsync psmisc netcat-openbsd"
	    remote_cmd_nofail $XHOSTNAME "ln --force -s /lib/x86_64-linux-gnu/libssl.so.1.0.0 /lib/x86_64-linux-gnu/libssl.so.10"
	    remote_cmd_nofail $XHOSTNAME "ln --force -s /lib/x86_64-linux-gnu/libcrypto.so.1.0.0 /lib/x86_64-linux-gnu/libcrypto.so.10"
	    remote_cmd_nofail $XHOSTNAME "ln --force -s /usr/lib/x86_64-linux-gnu/libssl.so.1.0.0 /usr/lib/x86_64-linux-gnu/libssl.so.10"
	    remote_cmd_nofail $XHOSTNAME "ln --force -s /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0 /usr/lib/x86_64-linux-gnu/libcrypto.so.10"
	fi

	for f in $FILELIST 
	do
	    path=`echo $f | awk -F, '{print $1;}'`
	    filename=`echo $f | awk -F, '{print $2;}'`    
	    remote_copy $path/$filename $XHOSTNAME $STAGING_DIR        
	done
	RPMLIST=""
	for f in $FILELIST 
	do
	    filename=`echo $f | awk -F, '{print $2;}'`    
	    ext=${filename##*.}
	    case $ext in
		gz)
		    MYSQL_BASEDIR2=${MYSQL_BASEDIR%/}
		    remote_cmd_nofail $XHOSTNAME "rm -f ${MYSQL_BASEDIR2}*"
		    remote_cmd $XHOSTNAME "tar xvfz ${STAGING_DIR}/$filename -C `dirname $MYSQL_BASEDIR`"
		    remote_cmd $XHOSTNAME "ln -s `dirname $MYSQL_BASEDIR`/`basename $filename .tar.gz`  $MYSQL_BASEDIR2"
		    ;;
		rpm)
		    RPMLIST="$RPMLIST $STAGING_DIR/$filename"
		    ;;
		deb)
		    DEBLIST="$DEBLIST $STAGING_DIR/$filename"
	            ;;
	    esac    
	done
	if [ -n "$RPMLIST" ]; then
	    remote_cmd $XHOSTNAME "rpm -Uvh $RPMLIST"
	fi
	if [ -n "$DEBLIST" ]; then
	    remote_cmd $XHOSTNAME "/usr/bin/dpkg -i $DEBLIST"
	fi
		echo "Installed $PKG_NAME on $XHOSTNAME"    
    fi
}

function install_mongodb
{
    args=`getopt p:i:P:t:d:j:h:f:V:n: $*`
    set -- $args
    for i
    do
	case "$i" in
            -p)
		CMON_PASSWORD="$2"; shift;
		shift;;
            -i)
		CLUSTER_ID="$2"; shift;
		shift;;
            -h)
		XHOSTNAME="$2"; shift;
		shift;;
            -j)
		JOBID="$2"; shift;
		shift;;
            --)
		shift; break;;
	esac
    done    
    
    if [ -z "$XHOSTNAME" ]; then
	log_job_message 'Syntax: s9s_sw_update --install-mongodb -i <clusterid> -n <package_name> -h <hostname>' 1
	log_job 'FAILED' 'job failed' 1
	exit 1
    fi
    if [ -z "$CLUSTER_ID" ]; then
	log_job_message 'Syntax: s9s_sw_update --install-mongodb -i <clusterid> -n <package_name> -h <hostname>' 1
	log_job 'FAILED' 'job failed' 1
	exit 1
    fi
    init
    log_job_message "Installing .. " 0
    sleep 5
    log_job 'RUNNING' 's9s_sw_update is running' 0
    load_opts $CLUSTER_ID
    
    if [ -z "$VENDOR" ]; then
	VENDOR=$XVENDOR
    fi

    if [ -z "$VENDOR" ]; then
	VENDOR="10gen"
    fi
    log_job_message "vendor = $VENDOR" 0

    mkdir -p $S9S_TMPDIR
    chown -R $SSH_USER:$SSH_USER $S9S_TMPDIR
    if [ -z "$DATADIR" ]; then
	log_job_message "datadir is not set in my.cnf - aborting" 1 
	log_job 'FAILED' 'job failed' 1
	exit 1
    fi
    log_job 'RUNNING' 's9s_sw_update is running' 0
    remote_cmd_nofail $XHOSTNAME "cp /etc/init.d/mysql.bak /etc/init.d/mysql"	
    if [ "$OS" = "redhat" ]; then
	remote_cmd_nofail $XHOSTNAME "rm -rf /var/lib/mysql/RPM_UPGRADE_MARKER"
	remote_cmd_nofail $XHOSTNAME "$HTTP_PROXY yum -y remove 10gen* mongo*"	
	remote_cmd_nofail $XHOSTNAME "/usr/sbin/setenforce 0 "
	remote_cmd_nofail $XHOSTNAME "echo '0' > /selinux/enforce "
        remote_cmd_nofail $XHOSTNAME "sed -i.bak 's#SELINUX=enforcing#SELINUX=permissive#g' /etc/selinux/config"
	remote_cmd_nofail $XHOSTNAME "$HTTP_PROXY yum -y install nc libaio"	
    else
	remote_cmd_nofail $XHOSTNAME "$HTTP_PROXY apt-get -y remove mongo* 10gen*"	
    fi
    log_job 'RUNNING' 's9s_sw_update is running' 0
    remote_cmd_nofail $XHOSTNAME "rm -rf /etc/my.cnf"
    remote_cmd_nofail $XHOSTNAME "rm -rf /usr/bin/wsre*"
    remote_cmd_nofail $XHOSTNAME "rm -rf /etc/mysql/*"
    remote_cmd_nofail $XHOSTNAME "rm -rf /var/lib/mysql"
    remote_cmd_nofail $XHOSTNAME "rm -rf /var/run/mysqld"
    remote_cmd_nofail $XHOSTNAME "rm -rf /etc/init.d/mysql"
    remote_cmd_nofail $XHOSTNAME "rm -rf /etc/init.d/mysql.server"
    
    remote_cmd_nofail $XHOSTNAME "mkdir -p $S9S_TMPDIR"
    remote_cmd_nofail $XHOSTNAME "chown  -R $SSH_USER:$SSH_USER $S9S_TMPDIR"

    if [ -n "$DATADIR" ]; then
	if [ "$DATADIR" != "/" ]; then
	    remote_cmd_nofail $XHOSTNAME "rm -rf $DATADIR/*"	    
	fi
    else
	log_job_message "datadir is not set in my.cnf - aborting" 1
    fi

    remote_cmd $XHOSTNAME "mkdir -p $DATADIR/"
    
    CMON_PASSWORD_ESCAPED=$(printf '%q' $CMON_PASSWORD)
    QUERY="GRANT INSERT,UPDATE,DELETE, SELECT ON $CMON_DB_DB.* TO 'cmon'@'$XHOSTNAME' IDENTIFIED BY '$CMON_PASSWORD_ESCAPED'"    
    $MYSQL_BIN  -B -N  --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT  -e "$QUERY" 2>&1 >/tmp/err.log    
    if [ $? -ne 0 ]; then 
	log_job_message "FAILED: $QUERY" 1
	log_job 'FAILED' 'job failed' 1
	exit 1
    fi	
    CMON_PASSWORD_ESCAPED=$(printf '%q' $CMON_PASSWORD)
    QUERY="GRANT SUPER ON *.* TO 'cmon'@'$XHOSTNAME' IDENTIFIED BY '$CMON_PASSWORD_ESCAPED'"    
    $MYSQL_BIN  -B -N  --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT  -e "$QUERY" 2>&1 >/tmp/err.log    
    if [ $? -ne 0 ]; then 
	log_job_message "FAILED: $QUERY" 1
	log_job 'FAILED' 'job failed' 1
	exit 1
    fi	

    
    case $VENDOR in
	10gen)
	    if [ "$OS" = "redhat" ]; then
		remote_cmd $XHOSTNAME "$HTTP_PROXY yum -y install Percona-XtraDB-Cluster-server Percona-XtraDB-Cluster-client percona-xtrabackup"
	    else
		remote_cmd $XHOSTNAME "apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10"
		remote_cmd_nofail $XHOSTNAME "killall -9 cmon mongod"
		remote_cmd_nofail $XHOSTNAME "rm -rf /etc/mongodb.conf"
		remote_cmd_nofail $XHOSTNAME "rm -rf /var/lib/mongodb"
		remote_cmd_nofail $XHOSTNAME "rm -rf /var/log/mongodb"
		remote_cmd_nofail $XHOSTNAME "touch /etc/init.d/mongodb"
		remote_cmd_nofail $XHOSTNAME "LC_ALL=C DEBIAN_FRONTEND=noninteractive $HTTP_PROXY apt-get -y remove mongo*"
		remote_cmd_nofail $XHOSTNAME "LC_ALL=C DEBIAN_FRONTEND=noninteractive $HTTP_PROXY apt-get -y remove mongodb-10gen"
		remote_cmd_nofail $XHOSTNAME "rm -rf /etc/init.d/mongo*"
		remote_cmd_nofail $XHOSTNAME "sed -i.bak '/10gen/d'  /etc/apt/sources.list"
		remote_cmd $XHOSTNAME "/bin/sh -c 'echo \"deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen\" >> /etc/apt/sources.list'"
		remote_cmd $XHOSTNAME "$HTTP_PROXY apt-get -q -y update"
		remote_cmd $XHOSTNAME "LC_ALL=C DEBIAN_FRONTEND=noninteractive $HTTP_PROXY apt-get -o Dpkg::Options::='--force-confnew' -y -q install mongodb-10gen"
		remote_cmd $XHOSTNAME "$HTTP_PROXY apt-get -y update"
	    fi
	    ;;
	tokutek)	    
	    ;;
	*)
	    log_job_message "Not a supported vendor" 1
	    log_job 'FAILED' 'job failed' 1
	    exit 1;	           	     
    esac
    
}



function update_mysql_pkg_yum
{   
    args=`getopt p:s:P:h:i:N:n:f: $*`
    set -- $args
    for i
    do
        case "$i" in
            -p)
                CMON_PASSWORD="$2"; shift;
                shift;;
            -i)
                CLUSTER_ID="$2"; shift;
                shift;;
            -h)
		XHOSTNAME="$2"; shift;
                shift;;
            --)
                shift; break;;
                esac
    done


    if [ -z "$XHOSTNAME" ]; then
	echo 'Syntax:'
	echo ' s9s_sw_update --update-mysql-yum -i <clusterid> -h <hostname>'
	exit 1
    fi
    if [ -z "$CLUSTER_ID" ]; then
	echo 'Syntax:'
	echo ' s9s_sw_update --update-mysql-yum -i <clusterid> -h <hostname>'
	exit 1
    fi
    init
    load_opts $CLUSTER_ID
    CMON_DB='cmon'
    echo "Do you want update the database yum packages on '$XHOSTNAME' (press y or Y to continue)?"
    read x
    if [ "$x" == "y" ] || [ "$x" == "Y" ]; then	
	remote_cmd $XHOSTNAME "$HTTP_PROXY yum update `rpm -qa | egrep -i  '(percona|mysql|galera|maria)'`"
	echo "Updated packages on $XHOSTNAME"		    
    fi
    echo "Updated packages on $XHOSTNAME"		    
    exit 0
}


function update_mysql_pkg_apt
{   
    args=`getopt p:s:P:h:i:N:n:f: $*`
    set -- $args
    for i
    do
        case "$i" in
            -p)
                CMON_PASSWORD="$2"; shift;
                shift;;
            -i)
                CLUSTER_ID="$2"; shift;
                shift;;
            -h)
		XHOSTNAME="$2"; shift;
                shift;;
            --)
                shift; break;;
                esac
    done


    if [ -z "$XHOSTNAME" ]; then
	echo 'Syntax:'
	echo ' s9s_sw_update --update-mysql-apt -i <clusterid> -h <hostname>'
	exit 1
    fi
    if [ -z "$CLUSTER_ID" ]; then
	echo 'Syntax:'
	echo ' s9s_sw_update --update-mysql-apt -i <clusterid> -h <hostname>'
	exit 1
    fi
    init
    load_opts $CLUSTER_ID
    CMON_DB='cmon'
    echo "Do you want update database apt packages on '$XHOSTNAME' (press y or Y to continue)?"
    read x
    if [ "$x" == "y" ] || [ "$x" == "Y" ]; then	
	####
	case $XVENDOR in
	    percona)
		remote_cmd $XHOSTNAME "LC_ALL=C DEBIAN_FRONTEND=noninteractive $HTTP_PROXY apt-get -y install percona-xtradb-cluster-galera percona-xtradb-cluster-client-5.5 percona-xtradb-cluster-server-5.5 percona-xtrabackup"
		;;
	    *)
		echo "Not a supported vendor: $XVENDOR"
		exit 1
		;;
	esac
	echo "Updated packages on $XHOSTNAME"		    
    fi
    echo "Updated packages on $XHOSTNAME"		    
    exit 0
}



function load_opts 
{
    local CLUSTER_ID=$1
    log_job_message "load opts from $CLUSTER_ID" 0
    OS=`$MYSQL_BIN -N -B -A --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT -e "select value from cmon_configuration where param='OS' AND cid=$CLUSTER_ID" 2>/dev/null`
    HTTP_PROXY=`$MYSQL_BIN -N -B -A --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT -e "select value from cmon_configuration where param='HTTP_PROXY' AND cid=$CLUSTER_ID" 2>/dev/null`
    CONFIGDIR=`$MYSQL_BIN -N -B -A --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT -e "select value from cmon_configuration where param='CONFIGDIR' AND cid=$CLUSTER_ID" 2>/dev/null`
    MYSQL_PORT=`$MYSQL_BIN -N -B -A --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT -e "select value from cmon_configuration where param='MYSQL_PORT' AND cid=$CLUSTER_ID" 2>/dev/null`
    GALERA_PORT=`$MYSQL_BIN -N -B -A --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT -e "select value from cmon_configuration where param='GALERA_PORT' AND cid=$CLUSTER_ID" 2>/dev/null`
    MYSQL_BASEDIR=`$MYSQL_BIN -N -B -A --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT -e "select value from cmon_configuration where param='MYSQL_BASEDIR' AND cid=$CLUSTER_ID" 2>/dev/null`
    STAGING_DIR=`$MYSQL_BIN -N -B -A --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT -e "select value from cmon_configuration where param='STAGING_DIR' AND cid=$CLUSTER_ID" 2>/dev/null`
    GALERA_VERSION=`$MYSQL_BIN -N -B -A --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT -e "select value from cmon_configuration where param='GALERA_VERSION' AND cid=$CLUSTER_ID" 2>/dev/null`
    MYSQL_SCRIPTDIR=`$MYSQL_BIN -N -B -A --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT -e "select value from cmon_configuration where param='SCRIPTDIR' AND cid=$CLUSTER_ID" 2>/dev/null`
    SSH_IDENTITY=`$MYSQL_BIN -N -B -A --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT -e "select value from cmon_configuration where param='SSH_IDENTITY' AND cid=$CLUSTER_ID" 2>/dev/null`
    SSH_USER=`$MYSQL_BIN -N -B -A --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT -e "select value from cmon_configuration where param='SSH_USER' AND cid=$CLUSTER_ID" 2>/dev/null`
    SSH_PORT=`$MYSQL_BIN -N -B -A --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT -e "select value from cmon_configuration where param='SSH_PORT' AND cid=$CLUSTER_ID" 2>/dev/null`
    SSH_OPTSX=`$MYSQL_BIN -N -B -A --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT -e "select value from cmon_configuration where param='SSH_OPTS' AND cid=$CLUSTER_ID" 2>/dev/null`
    SUDO=`$MYSQL_BIN -N -B -A --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT -e "select value from cmon_configuration where param='SUDO' AND cid=$CLUSTER_ID" 2>/dev/null`
    XVENDOR=`$MYSQL_BIN -N -B -A --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT -e "select value from cmon_configuration where param='VENDOR' AND cid=$CLUSTER_ID" 2>/dev/null`
    OS_USER_HOME=`$MYSQL_BIN -N -B -A --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT -e "select value from cmon_configuration where param='OS_USER_HOME' AND cid=$CLUSTER_ID" 2>/dev/null`
    NETWORKLESS=`$MYSQL_BIN -N -B -A --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT -e "select value from cmon_configuration where param='NETWORKLESS' AND cid=$CLUSTER_ID" 2>/dev/null`
    RPM=`$MYSQL_BIN -N -B -A --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT -e "select value from cmon_configuration where param='RPM' AND cid=$CLUSTER_ID" 2>/dev/null`
    DATADIR=`$MYSQL_BIN -N -B -A --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT -e "select value from cmon.cluster_config where variable='datadir' and cid=$CLUSTER_ID order by id asc limit 1" 2>/dev/null`
    MYCNF=`$MYSQL_BIN -N -B -A --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT -e "select data  from cmon.cluster_configuration where cid=$CLUSTER_ID limit 1"`

    if [ -z "$RPM" ]; then
	RPM=1
    fi

    
    SSH_OPTS="-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -oNumberOfPasswordPrompts=0 -oConnectTimeout=10"
    if [ "$SSH_IDENTITY" = "" ]; then
	SSH_IDENTITY="-oIdentityFile=${OS_USER_HOME}/.ssh/id_rsa"
    else
	SSH_IDENTITY="-oIdentityFile=$SSH_IDENTITY"
    fi

    SSH_OPTS="-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -oNumberOfPasswordPrompts=0 -oConnectTimeout=10 $SSH_IDENTITY"
    SSH_OPTS2="-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -oNumberOfPasswordPrompts=0 -oConnectTimeout=10 $SSH_IDENTITY"
    if [ "$SSH_USER" != "root" ]; then
        if [ -z "$SSH_OPTSX" ] || [ "SSH_OPTSX" = "NULL" ]; then
            SSH_OPTSX="-tt"
        fi
	#SSH_OPTS_EXTRA="-ft"
	SSH_OPTS=" -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -oNumberOfPasswordPrompts=0 -oConnectTimeout=10 $SSH_IDENTITY"
	if [ "$SUDO" = "" ] || [ "$SUDO" = "NULL" ];  then
           SUDO="sudo"
        fi
    fi
    if [ "$SSH_PORT" = "" ] || [ "$SSH_PORT" = "NULL" ];  then
        SSH_PORT="22"
    fi

    S9S_TMPDIR=$STAGING_DIR
    
    if [ "$S9S_TMPDIR" = "" ] || [ "$TMPDIR" = "NULL" ];  then
	S9S_TMPDIR="/tmp/"
	TMPDIR="/tmp/"
    fi

    if [ "$GALERA_VERSION" = "" ]; then
	GALERA_VERSION='2.x'
    fi
    
    SSH_OPTS="$SSH_OPTSX -p$SSH_PORT $SSH_OPTS"    
    SSH_OPTS2="-P$SSH_PORT $SSH_OPTS2"    
    echo $MYCNF |  sed 's#\\n#\n\r#g' > $S9S_TMPDIR/my.cnf
    DATADIR=`cat $S9S_TMPDIR/my.cnf  |grep -i datadir |head -n 1 | awk -F= '{print $2;}'`
    if [ -z "$DATADIR" ]; then
	log_job_message "datadir is not set in my.cnf , verify you have imported the configuration (Manage -> Configuration) - aborting" 1 
	exit 1
    fi        
}


ARG=$1
shift
case $ARG in
    --update-cmon-pkg)
	update_cmon_pkg $*
    ;;
    --update-mysql-pkg)
	update_mysql_pkg $*
	;;
    --install-mysql)
        install_mysql $*
	;;
    --install-mysql-pkg)
        install_mysql_pkg $*
	;;
    --install-mongodb)
        install_mongodb $*
	;;
    --update-mysql-yum)
        update_mysql_pkg_yum $*
	;;
    --update-mysql-apt)
        update_mysql_pkg_apt $*
	;;
    --list)
	list_pkgs
    ;;
    *)
	echo "Usage:"
	echo "bash ./s9s_sw_update <--update-cmon-pkg|--update-mysql-pkg|--install-mysql|--install-mysql-pkg> more options will follow"
	exit 1
	;;
esac
