#!/bin/sh

# Copyright (C) since 2006 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`
USER=`/usr/bin/whoami`
HOST=`hostname`

########################################
#  Local Variable
########################################

LANGUAGE=$1

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

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

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

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

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

function Welcome()
{
	VERSION=`cat ${SCRIPT_DIR}/hinemos/_version`
	echo
	echo "-------------------------------------------------------"
	echo "   Welcome to the installation for Hinemos Manager"
	echo "                             Version ${VERSION}"
	echo
	echo "       Copyright (C) since 2006 NTT DATA Corporation"
	echo "-------------------------------------------------------"
}

function ConfirmInstallation()
{
	echo
	while [ 1 ]
	do
		sleep 0.5 && read -p "${MSG_I001} : " INPUT
		INPUT=${INPUT:-Y}
		case ${INPUT} in
			y|Y)
				break
				;;
			n|N)
				echo ${MSG_I003}
				return -1
				;;
			*)
				echo ${MSG_W001}
				;;
		esac
	done
	return 0
}

function CheckEnvironment()
{
	# check user executed
	echo
	echo -n ${MSG_I002} && sleep 0.5
	if [ "x"${USER} != "xroot" ]
	then
		EchoNG
		echo ${MSG_E002} && echo ${MSG_E004}
		return -1
	fi
	EchoOK
	
	# check selinux is Disabled
	echo
	echo -n ${MSG_I031} && sleep 0.5
	if [ "xDisabled" != "x`/usr/sbin/getenforce`" ]
	then
		EchoNG
		echo ${MSG_E007} && echo ${MSG_E004}
		return -1
	fi
	EchoOK
	
	# check agent existence
	echo
	echo -n ${MSG_I049} && sleep 0.5
	if [ `find /opt -mindepth 1 -maxdepth 1 -type d -path "/opt/hinemos_agent*" | wc -l` -ne 0 ]
	then
		EchoNG
		echo ${MSG_E013} && echo ${MSG_E014}
		return -1
	fi
	EchoOK
	
	return 0
}

function CheckInstallDirectory()
{
	echo
	echo ${MSG_I004} && sleep 0.5
	if [ -d ${HINEMOS_HOME} ]
	then
		echo ${MSG_W002}
		ls -lA ${HINEMOS_HOME} | sed "s/^/   /"
		while [ 1 ]
		do
			sleep 0.5 && read -p "${MSG_I005} : " INPUT
			INPUT=${INPUT:-N}
			case ${INPUT} in
				y|Y)
					# force installation
					break
					;;
				n|N)
					echo ${MSG_E004}
					return -1
					;;
				*)
					echo ${MSG_W001}
					;;
			esac
		done
	else
		mkdir -p ${HINEMOS_HOME}
		if [ $? -ne 0 ]
		then
			echo ${MSG_E006} && echo ${MSG_E004}
			return -1
		fi
		echo ${MSG_I007}
	fi
	return 0
}

function CreateUser()
{
	echo
	echo ${MSG_I006} && sleep 0.5
	id ${HINEMOS_USER} > /dev/null 2>&1
	RET=$?
	if [ ${RET} -eq 0 ]
	then
		# if user exists
		echo ${MSG_W003}
		if [ `grep "^${HINEMOS_GROUP}:" /etc/group | cut -d : -f 4 | grep ${HINEMOS_USER} | wc -l` -eq 0 ]
		then
			# if user is not belong to group
			echo ${MSG_E009} && echo ${MSG_E004}
			return -1
		fi
	else
		if [ `cut -d : -f 1 /etc/group | grep "^${HINEMOS_GROUP}$" | wc -l` -eq 0 ]
		then
			/usr/sbin/groupadd ${HINEMOS_GROUP}
			if [ $? -ne 0 ]
			then
				echo ${MSG_E010} && echo ${MSG_E004}
				return -1
			fi
			echo ${MSG_I033}
		fi
		/usr/sbin/useradd ${HINEMOS_USER} -g ${HINEMOS_GROUP} -G ${HINEMOS_GROUP} \
			&& /usr/bin/passwd ${HINEMOS_USER}
		if [ $? -ne 0 ]
		then
			echo ${MSG_E005} && echo ${MSG_E004}
			return -1
		fi
		echo ${MSG_I008}
	fi
	
	chown -R ${HINEMOS_USER}:${HINEMOS_GROUP} ${HINEMOS_HOME}
	if [ $? -ne 0 ]
	then
		echo ${MSG_E008} && return -1
	fi
	echo ${MSG_I032}
	
	return 0
}

function InputIpAddress()
{
	echo
	echo ${MSG_I038}
	INTERFACES=`ifconfig | grep "Link encap:Ethernet" | awk '{print $1}'`
	for INTERFACE in ${INTERFACES}
	do
		IFIPADDR=`ifconfig ${INTERFACE} | grep "inet addr" | sed "s/^.*inet addr:\([0123456789]\{1,3\}\.[0123456789]\{1,3\}\.[0123456789]\{1,3\}\.[0123456789]\{1,3\}\).*$/\1/"`
		IFNETMASK=`ifconfig ${INTERFACE} | grep "inet addr" | sed "s/^.*Mask:\([0123456789]\{1,3\}\.[0123456789]\{1,3\}\.[0123456789]\{1,3\}\.[0123456789]\{1,3\}\).*$/\1/"`
		if [ "x${INTERFACE}" != "x" ] && [ "x${IFIPADDR}" != "x" ] && [ "x${IFNETMASK}" != "x" ]
		then
			echo "   ${INTERFACE} - ${IFIPADDR} / ${IFNETMASK}"

			if [ "x${DEFAULT_IFIPADDR}" == "x" ] 
			then
				DEFAULT_IFIPADDR=${IFIPADDR};
			fi
		fi
	done
	while [ 1 ]
	do 
		sleep 0.5 && read -p "${MSG_I009}${DEFAULT_IFIPADDR}${MSG_I045} : " IP_ADDRESS
		IP_ADDRESS=${IP_ADDRESS:-${DEFAULT_IFIPADDR}}
		if [ `echo ${IP_ADDRESS} | grep -E "^[0123456789]{1,3}\.[0123456789]{1,3}\.[0123456789]{1,3}\.[0123456789]{1,3}$" | wc -l` -ne 1 ]
		then
			echo ${MSG_W007} && echo ${MSG_I011}
			continue
		fi
		read -p "${IP_ADDRESS} ${MSG_I010} : " INPUT
		INPUT=${INPUT:-Y}
		case ${INPUT} in
			y|Y)
				# force installation
				break
				;;
			n|N)
				echo ${MSG_I011}
				;;
			*)
				echo ${MSG_W001}
				;;
		esac
	done
	return 0
}

function InputFtpServer()
{
	echo
	while [ 1 ]
	do
		sleep 0.5 && read -p "${MSG_I013} : " FTP_HOST
		FTP_HOST=${FTP_HOST:-127.0.0.1}
		if [ `echo ${FTP_HOST} | grep -E "^[0123456789]{1,3}\.[0123456789]{1,3}\.[0123456789]{1,3}\.[0123456789]{1,3}$" | wc -l` -ne 1 ]
		then
			echo ${MSG_W007} && echo ${MSG_I011}
			continue
		fi
		read -p "${FTP_HOST} ${MSG_I010} : " INPUT
		INPUT=${INPUT:-Y}
		case ${INPUT} in
			y|Y)
				break
				;;
			n|N)
				echo ${MSG_I011}
				;;
			*)
				echo ${MSG_W001}
				;;
		esac
	done
	return 0
}

function InputMountPoint()
{
	echo
	echo ${MSG_I039}
	FILESYSTEMS=`df -P | grep "^/dev" | awk '{ print $1}'`
	for FILESYSTEM in ${FILESYSTEMS}
	do
		MOUNTPOINT=`df -P | grep "^${FILESYSTEM}" | awk '{print $6}'`
		if [ "x${FILESYSTEM}" != "x" ] && [ "x${MOUNTPOINT}" != "x" ]
		then
			echo "   ${FILESYSTEM} - ${MOUNTPOINT}"
		fi
	done
	
	MOUNTPOINT_DB="/"
	MOUNTPOINT_DB_SEARCH=(/opt/hinemos/var/data /opt/hinemos/var /opt/hinemos /opt /)
	for MOUNTPOINT in ${MOUNTPOINT_DB_SEARCH[@]}
	do
		if [ `df -P | awk '{print $6}' | grep "^${MOUNTPOINT}$" | wc -l` -gt 0 ]
		then
			MOUNTPOINT_DB=${MOUNTPOINT}
			sleep 0.5 && echo "${MSG_I040} ${MOUNTPOINT_DB} ${MSG_I046}"
			break
		fi
	done
	
	MOUNTPOINT_LOG="/"
	MOUNTPOINT_LOG_SEARCH=(/opt/hinemos/var/log /opt/hinemos/var /opt/hinemos /opt /)
	for MOUNTPOINT in ${MOUNTPOINT_LOG_SEARCH[@]}
	do
		if [ `df -P | awk '{print $6}' | grep "^${MOUNTPOINT}$" | wc -l` -gt 0 ]
		then
			MOUNTPOINT_LOG=${MOUNTPOINT}
			sleep 0.5 && echo "${MSG_I041} ${MOUNTPOINT_LOG} ${MSG_I046}"
			break
		fi
	done
	
	return 0
}

function CopyFiles()
{
	echo
	echo -n ${MSG_I012} && sleep 0.5
	unzip -q ${SCRIPT_DIR}/thirdparty/jboss-4.2.2.GA.zip \
		&& mv jboss-4.2.2.GA ${HINEMOS_HOME} \
		&& rm -rf ${HINEMOS_HOME}/jboss-4.2.2.GA/server/all \
		&& rm -rf ${HINEMOS_HOME}/jboss-4.2.2.GA/server/default \
		&& rm -rf ${HINEMOS_HOME}/jboss-4.2.2.GA/server/minimal \
		&& rm -rf ${HINEMOS_HOME}/jboss-4.2.2.GA/docs \
		\
		&& cp -pr ${SCRIPT_DIR}/hinemos /opt \
		&& cp -pr ${SCRIPT_DIR}/manager_uninstaller* ${HINEMOS_HOME}/sbin \
		&& cp -pr ${SCRIPT_DIR}/install.cfg ${HINEMOS_HOME}/sbin \
		&& cp -pr ${SCRIPT_DIR}/lib/*.lng ${HINEMOS_HOME}/sbin/lib \
		&& tar -xzf ${SCRIPT_DIR}/thirdparty/${POSTGRESQL_PACKAGE} \
		&& mv postgresql-8.3.1 ${HINEMOS_HOME} \
		&& rm -rf ${HINEMOS_HOME}/postgresql-8.3.1/doc
	if [ $? -ne 0 ]
	then
		EchoNG
		echo ${MSG_E004}
		return -1
	fi
	EchoOK
	return 0
}

function ConfigureFiles()
{
	echo
	echo -n ${MSG_I014}
	
	# configure hinemos.cfg
	sed -e "s/%%IP_ADDRESS%%/${IP_ADDRESS}/" \
		-e "s/%%FTP_HOST%%/${FTP_HOST}/" \
		-e "s|%%HINEMOS_HOME%%|${HINEMOS_HOME}|" \
		-e "s/%%JAVA_DIR%%/${JAVA_DIR}/" \
		-e "s/%%HINEMOS_USER%%/${HINEMOS_USER}/" \
		-e "s/%%LOCALE%%/${LOCALE}/" \
		${SCRIPT_DIR}/lib/hinemos.cfg > ${HINEMOS_HOME}/etc/hinemos.cfg
	if [ $? -ne 0 ]
	then
		EchoNG
		echo ${MSG_E004}
		return -1
	fi
	
	# configure shell script for collective run function
	HINEMOS_VERSION=`cat ${HINEMOS_HOME}/_version`
	sed -e "s/%%HINEMOS_VERSION%%/${HINEMOS_VERSION}/" ${SCRIPT_DIR}/hinemos/lib/cr/agent_install.sh > ${HINEMOS_HOME}/lib/cr/agent_install.sh	
	sed -e "s/%%FTP_HOST%%/${FTP_HOST}/" ${SCRIPT_DIR}/hinemos/lib/cr/cp.sh > ${HINEMOS_HOME}/lib/cr/cp.sh
	sed -e "s/%%FTP_HOST%%/${FTP_HOST}/" ${SCRIPT_DIR}/hinemos/lib/cr/rpminstall.sh > ${HINEMOS_HOME}/lib/cr/rpminstall.sh
	
	# configure LogForward.properties
	sed -e "s/%%IP_ADDRESS%%/${IP_ADDRESS}/" \
		${SCRIPT_DIR}/hinemos/lib/syslogforward/LogForward.properties > ${HINEMOS_HOME}/lib/syslogforward/LogForward.properties
	if [ $? -ne 0 ]
	then
		EchoNG
		echo ${MSG_E004}
		return -1
	fi
	
	# configure selfcheck-service.xml
	sed -e "s/%%IP_ADDRESS%%/${IP_ADDRESS}/" \
		-e "s|%%MOUNTPOINT_DB%%|${MOUNTPOINT_DB}|" \
		-e "s|%%MOUNTPOINT_LOG%%|${MOUNTPOINT_LOG}|" \
		${SCRIPT_DIR}/hinemos/etc/selfcheck-service.xml > ${HINEMOS_HOME}/etc/selfcheck-service.xml
	if [ $? -ne 0 ]
	then
		EchoNG
		echo ${MSG_E004}
		return -1
	fi
	
	# symlink (compatibility for old shells)
	ln -f -s etc/hinemos.cfg ${HINEMOS_HOME}/hinemos.cfg \
		&& ln -f -s ../../../../lib/HinemosCommon.jar ${HINEMOS_HOME}/jboss-4.2.2.GA/server/default/lib/HinemosCommon.jar \
		&& ln -f -s ../../../../lib/HinemosIF.jar ${HINEMOS_HOME}/jboss-4.2.2.GA/server/default/lib/HinemosIF.jar \
		&& ln -f -s ../../../../lib/HinemosManager.jar ${HINEMOS_HOME}/jboss-4.2.2.GA/server/default/lib/HinemosManager.jar \
		&& ln -f -s ../../../../lib/HinemosManager.jar ${HINEMOS_HOME}/jboss-4.2.2.GA/server/default/deploy/HinemosManager.jar \
		\
		&& ln -f -s ../../../../etc/hinemos-ds.xml ${HINEMOS_HOME}/jboss-4.2.2.GA/server/default/deploy/hinemos-ds.xml \
		&& ln -f -s ../../../../etc/hinemos-service.xml ${HINEMOS_HOME}/jboss-4.2.2.GA/server/default/deploy/hinemos-service.xml \
		&& ln -f -s ../../../../etc/mail-service.xml ${HINEMOS_HOME}/jboss-4.2.2.GA/server/default/deploy/mail-service.xml \
		&& ln -f -s ../../../../etc/performance-service.xml ${HINEMOS_HOME}/jboss-4.2.2.GA/server/default/deploy/performance-service.xml \
		&& ln -f -s ../../../../etc/polling-service.xml ${HINEMOS_HOME}/jboss-4.2.2.GA/server/default/deploy/polling-service.xml \
		&& ln -f -s ../../../../etc/quartz-ram-service.xml ${HINEMOS_HOME}/jboss-4.2.2.GA/server/default/deploy/quartz-ram-service.xml \
		&& ln -f -s ../../../../etc/quartz-service.xml ${HINEMOS_HOME}/jboss-4.2.2.GA/server/default/deploy/quartz-service.xml \
		&& ln -f -s ../../../../etc/scheduler-ds.xml ${HINEMOS_HOME}/jboss-4.2.2.GA/server/default/deploy/scheduler-ds.xml \
		&& ln -f -s ../../../../etc/selfcheck-service.xml ${HINEMOS_HOME}/jboss-4.2.2.GA/server/default/deploy/selfcheck-service.xml \
		&& ln -f -s ../../../../etc/sharedtable-service.xml ${HINEMOS_HOME}/jboss-4.2.2.GA/server/default/deploy/sharedtable-service.xml \
		&& ln -f -s ../../../../etc/snmptrap-service.xml ${HINEMOS_HOME}/jboss-4.2.2.GA/server/default/deploy/snmptrap-service.xml \
		\
		&& ln -f -s ../../../../lib/javassist.jar ${HINEMOS_HOME}/jboss-4.2.2.GA/server/default/lib/javassist.jar \
		&& ln -f -s ../../../../lib/jboss-messaging.jar ${HINEMOS_HOME}/jboss-4.2.2.GA/server/default/lib/jboss-messaging.jar \
		&& ln -f -s ../../../../lib/jboss-remoting.jar ${HINEMOS_HOME}/jboss-4.2.2.GA/server/default/lib/jboss-remoting.jar \
		&& ln -f -s ../../../../lib/joesnmp.jar ${HINEMOS_HOME}/jboss-4.2.2.GA/server/default/lib/joesnmp.jar \
		&& ln -f -s ../../../../lib/log4j.jar ${HINEMOS_HOME}/jboss-4.2.2.GA/server/default/lib/log4j.jar \
		&& ln -f -s ../../../../lib/mail.jar ${HINEMOS_HOME}/jboss-4.2.2.GA/server/default/lib/mail.jar \
		&& ln -f -s ../../../../lib/org.eclipse.jface_3.1.1.jar ${HINEMOS_HOME}/jboss-4.2.2.GA/server/default/lib/org.eclipse.jface_3.1.1.jar \
		&& ln -f -s ../../../../lib/postgresql-8.4-701.jdbc3.jar ${HINEMOS_HOME}/jboss-4.2.2.GA/server/default/lib/postgresql-8.4-701.jdbc3.jar \
		&& ln -f -s ../../../../lib/quartz.jar ${HINEMOS_HOME}/jboss-4.2.2.GA/server/default/lib/quartz.jar \
		&& ln -f -s ../../../../lib/sblimCIMClient.jar ${HINEMOS_HOME}/jboss-4.2.2.GA/server/default/lib/sblimCIMClient.jar \
		&& ln -f -s ../../../../lib/swt.jar ${HINEMOS_HOME}/jboss-4.2.2.GA/server/default/lib/swt.jar \
		\
		&& ln -f -s ../../../../etc/jboss-log4j.xml ${HINEMOS_HOME}/jboss-4.2.2.GA/server/default/conf/jboss-log4j.xml \
		\
		&& ln -f -s ../../lib/javassist.jar ${HINEMOS_HOME}/jboss-4.2.2.GA/client/javassist.jar \
		&& ln -f -s ../../lib/jboss-remoting.jar ${HINEMOS_HOME}/jboss-4.2.2.GA/client/jboss-remoting.jar \
		&& ln -f -s ../../lib/jbossall-client.jar ${HINEMOS_HOME}/jboss-4.2.2.GA/client/jbossall-client.jar \
		&& ln -f -s ../../lib/mail.jar ${HINEMOS_HOME}/jboss-4.2.2.GA/client/mail.jar
	if [ $? -ne 0 ]
	then
		EchoNG
		echo ${MSG_E004}
		return -1
	fi
	EchoOK
	
	# configure snmpd.conf
	if [ -e /etc/snmp/snmpd.conf ] && [ `grep -E "^view.+systemview.+included.+.1\.3\.6\.1$" /etc/snmp/snmpd.conf | wc -l` -eq 0 ]
	then
		echo
		echo "${MSG_I042}" && sleep 0.5
		cp -pr /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf.saved_`date +"%Y%m%d-%H%M%S"`
		echo "view    systemview    included   .1.3.6.1" >> /etc/snmp/snmpd.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 -1
		fi
		
		echo "${MSG_I043} (appended \"view systemview included .1.3.6.1\")"
		echo "${MSG_I044}"
		echo "${MSG_W008}"
	fi
	
	return 0
}

function InstallJRE()
{
	echo
	echo ${MSG_I015} && sleep 1.5
	cp ${SCRIPT_DIR}/thirdparty/${JAVA_PACKAGE} ${HINEMOS_HOME} \
		&& cd ${HINEMOS_HOME} \
		&& ${HINEMOS_HOME}/${JAVA_PACKAGE} \
		&& rm ${HINEMOS_HOME}/${JAVA_PACKAGE} \
		&& cd ${SCRIPT_DIR}
	if [ $? -ne 0 ]
	then
		echo ${MSG_E011} && echo ${MSG_E004}
		return -1
	fi
	
	return 0
}

function ChangeOwner()
{
	echo
	echo -n ${MSG_I016} && sleep 0.5
	chown -R ${HINEMOS_USER}:${HINEMOS_USER} ${HINEMOS_HOME} \
		&& chown root:root ${HINEMOS_HOME}/sbin/fping \
		&& chmod 4755 ${HINEMOS_HOME}/sbin/fping \
		&& chown root:root ${HINEMOS_HOME}/sbin/fping6 \
		&& chmod 4755 $HINEMOS_HOME/sbin/fping6
	if [ $? -ne 0 ]
	then
		EchoNG
		echo ${MSG_E004}
		return -1
	fi
	EchoOK
	return 0
}

function InstallSyslogNg()
{
	HINEMOS_VERSION=`cat ${HINEMOS_HOME}/_version`
	
	echo
	echo ${MSG_I017}
	rpm -q syslog-ng > /dev/null
	RET=$?
	if [ ${RET} -ne 0 ]
	then
		rpm -ivh --force ${SYSLOG_NG_RPM}
		if [ $? -ne 0 ]
		then
			 echo ${MSG_E003} && return -1
		fi
		
		if [ `lsmod | grep "^ipv6" | wc -l` -gt 0 ]
		then
			IPVERSION="IPv6"
			SYSLOGNG_APPEND="syslog-ng_append_ipv6.conf"
		else
			IPVERSION="IPv4"
			SYSLOGNG_APPEND="syslog-ng_append_ipv4.conf"
		fi
		echo "${MSG_I047} ${IPVERSION} ${MSG_I048}"
		
		sed -e "s%__HINEMOS_HOME__%${HINEMOS_HOME}%g" \
			-e "s%__JAVA_DIR__%${JAVA_DIR}%g" \
			-e "s%__HINEMOS_VERSION__%${HINEMOS_VERSION}%g" \
			${SCRIPT_DIR}/lib/${SYSLOGNG_APPEND} >> /etc/syslog-ng/syslog-ng.conf
		if [ $? -ne 0 ]
		then
			echo ${MSG_E003} && echo ${MSG_E004}
			return -1
		fi
		
		/etc/init.d/syslog stop && /etc/init.d/syslog-ng start \
			&& /sbin/chkconfig --level 2345 syslog off \
			&& /sbin/chkconfig --level 2345 syslog-ng on
		if [ $? -ne 0 ]
		then
			echo ${MSG_E003} && echo ${MSG_E004}
			return -1
		fi
		
		echo ${MSG_I034}
	else
		echo ${MSG_W004}
		echo ${MSG_W005}
	fi
	return 0
}

function ConfigureHosts()
{
	HOSTS_FILE=/etc/hosts
	HOSTNAME=`hostname`
	
	DATE=`date +%Y%m%d%H%M`
	SAVEFILE=${HOSTS_FILE}.save_${DATE}
	
	echo
	echo ${MSG_I018} && sleep 0.5
	if [ `grep -v "^#" ${HOSTS_FILE} | grep localhost | grep ${HOSTNAME} | wc -l` -eq 0 ]
	then
		if [ `grep -v "^#" ${HOSTS_FILE} | grep "[[:space:]]${HOSTNAME}[[:space:]]" | awk '{print $1}' | grep "^${IP_ADDRESS}$" | wc -l` -eq 1 ] \
			|| [ `grep -v "^#" ${HOSTS_FILE} | grep "[[:space:]]${HOSTNAME}$" | awk '{print $1}' | grep "^${IP_ADDRESS}$" | wc -l` -eq 1 ]
		then
			echo ${MSG_I019}
			return 0
		fi
	fi
	
	while [ 1 ]
	do
		read -p "${MSG_I020}" INPUT
		INPUT=${INPUT:-Y}
		case ${INPUT} in
			y|Y)
				break
				;;
			n|N)
				echo ${MSG_I021}
				echo ${MSG_W005}
				return 0
				;;
			*)
				echo ${MSG_W001}
				;;
		esac
	done
	
	cp -pr ${HOSTS_FILE} ${SAVEFILE}
	
	# modify "127.0.0.1   localhost.localdomain localhost hostname"
	if [ `grep -v "^#" ${HOSTS_FILE} | grep localhost | grep "[[:space:]]${HOSTNAME}[[:space:]]" | wc -l` -ne 0 ]
	then
		OLD_LINE=`grep -v "^#" ${HOSTS_FILE} | grep localhost | grep ${HOSTNAME}`
		NEW_LINE=`echo ${OLD_LINE} | sed "s/[[:space:]]${HOSTNAME}[[:space:]]/\t/g"`
		sed "s/${OLD_LINE}/#${OLD_LINE}\n${NEW_LINE}/g" ${SAVEFILE} > ${HOSTS_FILE}_tmp
		mv -f ${HOSTS_FILE}_tmp ${HOSTS_FILE}
	fi
	
	# modify "aaa.bbb.ccc.ddd   hostname"
	if [ `grep -v "^#" ${HOSTS_FILE} | grep "[[:space:]]${HOSTNAME}[[:space:]]" | wc -l` -eq 0 ] \
		&& [ `grep -v "^#" ${HOSTS_FILE} | grep "[[:space:]]${HOSTNAME}$" | wc -l` -eq 0 ]
	then
		echo "${IP_ADDRESS}		${HOSTNAME}" >> ${HOSTS_FILE}
	fi
	
	# if "aaa.bbb.ccc.ddd   hostname" not found
	if [ `grep -v "^#" ${HOSTS_FILE} | grep "[[:space:]]${HOSTNAME}[[:space:]]" | awk '{print $1}' | grep "^${IP_ADDRESS}$" | wc -l` -eq 0 ] \
		&& [ `grep -v "^#" ${HOSTS_FILE} | grep "[[:space:]]${HOSTNAME}$" | awk '{print $1}' | grep "^${IP_ADDRESS}$" | wc -l` -eq 0 ]
	then
		echo ${MSG_W006}
		echo ${MSG_W005}
		mv -f ${HOSTS_FILE}.save_${DATE} ${HOSTS_FILE}
		return 0
	fi
	
	echo ${MSG_I022}
	echo ${MSG_I023}
	return 0
}

function ConfigureKernelParameters()
{
	echo
	echo ${MSG_I024} && sleep 0.5
	
	# configure SHMMAX
	echo ${MSG_I025}${CURRENT_SHMMAX}
	if [ "${CURRENT_SHMMAX}" -lt "${SHMMAX}" ] ;then
		while [ 1 ] ;
		do
			sleep 0.5 && read -p "${MSG_I026}" INPUT
			INPUT=${INPUT:-Y}
			case ${INPUT} in
				y|Y)
					echo ${SHMMAX} > /proc/sys/kernel/shmmax
					echo "" >> /etc/sysctl.conf
					echo "# Hinemos Manager (for Internal Database)" >> /etc/sysctl.conf
					echo "kernel.shmmax=${SHMMAX}" >> /etc/sysctl.conf
					break
					;;
				n|N)
					echo ${MSG_E004}
					return -1
					;;
				*)
					echo ${MSG_W001}
					;;
			esac
		done
	else
		echo ${MSG_I035}
	fi
	
	# configure SHMALL
	echo ${MSG_I027}${CURRENT_SHMALL}
	if [ "${CURRENT_SHMALL}" -lt "${SHMALL}" ] ;then
		while [ 1 ] ;
		do
			sleep 0.5 && read -p "${MSG_I028}" INPUT
			INPUT=${INPUT:-Y}
			case ${INPUT} in
				y|Y)
					echo $SHMALL > /proc/sys/kernel/shmall
					echo "" >> /etc/sysctl.conf
					echo "# Hinemos Manager (for Internal Database)" >> /etc/sysctl.conf
					echo "kernel.shmall=${SHMALL}" >> /etc/sysctl.conf
					break
					;;
				n|N)
					echo ${MSG_E004}
					return -1
					;;
				*)
					echo ${MSG_W001}
					;;
			esac
		done
	else
		echo ${MSG_I036}
	fi
	
	return 0
}

function InitializeDatabase()
{
	echo
	echo ${MSG_I029} && sleep 0.5
	
	su -c "${HINEMOS_HOME}/sbin/db_init/pg_init.sh ${LANGUAGE}" - ${HINEMOS_USER}
	if [ $? -ne 0 ]
	then
		echo ${MSG_E012} && echo ${MSG_E004}
		return -1
	fi
	
	return 0
}

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

# confirm installation
ConfirmInstallation || exit -2

# check environment
CheckEnvironment|| exit -3

# check install directory
CheckInstallDirectory || exit -4

# check install user
CreateUser || exit -5

# input ip address
InputIpAddress || exit -6

# input ftp server
InputFtpServer || exit -7

# input mount point
InputMountPoint || exit -16

# copy files
CopyFiles || exit -8

# configure files
ConfigureFiles || exit -9

# install JRE
InstallJRE || exit -10

# change owner
ChangeOwner || exit -15

# install syslog-ng
InstallSyslogNg || exit -11

# configure /etc/hosts
ConfigureHosts || exit -12

# configure kernel parameter
ConfigureKernelParameters || exit -13

# initialize database
InitializeDatabase || exit -14

echo && echo ${MSG_I030} && echo

exit 0

