#!/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 Variable
########################################

LANGUAGE=$1

########################################
#  Local Message
########################################

# 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

########################################
# 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) 2012 NTT DATA Corporation"
	echo "-------------------------------------------------------"
}

function CheckEnvironment()
{
	# check os version
	echo
	echo -n ${MSG_I063}
	if [ -e /etc/redhat-release ]
	then
		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
			OS_RELEASE=" (`cat /etc/redhat-release`, `uname -a`) "
			EchoNG
			echo ${MSG_E015} ${OS_RELEASE} && echo ${MSG_E004}
			return 255
		fi
		AMAZON_LINUX=false
	elif [ -e /etc/system-release ]
	then
		if [ `cat /etc/system-release | grep "${OS_CHECK_REGEX}" | wc -l` -eq 0 ] || \
		   [ `uname -a | grep "x86_64" | wc -l` -ne ${OS_CHECK_64} ]
		then
			OS_RELEASE=" (`cat /etc/system-release`, `uname -a`) "
			EchoNG
			echo ${MSG_E015} ${OS_RELEASE} && echo ${MSG_E004}
			return 255
		fi
		AMAZON_LINUX=true
	else
		EchoNG
		echo ${MSG_E015} && echo ${MSG_E004}
		return 255
	fi
	EchoOK
	
	# 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
	echo
	echo -n "${MSG_I002}"
	if [ "x${SELINUX_CHECK}" == "xtrue" ] && [ "xDisabled" != "x`/usr/sbin/getenforce`" ]
	then
		EchoNG
		echo "${MSG_E003}" && echo "${MSG_E004}"
		return 255
	fi
	EchoOK
	
	# check openJDK
	if [ "x${INSTALL_JRE}" != "xtrue" ]
	then
		echo
		echo "${MSG_I059}"
		for RPM in ${RPM_JDK[@]}
		do
			echo -n "   ${RPM}..."
			rpm -q ${RPM} > /dev/null 2>&1
			if [ $? -ne 0 ]
			then
				EchoNG
				echo ${RPM}"${MSG_E014}" && echo "${MSG_E004}"
				return 255
			fi
		done
		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}
	if [ "x${AMAZON_LINUX}" == "xtrue" ]
	then
		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_I071} : " 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
	fi
	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}
	if [ "x${AMAZON_LINUX}" == "xtrue" ]
	then
		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_I071} : " INPUT
					INPUT=${INPUT:-Y}
					case ${INPUT} in
						y|Y)
							yum -y install ${RPM}
							break;
							;;
						n|N)
							break;
							;;
						*)
							echo "${MSG_W001}"
							;;
					esac
				done
			fi
		done
	fi
	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_I012} : " INPUT
			INPUT=${INPUT:-N}
			case ${INPUT} in
				y|Y)
					break
					;;
				n|N)
					echo "${MSG_I010}"
					return 255
					;;
				*)
					echo "${MSG_W001}"
					;;
			esac
		done
	fi
	
	return 0
}

function CheckInstallDirectory()
{
	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 255
		fi
		echo "${MSG_I016}"
	fi
	return 0
}

function InputIpAddress()
{
	echo
	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
}

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 255
	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 255
		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 255
	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 255
	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 255
	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 255
	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
	
	return 0
}

function CopyServiceScripts()
{
	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
}

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 255
		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 255
		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}
		
		# configure runlevel and restart snmpd
		service snmpd status > /dev/null 2>&1 && service snmpd stop
		chkconfig --level 2345 snmpd on && service snmpd start
		if [ $? -ne 0 ]
		then
			EchoNG
			echo "${MSG_E004}"
			return 255
		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 255
		fi
	fi
	
	return 0
}

function RemoveFiles()
{
	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 255
		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 255
		fi
		echo "${MSG_I040}"
		
	else
		echo "${MSG_I049}"
		return 255
	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 SIGINTExit()
{
	echo
	echo "${MSG_E004} (SIGINT)"
	exit -1
}

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

#
# check parameters
#
if [ $# -ne 1 ]; then
	echo "${MSG_E001}"
	exit -1
fi

# define trap
trap SIGINTExit 2

# print welcome
Welcome

# check environment
CheckEnvironment || exit -2

# 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 || continue
				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
