#!/bin/bash

# Copyright (C) 2011 NTT DATA Corporation
# 
# This program is free software; you can redistribute it and/or
# Modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation, version 2.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details

# bash configuration
SCRIPT_DIR=$(cd $(dirname $0);pwd)
. ${SCRIPT_DIR}/install.cfg || exit -1

export PROG=`basename $0`
DIR=`dirname $0`
if [ `uname -s | grep "SunOS" | wc -l` -ne 0 ]
then
	WHOAMI="/usr/ucb/whoami"
	PS="ps -ef"
else
	WHOAMI="/usr/bin/whoami"
	PS="/usr/ucb/ps auxwww"
fi
USER=`${WHOAMI}`
HOST=`hostname -s`
HINEMOS_AGENT_HOME=${HINEMOS_AGENT_HOME_DEFAULT}
INSTALL_SLEEP=0.2


########################################
#  Local Message
########################################
# language
LANGUAGE=$2

# load language file
if [ ! -e ${SCRIPT_DIR}/conf/${LANGUAGE}_install.lng ]
then
        echo "not supported language : ${LANGUAGE}"        
	exit 1
fi
. ${SCRIPT_DIR}/conf/${LANGUAGE}_install.lng

########################################
#  OPTIONS
########################################

#
# show usage
#

function usage() {
        echo "usage : ${EXECUTED_SCRIPT} [-i|-u|-m ipaddress|-d agentid|-s]"
        echo "options:"
        echo "  -i                   install hinemos agent."
	echo "  -u                   uninstall hinemos agent."
        echo "  -m ipaddress         designate a Hinemos Manager's IP address(required with -i option)."
        echo "  -d agentid           designate Hinemos Agent's id(optional)."
        echo "  -s                   deploy Hinemos Agent's service scripts to /etc/init.d/(optional)."
	echo ""
	echo "examples:"
	echo "./${EXECUTED_SCRIPT} -i -m ipaddress -d agentid -s : when installing" 
	echo "./${EXECUTED_SCRIPT} -u -d agentid : when uninstalling"
	
}

# help chekc

for OPT in $@
do
        case $OPT in
                 --help)
                        usage
                        exit 0
                        ;;
        esac
done

# default param
ARGINST=N
SERVICESCRIPT_DEPLOY=N
MANAGER_IPADDRESS=
ARGUNINST=N

# argument check

if [ `echo "$@" | grep " "-i | wc -l` -ne 0 ]
then
	if [ `echo "$@" | grep " "-m | wc -l` -ne 1 ]
	then
		echo "${MSG_E016}" && echo "${MSG_E004}"
		usage
		exit 2
	fi
elif [ ` echo "$@" | grep " "-u | wc -l` -ne 0 ]
then
	if [ `echo "$@" | grep " "-m | wc -l` -ne 0 ]
	then
		echo "${MSG_E016}" && echo "${MSG_E004}"
		usage
		exit 3
	elif [ `echo "$@" | grep " "-s | wc -l` -ne 0 ]
	then
		echo "${MSG_E016}" && echo "${MSG_E004}"
		usage
		exit 4
	else
		echo
	fi

elif [ `echo "$@" | grep " "-m | wc -l` -ne 0 ]
then
	echo "${MSG_E016}" && echo "${MSG_E004}"
	usage
	exit 5
elif [ `echo "$@" | grep " "-s | wc -l` -ne 0 ]
then
	echo "${MSG_E016}" && echo "${MSG_E004}"
	usage
	exit 6
elif [ `echo "$@" | grep " "-d | wc -l` -ne 0 ]
then
	echo "${MSG_E016}" && echo "${MSG_E004}"
	usage
	exit 7
else
	echo

fi

# arguments

while getopts l:ium:d:s OPT
do
        case $OPT in
                i)
                        ARGS="${ARGS} v"
			ARGINST=Y
                        ;;
		u)
			ARGS="${ARGS} u"
			ARGUNINST=Y
			;;			
                m)
                        ARGS="${ARGS} m"
			if [ `echo "${OPTARG}" | grep -- "^-.*" | wc -l` -ne 0 ]
                        then
				echo "${MSG_W008}" && echo "${MSG_E004}"
				usage
				exit 8

			else	
				MANAGER_IPADDRESS=${OPTARG}
			fi
			;;
                d)
                        ARGS="${ARGS} d"
			if [ `echo "${OPTARG}" | grep / | wc -l` -ne 0 ]
			then
				echo "${MSG_E016}" && echo "${MSG_E004}"
				usage
				exit 9
			else
                        	AGENT_ID=${OPTARG}
			fi
                        ;;
                s)
                        ARGS="${ARGS} s"
                        SERVICESCRIPT_DEPLOY=Y
                        ;;
		l)
			ARGS="${ARGS} l"
			LANGUAGE=${OPTARG}
			;;
		*)
			echo "${MSG_E016}" && echo "${MSG_E004}"
			usage
			exit 10
			;;
        esac

done


########################################
# Function
########################################

function EchoOK()
{
	echo " [OK]"
}

function EchoNG()
{
	echo " [NG]"
}

function Welcome()
{
	if [ -e ${SCRIPT_DIR}/hinemos_agent/_version ]
	then
		VERSION=`cat ${SCRIPT_DIR}/hinemos_agent/_version`
	elif [ -e ${SCRIPT_DIR}/../_version ]
	then
		VERSION=`cat ${SCRIPT_DIR}/../_version`
	else
		VERSION=`UNKNOWN`
	fi
	echo
	echo "-------------------------------------------------------"
	echo "   Welcome to the installation for Hinemos Agent"
	echo "                   Version ${VERSION}"
	echo
	echo "       Copyright (C) 2013 NTT DATA Corporation"
	echo "-------------------------------------------------------"
}

function CheckEnvironment()
{

	# check os version
	echo 
	if [ "x"${INSTALL_JRE} == "xtrue" ]
	then
		echo -n ${MSG_I063}
		if [ `cat /etc/redhat-release | grep "${OS_CHECK_REGEX}" | wc -l` -eq 0 ] || \
		[ `uname -a | grep "x86_64" | wc -l` -ne ${OS_CHECK_64} ]
		then
			if [ -e /etc/redhat-release ]
			then
				OS_RELEASE=" (`cat /etc/redhat-release`, `uname -a`) "
			fi
			EchoNG
			echo ${MSG_E015} ${OS_RELEASE} && echo ${MSG_E004}
			return 255
		fi
		EchoOK
	fi
	
	# check user executed
	echo
	echo -n "${MSG_I001}"
	if [ "x"${USER} != "xroot" ]
	then
		EchoNG
		echo "${MSG_E002}" && echo "${MSG_E004}"
		return 255
	fi
	EchoOK
	
	# check selinux is Disabled
	if [ -e /etc/selinux ]
	then
		echo
		echo -n "${MSG_I002}"
		if [ "xDisabled" != "x`/usr/sbin/getenforce`" ]
		then
			EchoNG
			echo "${MSG_E003}" && echo "${MSG_E004}"
			return 255
		fi
		EchoOK
	fi
	
	# check openJDK
	if [ "x${INSTALL_JRE}" != "xtrue" ]
	then
		echo
		echo "${MSG_I059}"
		JDK_CHECK=false

		for RPM in ${RPM_JDK[@]}
		do
			echo -n "   ${RPM}..."
			rpm -q ${RPM} > /dev/null 2>&1
			if [ $? -ne 0 ]
			then
				EchoNG
			else
				EchoOK
				JDK_CHECK=true
			fi
		done

		if [ "x"${JDK_CHECK} != "xtrue" ]
		then
			EchoNG
			echo ${RPM_JDK[@]}"${MSG_E014}" && echo "${MSG_E004}"
			return 255
		fi
		EchoOK
	fi
	
	return 0
}

function ConfirmInstallation()
{
	# confirm installation
	echo
	while [ 1 ]
	do
		sleep ${INSTALL_SLEEP} && read -p "${MSG_I009} : " INPUT
		INPUT=${INPUT:-Y}
		case ${INPUT} in
			y|Y)
				break;
				;;
			n|N)
				echo "${MSG_I010}"
				return 255
				;;
			*)
				echo "${MSG_W001}"
				;;
		esac
	done
		
	return 0
}

function ConfirmUninstallation()
{
	# confirm installation
	echo
	while [ 1 ]
	do
		sleep ${INSTALL_SLEEP} && read -p "${MSG_I029} : " INPUT
		INPUT=${INPUT:-Y}
		case ${INPUT} in
			y|Y)
				break;
				;;
			n|N)
				echo "${MSG_I030}"
				return 255
				;;
			*)
				echo "${MSG_W001}"
				;;
		esac
	done
	
	return 0
}

function CheckRPM()
{
	# net-snmp
	local RET=0
	echo
	echo "${MSG_I013}" && sleep ${INSTALL_SLEEP}
	for RPM in ${RPM_SNMP[@]}
	do
		rpm -q ${RPM} > /dev/null 2>&1
		if [ ! $? -eq 0 ]
		then
			echo -n "   ${RPM}..."
			EchoNG
			echo "${MSG_W003}"
			while [ 1 ]
			do
				sleep ${INSTALL_SLEEP} && read -p "${RPM}${MSG_I079} : " INPUT
				INPUT=${INPUT:-Y}
				case ${INPUT} in
					y|Y)
						yum -y install ${RPM}
						break;
						;;
					n|N)
						break;
						;;
					*)
						echo "${MSG_W001}"
						;;
				esac
			done
		fi
		break;
	done
	for RPM in ${RPM_SNMP[@]}
	do
		echo -n "   ${RPM}..."
		rpm -q ${RPM} > /dev/null 2>&1
		if [ $? -eq 0 ]
		then
			EchoOK
		else
			EchoNG
			RET=1
		fi
	done
	if [ ${RET} -eq 0 ]
	then
		RET=0
		
		PKG_NET_SNMP=`rpm -q net-snmp`
		PKG_NET_SNMP_LIB=`rpm -q net-snmp-libs`
		
		echo -n "   ${SNMP_VERSION}..."
		if [[ "x${PKG_NET_SNMP}" < "x${SNMP_VERSION}" ]]
		then
			EchoNG
			RET=1
			echo "${MSG_W006} (current ${PKG_NET_SNMP} < recommend ${SNMP_VERSION})"
		else
			EchoOK
		fi
		
		echo -n "   ${SNMP_LIBS_VERSION}..."
		if [[ "x${PKG_NET_SNMP_LIB}" < "x${SNMP_LIBS_VERSION}" ]]
		then
			EchoNG
			RET=1
			echo "${MSG_W006} (current ${PKG_NET_SNMP_LIB} < recommend ${SNMP_LIBS_VERSION})"
		else
			EchoOK
		fi
	else
		echo "${MSG_W003}"
		echo "${MSG_W004}"
	fi
	
	if [ ${RET} -ne 0 ]
	then
		while [ 1 ]
		do
			sleep ${INSTALL_SLEEP} && read -p "${MSG_I012} : " INPUT
			INPUT=${INPUT:-N}
			case ${INPUT} in
				y|Y)
					break
					;;
				n|N)
					echo "${MSG_I010}"
					return 255
					;;
				*)
					echo "${MSG_W001}"
					;;
			esac
		done
	fi
	
	# expect and so on (for collective run)
	RET=0
	echo "${MSG_I013}" && sleep ${INSTALL_SLEEP}
	for RPM in ${RPM_CRUN[@]}
	do
		rpm -q ${RPM} > /dev/null 2>&1
		if [ ! $? -eq 0 ]
		then
			echo -n "   ${RPM}..."
			EchoNG
			echo "${MSG_W005}"
			while [ 1 ]
			do
				sleep ${INSTALL_SLEEP} && read -p "${RPM}${MSG_I079} : " INPUT
				INPUT=${INPUT:-Y}
				case ${INPUT} in
					y|Y)
						yum -y install ${RPM}
						break;
						;;
					n|N)
						break;
						;;
					*)
						echo "${MSG_W001}"
						;;
				esac
			done
		fi
	done
	for RPM in ${RPM_CRUN[@]}
	do
		echo -n "   ${RPM}..."
		rpm -q ${RPM} > /dev/null 2>&1
		if [ $? -eq 0 ]
		then
			EchoOK
		else
			EchoNG
			RET=1
		fi
	done
	if [ ${RET} -ne 0 ]
	then
		echo "${MSG_W005}"
		echo "${MSG_W004}"
		
		while [ 1 ]
		do
			sleep ${INSTALL_SLEEP} && read -p "${MSG_I080} : " INPUT
			INPUT=${INPUT:-Y}
			case ${INPUT} in
				y|Y)
					break
					;;
				n|N)
					echo "${MSG_I010}"
					return 255
					;;
				*)
					echo "${MSG_W001}"
					;;
			esac
		done
	fi
	
	return 0
}

function CheckInstallDirectory()
{
	if [ "${ARGINST}" == "Y" ]	
	then	
		if [ "${AGENT_ID}" != "" ]
		then
			HINEMOS_AGENT_HOME=${HINEMOS_AGENT_HOME_DEFAULT}_${AGENT_ID} && ReloadMSG
			ID=_${AGENT_ID}
		else
			HINEMOS_AGENT_HOME=${HINEMOS_AGENT_HOME}
			ID=""
		fi
		if [ -d ${HINEMOS_AGENT_HOME} ]
		then
			echo "${MSG_W007}"
			echo "${MSG_E004}"
			exit 19
		fi
		mkdir -p ${HINEMOS_AGENT_HOME}
		if [ $? -ne 0 ]
		then
			echo "${MSG_E005}" && echo "${MSG_E004}"
			return 20
		fi
	echo "${MSG_I016}"

	else	

		echo
			while [ 1 ]
	do
		read -p "${MSG_I044} : " INPUT
		INPUT=${INPUT:-Y}
			case ${INPUT} in
				y|Y)
					HINEMOS_AGENT_HOME=${HINEMOS_AGENT_HOME_DEFAULT}
					ID=""
					break
					;;
				n|N)
					while [ 1 ]
					do
						read -p "${MSG_I045} : " INPUT
						INPUT=${INPUT}
						case "x${INPUT}" in
							x)
								echo "${MSG_W015}"
								;;
							*)
								if [ ${#INPUT} -gt 32 ]
								then
									echo "${MSG_W016}"
									continue
								fi
								ID=_${INPUT} && ReloadMSG
								read -p "${MSG_I046} : " INPUT
								INPUT=${INPUT:-Y}
								case ${INPUT} in
									y|Y)
										HINEMOS_AGENT_HOME=${HINEMOS_AGENT_HOME_DEFAULT}${ID} && ReloadMSG
										break
										;;
									n|N)
										echo "${MSG_I018}"
										;;
									*)
										echo "${MSG_W001}"
										;;
								esac
						esac
					done
					break
					;;
				*)
					echo "${MSG_W001}"
					;;
			esac
	done
	
	echo
		ReloadMSG
		echo "${MSG_I015}" && sleep ${INSTALL_SLEEP}
		if [ -d ${HINEMOS_AGENT_HOME} ]
		then
			echo "${MSG_W007}"
			ls -lA ${HINEMOS_AGENT_HOME} | sed "s/^/   /"
			while [ 1 ]
			do
				sleep ${INSTALL_SLEEP} && read -p "${MSG_I012} : " INPUT
				INPUT=${INPUT:-N}
				case ${INPUT} in
					y|Y)
						# force installation
						break
						;;
					n|N)
						echo "${MSG_I010}"
						return 255
						;;
					*)
						echo "${MSG_W001}"
						;;
				esac
			done
		else
			mkdir -p ${HINEMOS_AGENT_HOME}
			if [ $? -ne 0 ]
			then
				echo "${MSG_E005}" && echo "${MSG_E004}"
				return 22
			fi
			echo "${MSG_I016}"
		fi
		return 0
	fi
}

function InputIpAddress()
{
	if [ "${ARGINST}" == "Y" ]	
	then
		MANAGER_IP_ADDRESS=${MANAGER_IPADDRESS}
		return 0
	else
		while [ 1 ]
		do
			sleep ${INSTALL_SLEEP} && read -p "${MSG_I017} : " MANAGER_IP_ADDRESS
			read -p "${MANAGER_IP_ADDRESS} ${MSG_I019} : " INPUT
			INPUT=${INPUT:-Y}
			case ${INPUT} in
				y|Y)
					# force installation
					break
					;;
				n|N)
					echo "${MSG_I018}"
					;;
				*)
					echo "${MSG_W001}"
					;;
			esac
		done
		return 0
	fi
}

function CopyFiles()
{
	echo
	echo -n "${MSG_I020}" && sleep ${INSTALL_SLEEP}
	cp -pr ${SCRIPT_DIR}/hinemos_agent/* ${HINEMOS_AGENT_HOME} \
		&& mkdir -p ${HINEMOS_AGENT_HOME}/sbin/conf \
		&& cp -pr ${SCRIPT_DIR}/install.cfg ${HINEMOS_AGENT_HOME}/sbin \
		&& cp -pr ${SCRIPT_DIR}/agent_installer_* ${HINEMOS_AGENT_HOME}/sbin \
		&& cp -pr ${SCRIPT_DIR}/conf/*_install.lng ${HINEMOS_AGENT_HOME}/sbin/conf \
		&& cp -p ${SCRIPT_DIR}/LICENSE ${HINEMOS_AGENT_HOME}/
	if [ $? -ne 0 ]
	then
		EchoNG
		echo "${MSG_E004}"
		return 23
	fi
	EchoOK
	return 0
}

function InstallJRE()
{
	#install jre if INSTALL_JRE is true
	if [ "x${INSTALL_JRE}" == "xtrue" ]
	then
		echo "${MSG_I022}" && sleep 1.5
		cp ${SCRIPT_DIR}/thirdparty/${JAVA_PACKAGE} ${HINEMOS_AGENT_HOME} \
			&& cd ${HINEMOS_AGENT_HOME} \
			&& chmod a+x ./${JAVA_PACKAGE} \
			&& ${HINEMOS_AGENT_HOME}/${JAVA_PACKAGE} \
			&& rm ${HINEMOS_AGENT_HOME}/${JAVA_PACKAGE} \
			&& cd ${SCRIPT_DIR}
		if [ $? -ne 0 ]
		then
			echo "${MSG_E006}" && echo "${MSG_E004}"
			return 24
		fi
	fi
}

function ConfigureFiles()
{
	echo
	echo "${MSG_I021}" && sleep ${INSTALL_SLEEP}
	
	# configure hinemos.cfg
	sed -e "s|%%HINEMOS_AGENT_HOME%%|${HINEMOS_AGENT_HOME}|" \
	-e "s/%%ID%%/${ID}/" \
	-e "s/%%LOCALE%%/${LOCALE}/" \
	${SCRIPT_DIR}/conf/hinemos_agent.cfg > ${HINEMOS_AGENT_HOME}/conf/hinemos_agent.cfg.tmp
	if [ $? -ne 0 ]
	then
		EchoNG
		echo "${MSG_E004}"
		return 25
	fi
		
	# edit JAVA_HOME
	echo ""
	echo "${MSG_I057}"
	echo "----------"
	${JAVA_DIR_OSORIGINAL}/bin/java -version
	echo "----------"
	echo "${MSG_I058}"
	sed -e "s|${HINEMOS_AGENT_HOME}/%%JAVA_DIR%%|${JAVA_DIR_OSORIGINAL}|" \
	${HINEMOS_AGENT_HOME}/conf/hinemos_agent.cfg.tmp > ${HINEMOS_AGENT_HOME}/conf/hinemos_agent.cfg
	RET=$?
	rm -f ${HINEMOS_AGENT_HOME}/conf/hinemos_agent.cfg.tmp
	if [ ${RET} -ne 0 ]
	then
		EchoNG
		echo "${MSG_E004}"
		return 26
	fi
	
	# configure Agent
	sed -e "s/%%MANAGER_IP_ADDRESS%%/${MANAGER_IP_ADDRESS}/" \
		-e "s|%%AGENT_HOME%%|${HINEMOS_AGENT_HOME}|" \
		${SCRIPT_DIR}/hinemos_agent/conf/Agent.properties > ${HINEMOS_AGENT_HOME}/conf/Agent.properties
	if [ $? -ne 0 ]
	then
		EchoNG
		echo "${MSG_E004}"
		return 27
	fi
	
	sed -e "s|%%HINEMOS_AGENT_HOME%%|${HINEMOS_AGENT_HOME}|" \
		-e "s/%%HOST%%/${HOST}/" \
		${SCRIPT_DIR}/hinemos_agent/conf/log4j.properties > ${HINEMOS_AGENT_HOME}/conf/log4j.properties
	if [ $? -ne 0 ]
	then
		EchoNG
		echo "${MSG_E004}"
		return 28
	fi
	
	# configure agent_start.sh
	sed -e "s/%%JAVA_CHECK_REGEX%%/${JAVA_CHECK_REGEX}/" \
		-e "s/%%OPENJDK_CHECK_REGEX%%/${OPENJDK_CHECK_REGEX}/" \
		${SCRIPT_DIR}/hinemos_agent/bin/agent_start.sh > ${HINEMOS_AGENT_HOME}/bin/agent_start.sh
	if [ $? -ne 0 ]
	then
		EchoNG
		echo "${MSG_E004}"
		return 255
	fi
	
	EchoOK
	
	echo ""
	echo "${MSG_I071}" && EchoOK
		
	return 0
}

function CopyServiceScripts()
{
	if [ "${ARGINST}" == "Y" ]
	then
		if [ "${SERVICESCRIPT_DEPLOY}" == "Y" ]
		then
			cp -p ${SCRIPT_DIR}/hinemos_agent/sbin/service/hinemos_agent /etc/init.d/hinemos_agent${ID}
			chkconfig --add hinemos_agent${ID}
			echo "${MSG_I051}"
		else
			echo "${MSG_I052}"
		fi
	else
	
		echo 
		while [ 1 ]
		do
			read -p "${MSG_I050} : " INPUT
			INPUT=${INPUT:-Y}
			case ${INPUT} in
				y|Y)
					cp -p ${SCRIPT_DIR}/hinemos_agent/sbin/service/hinemos_agent /etc/init.d/hinemos_agent${ID}
					chkconfig --add hinemos_agent${ID}
					echo "${MSG_I051}"
					break
					;;
				n|N)
					echo "${MSG_I052}"
					break
					;;
				*)
					echo "${MSG_W001}"
					;;
			esac
		done
		return 0
	fi
}

function ConfigureRsyslog()
{	
	# configure rsyslog.conf
	if [ ! -e ${RSYSLOG_CONF} ] && [ ! -e ${SYSLOG_CONF} ]
	then
		echo "${MSG_I062}"
	fi
	
	if [ -e ${RSYSLOG_CONF} ] && [ `grep -F "@${MANAGER_IP_ADDRESS}:514" ${RSYSLOG_CONF} | wc -l` -eq 0 ] && [ `grep "rsyslog_hinemos.conf" ${RSYSLOG_CONF} | wc -l` -eq 0 ]
	then
		echo
		echo -n "${MSG_I060}" && sleep ${INSTALL_SLEEP}
		cp -pr ${RSYSLOG_CONF} ${RSYSLOG_CONF}.hinemos_bkup
		echo "#" >> ${RSYSLOG_CONF}
		echo "# Hinemos Agent ${VERSION} (for syslog monitoring)" >> ${RSYSLOG_CONF}
		echo "#" >> ${RSYSLOG_CONF}
		echo "*.info;mail.none;authpriv.none;cron.none        @@${MANAGER_IP_ADDRESS}:514" >> ${RSYSLOG_CONF}
		
		# restart rsyslog
		service rsyslog status
		if [ $? -ne 0 ]
		then
			echo "${MSG_I064}"
			return 0
		fi
		
		service rsyslog restart
		if [ $? -ne 0 ]
		then
			EchoNG
			echo "${MSG_E004}"
			return 29
		fi
		
		echo "${MSG_I061} (appended \"*.info;mail.none;authpriv.none;cron.none        @${MANAGER_IP_ADDRESS}:514\")"
		return 0
	fi
	
	if [ -e ${SYSLOG_CONF} ]
	then
		echo -n "${MSG_I065}" && sleep ${INSTALL_SLEEP}
		cp -pr ${SYSLOG_CONF} ${SYSLOG_CONF}.hinemos_bkup
		echo "#" >> ${SYSLOG_CONF}
		echo "# Hinemos Agent ${VERSION} (for syslog monitoring)" >> ${SYSLOG_CONF}
		echo "#" >> ${SYSLOG_CONF}
		echo "*.info;mail.none;authpriv.none;cron.none		@${MANAGER_IP_ADDRESS}" >> ${SYSLOG_CONF}

		# restart syslog
		service syslog status
		if [ $? -ne 0 ]
		then
			echo "${MSG_I066}"
			return 0
		fi

		service syslog restart
		if [ $? -ne 0 ]
		then
			EchoNG
			echo "${MSG_E004}"
			return 30
		fi


		echo "${MSG_I067} (appended \"*.info;mail.none;authpriv.none;cron.none		@${MANAGER_IP_ADDRESS}\")"
		return 0
	fi
	
	return 0
}

function ConfigureNetSnmp()
{	
	# configure snmpd.conf
	if [ -e ${SNMP_CONF} ] && [ `grep -E "^view.+systemview.+included.+.1\.3\.6\.1$" ${SNMP_CONF} | wc -l` -eq 0 ]
	then
		echo
		echo -n "${MSG_I023}" && sleep ${INSTALL_SLEEP}
		cp -pr ${SNMP_CONF} ${SNMP_CONF}.saved_`date +"%Y%m%d-%H%M%S"`
		echo "view    systemview    included   .1.3.6.1" >> ${SNMP_CONF}
		echo "# disk / 10000" >> ${SNMP_CONF}
		echo "# disk /var 10000" >> ${SNMP_CONF}
		
		# configure runlevel and restart snmpd
		/etc/init.d/snmpd status > /dev/null 2>&1 && /etc/init.d/snmpd stop
		chkconfig --level 2345 snmpd on && /etc/init.d/snmpd start
		if [ $? -ne 0 ]
		then
			EchoNG
			echo "${MSG_E004}"
			return 31
		fi
		
		echo "${MSG_I024} (appended \"view systemview included .1.3.6.1\")"
		echo "${MSG_I043}"
		echo "${MSG_W014}"
	fi
	
	return 0
}

function CheckProcess()
{
	local PID
	
	echo && echo "${MSG_I031}" && sleep ${INSTALL_SLEEP}
	
	# Hinemos Agent
	if [ -e /var/run/hinemos_agent${DEL_ID}.pid ]
	then
		read PID < /var/run/hinemos_agent${DEL_ID}.pid
		if [ `ps --no-headers --pid ${PID} e | grep "/bin/java.*com.clustercontrol.agent.Agent" | wc -l` -gt 0 ]
		then
			echo "${MSG_E008}"
			return 32
		fi
	fi
	
	return 0
}

function RemoveFiles()
{
	if [ "${ARGUNINST}" == "Y" ]
	then
		DEL_ID=""
		SERVICESCRIPT_DELETE=N
		
		if [ "${AGENT_ID}" != "" ]
		then
			HINEMOS_AGENT_HOME=${HINEMOS_AGENT_HOME_DEFAULT}_${AGENT_ID} && ReloadMSG
			DEL_ID=_${AGENT_ID} && ReloadMSG
		else
			HINEMOS_AGENT_HOME=${HINEMOS_AGENT_HOME}
			DEL_ID=""
		fi
		
		if [ ! -d ${HINEMOS_AGENT_HOME} ]
		then
			echo "${MSG_I038}"
			echo "${MSG_I008}"
			exit 0
		fi		

		CheckProcess || return 255

		if [ `ls -l /etc/init.d/ | grep hinemos_agent${DEL_ID}$ | wc -l` -ne 0 ]
                then
                       	chkconfig --del hinemos_agent${DEL_ID}
                       	rm -rf /etc/init.d/hinemos_agent${DEL_ID}
                       	echo "${MSG_I054}"
			SERVICESCRIPT_DELETE=Y
               	fi
		
		rm -rf ${HINEMOS_AGENT_HOME}
		if [ $? -ne 0 ]
		then
			echo "${MGS_E011}"
			return 31
		fi
	else	
		echo
		if [ `find /opt -mindepth 1 -maxdepth 1 -type d -path "/opt/hinemos_agent*" | wc -l` -ne 0 ]
		then
			echo "${MSG_I047}"
			find /opt -mindepth 1 -maxdepth 1 -type d -path "/opt/hinemos_agent*"
			
			# if installed script is executed
			DEL_ID="undef"
			if [ -e ${SCRIPT_DIR}/../conf/hinemos_agent.cfg ]
			then
				. ${SCRIPT_DIR}/../conf/hinemos_agent.cfg
				DEL_ID=${ID} && ReloadMSG
				
				echo
				while [ 1 ]
				do
					sleep ${INSTALL_SLEEP} && read -p "${MSG_I055} : " INPUT
					INPUT=${INPUT:-Y}
					case ${INPUT} in
						y|Y)
							break;
							;;
						n|N)
							echo "${MSG_I030}"
							return 255
							;;
						*)
							echo "${MSG_W001}"
							;;
					esac
				done
			fi
			
			# if default agent is not removed
			if [ "x${DEL_ID}" == "xundef" ]
			then
				echo
				echo "${MSG_I048}"
				read -p "/opt/hinemos_agent" INPUT
				
				DEL_ID=${INPUT}
				echo
				HINEMOS_AGENT_HOME=/opt/hinemos_agent${DEL_ID} && ReloadMSG
			fi
			
			echo
			echo "${MSG_I037}"
			if [ ! -d ${HINEMOS_AGENT_HOME} ]
			then
				echo "${MSG_I038}"
				return 32
			fi
			
			CheckProcess || return 255
			
			while [ 1 ]
			do
				sleep ${INSTALL_SLEEP} && read -p "${MSG_I039} : " INPUT
				INPUT=${INPUT:-Y}
				case ${INPUT} in
					y|Y)
						break
						;;
					n|N)
						echo "${MSG_W013}"
						return 0
						;;
					*)
						echo "${MSG_W001}"
						;;
				esac
			done
			
			if [ `ls -l /etc/init.d/ | grep hinemos_agent${DEL_ID}$ | wc -l` -ne 0 ]
			then
				chkconfig --del hinemos_agent${DEL_ID}
				rm -rf /etc/init.d/hinemos_agent${DEL_ID}
				echo "${MSG_I054}"
			fi
			
			rm -rf ${HINEMOS_AGENT_HOME}
			if [ $? -ne 0 ]
			then
				echo "${MSG_E011}"
				return 33
			fi
			echo "${MSG_I040}"
			
		else
			echo "${MSG_I049}"
			return 34
		fi
	fi
	return 0
}
	
function RestoreSyslogConf()
{
	echo ${MSG_I068}
	SAVESTR="saved_"`date +"%Y%m%d-%H%M%S"`
	if [ -e ${SYSLOG_CONF}.hinemos_bkup ]
	then
		cp ${SYSLOG_CONF} ${SYSLOG_CONF}.${SAVESTR}
		cp ${SYSLOG_CONF}.hinemos_bkup ${SYSLOG_CONF}
		rm -Rf ${SYSLOG_CONF}.hinemos_bkup
		echo ${MSG_I069}${SYSLOG_CONF}.${SAVESTR}
	fi

	if [ -e ${RSYSLOG_CONF}.hinemos_bkup ]
	then
		cp ${RSYSLOG_CONF} ${RSYSLOG_CONF}.${SAVESTR}
		cp ${RSYSLOG_CONF}.hinemos_bkup ${RSYSLOG_CONF}
		rm -Rf ${RSYSLOG_CONF}.hinemos_bkup
		echo ${MSG_I070}${RSYSLOG_CONF}.${SAVESTR}
	fi
}

function ReloadMSG()
{
	if [ -e ${SCRIPT_DIR}/conf/${LANGUAGE}_install.lng ]
	then
		. ${SCRIPT_DIR}/conf/${LANGUAGE}_install.lng
	else
		echo "failed reloading a language file. (${LANGUAGE}_install.lng)"
	fi
}

function InstallInfo
{
	echo ""
	echo "${MSG_I072}"
	echo "----------------"
	echo "${MSG_I073}""${MANAGER_IP_ADDRESS}"
	echo "${MSG_I074}""${HINEMOS_AGENT_HOME}"
	ReloadMSG
	echo "${MSG_I075}""${SERVICESCRIPT_DEPLOY}"
	echo "----------------"
}

function UninstallInfo
{
	echo ""
	ReloadMSG
	echo "${MSG_I076}"
	echo "----------------"
	echo "${MSG_I077}""${HINEMOS_AGENT_HOME}"
	echo "${MSG_I078}""${SERVICESCRIPT_DELETE}"
	echo "----------------"
}

function SIGINTExit()
{
	echo
	echo "${MSG_E004} (SIGINT)"
	exit 35
}

########################################
# SHELL
########################################

# define trap
trap SIGINTExit 2

# arg install
if [ "${ARGINST}" == "Y" ]
then
	# check environment
	CheckEnvironment || exit -2
	
	# main loop
	CheckInstallDirectory || continue
	CheckRPM || continue
	InputIpAddress || continue
	CopyFiles || continue
	InstallJRE || continue
	ConfigureFiles || continue
	CopyServiceScripts || continue
	ConfigureRsyslog || continue
	ConfigureNetSnmp || continue
	InstallInfo || continue
	echo && echo "${MSG_I028}" && echo	
	exit 0
fi

#arg uninstall
if [ "${ARGUNINST}" == "Y" ]
then
	RemoveFiles || continue
	RestoreSyslogConf || continue
	UninstallInfo || continue
	echo && echo "${MSG_I041}"
	echo && echo "${MSG_I008}" && echo
	exit 0
fi


	# print welcome
	Welcome
	
	# check environment
	CheckEnvironment || exit 36

	# main loop
	while [ 1 ]
	do
		sleep ${INSTALL_SLEEP} && echo
		echo "${MSG_I003}"
		if [ -e ${SCRIPT_DIR}/hinemos_agent ]
		then
			# if installed script is executed
			echo "${MSG_I004}"
		fi
		echo "${MSG_I005}"
		echo "${MSG_I006}"
		echo
		read -p "${MSG_I007}" INPUT
		case ${INPUT} in
			1)
				if [ -e ${SCRIPT_DIR}/hinemos_agent ]
				then
					ConfirmInstallation || continue
					CheckInstallDirectory || continue
					CheckRPM || continue
					InputIpAddress
					CopyFiles || continue
					InstallJRE || continue
					ConfigureFiles || continue
					CopyServiceScripts || continue
					ConfigureRsyslog || continue
					ConfigureNetSnmp || continue
					echo && echo "${MSG_I028}" && echo
				else
					# if installed script is executed
					echo "${MSG_W001}"
				fi
				;;
			2)
				ConfirmUninstallation || continue
				RemoveFiles || continue
				RestoreSyslogConf || continue
				echo && echo "${MSG_I041}"
				echo && echo "${MSG_I008}" && echo
				# if installed script is executed
				if [ ! -e ${SCRIPT_DIR}/hinemos_agent ]
				then
					break
				fi
				;;
			9)
				echo && echo "${MSG_I008}" && echo
				break
				;;
			*)
				echo "${MSG_W001}"
				;;
		esac
		
	done



exit 0

