#!/bin/bash

# Copyright (C) 2012 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 255

export PROG=`basename $0`
DIR=`dirname $0`
USER=`/usr/bin/whoami`
HOST=`hostname`
INSTALL_SLEEP=0.2

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

LANGUAGE=$1

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

# load language file
if [ ! -e ${SCRIPT_DIR}/lib/${LANGUAGE}_install.lng ]
then
	echo "not supported language : ${LANGUAGE}"
	exit 255
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) 2012 NTT DATA Corporation"
	echo "-------------------------------------------------------"
}

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

function CheckEnvironment()
{
	# check user executed
	echo
	echo_msg_n MSG_I002 && sleep ${INSTALL_SLEEP}
	if [ "x"${USER} != "xroot" ]
	then
		EchoNG
		echo_msg MSG_E002 && echo_msg MSG_E004
		return 255
	fi
	EchoOK
	
	# check selinux is Disabled
	echo
	echo_msg_n MSG_I031 && sleep ${INSTALL_SLEEP}
	if [ "xDisabled" != "x`/usr/sbin/getenforce`" ]
	then
		EchoNG
		echo_msg MSG_E007 && echo_msg MSG_E004
		return 255
	fi
	EchoOK
	
	# check os version
	echo
	echo_msg_n MSG_I051 && sleep ${INSTALL_SLEEP}
	if [ `cat /etc/redhat-release | grep "${OS_CHECK_REGEX}" | wc -l` -eq 0 ]
	then
		if [ -e /etc/redhat-release ]
		then
			OS_RELEASE=" (`cat /etc/redhat-release`) "
		fi
		EchoNG
		echo_msg MSG_E016 && echo_msg MSG_E004
		return 255
	fi
	EchoOK
	
	# check rpm
	echo
	echo_msg_n MSG_I056 && sleep ${INSTALL_SLEEP}
	echo
	for RPM in ${RPMS_OSRELEASE[@]}
	do
		echo -n "   ${RPM}..."
		rpm -q ${RPM} > /dev/null 2>&1
		if [ $? -eq 0 ]
		then
			EchoOK
		else
			EchoNG
			echo_msg MSG_W012 && echo_msg MSG_E004
			return 255
		fi
	done
	
	# check rsyslog for Hinemos Agent
	echo
	echo_msg_n MSG_I061 && sleep ${INSTALL_SLEEP}
	if [ `grep ":514$" ${RSYSLOG_CONF} | grep -v "^#" | wc -l` -ne 0 ]
	then
		EchoNG
		echo_msg MSG_E017 && echo_msg MSG_E004
		return 255
	fi
	EchoOK
	
	return 0
}

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

function CreateUser()
{
	echo
	echo_msg MSG_I006 && sleep ${INSTALL_SLEEP}
	id ${HINEMOS_USER} > /dev/null 2>&1
	RET=$?
	if [ ${RET} -eq 0 ]
	then
		# if user exists
		echo_msg MSG_W003
		if [ `id -gn ${HINEMOS_USER} | grep "^${HINEMOS_GROUP}$" | wc -l` -eq 0 ]
		then
			# if user is not belong to group
			echo_msg MSG_E009 && echo_msg MSG_E004
			return 255
		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 MSG_E010 && echo_msg MSG_E004
				return 255
			fi
			echo_msg MSG_I033
		fi
		/usr/sbin/useradd ${HINEMOS_USER} -g ${HINEMOS_GROUP} -G ${HINEMOS_GROUP}
		if [ $? -ne 0 ]
		then
			echo_msg MSG_E005 && echo_msg MSG_E004
			return 255
		fi
		/usr/bin/passwd ${HINEMOS_USER}
		echo_msg MSG_I008
	fi
	
	chown -R ${HINEMOS_USER}:${HINEMOS_GROUP} ${HINEMOS_HOME}
	if [ $? -ne 0 ]
	then
		echo_msg MSG_E008 && return 255
	fi
	echo_msg MSG_I032
	
	return 0
}

function InputJava()
{
	echo
	while [ 1 ]
	do
		sleep ${INSTALL_SLEEP} && read -p "`echo_msg MSG_I052` : " JAVA_HOME
		JAVA_HOME=${JAVA_HOME:-${JAVA_HOME_OSRELEASE}}
		
		# check java file existence
		if [ ! -e ${JAVA_HOME}/bin/java ]
		then
			read -p "`echo_msg MSG_W009` : " INPUT
			INPUT=${INPUT:-N}
			case ${INPUT} in
				y|Y)
					echo_msg MSG_I011
					continue
					;;
				n|N)
					JAVA_HOME=${JAVA_HOME:-${JAVA_HOME_OSRELEASE}}
					echo_msg MSG_W014
					return 0
					;;
				*)
					echo_msg MSG_W013
					continue
					;;
			esac
		fi
		
		# check java version
		if [ `${JAVA_HOME}/bin/java -version 2>&1 | grep "${JAVA_CHECK_REGEX}" | wc -l` -eq 0 ]
		then
			echo_msg MSG_W010 && ${JAVA_HOME}/bin/java -version 2>&1 && echo_msg MSG_I011
			continue
		fi 
		
		read -p "`echo_msg MSG_I053` : " INPUT
		INPUT=${INPUT:-Y}
		case ${INPUT} in
			y|Y)
				break
				;;
			n|N)
				echo_msg MSG_I011
				;;
			*)
				echo_msg MSG_W001
				;;
		esac
	done
	return 0
}

function InputWbemModule()
{
	echo
	read -p "`echo_msg MSG_I060` : " INPUT
	INPUT=${INPUT:-N}
	if [ ${INPUT} = "N" -o ${INPUT} = "n" ]
	then
		WBEM_JAR=${WBEM_JAR_OSRELEASE}
		return 0
	fi
	
	while [ 1 ]
	do
		sleep ${INSTALL_SLEEP} && read -p "`echo_msg MSG_I054` : " WBEM_JAR
		WBEM_JAR=${WBEM_JAR:-${WBEM_JAR_OSRELEASE}}``

		# check jar file existence
		if [ ! -e ${WBEM_JAR} ]
		then
			read -p "`echo_msg MSG_W011` : " INPUT
			INPUT=${INPUT:-N}
			case ${INPUT} in
				y|Y)
					echo_msg MSG_I011
					continue
					;;
				n|N)
					WBEM_JAR=${WBEM_JAR_OSRELEASE}
					return 0
					;;
				*)
					echo_msg MSG_W013
					continue
					;;
			esac
		fi
		
		read -p "`echo_msg MSG_I055` : " INPUT
		INPUT=${INPUT:-Y}
		case ${INPUT} in
			y|Y)
				break
				;;
			n|N)
				echo_msg MSG_I011
				;;
			*)
				echo_msg MSG_W001
				;;
		esac
	done
	return 0
}

function InputIpAddress()
{
	echo
	echo_msg 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 ${INSTALL_SLEEP} && read -p "`echo_msg MSG_I009` : " IP_ADDRESS
		IP_ADDRESS=${IP_ADDRESS:-${DEFAULT_IFIPADDR}}
		if [ `echo ${IP_ADDRESS} | grep -E "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$" | wc -l` -ne 1 ] \
			&& [ `echo ${IP_ADDRESS} | grep -E "^[0-9A-F]{1,4}:[0-9A-F]{1,4}:[0-9A-F]{1,4}:[0-9A-F]{1,4}:[0-9A-F]{1,4}:[0-9A-F]{1,4}:[0-9A-F]{1,4}:[0-9A-F]{1,4}$" | wc -l` -ne 1 ]
		then
			echo_msg MSG_W007 && echo_msg MSG_I011
			continue
		fi
		read -p "`echo_msg MSG_I010` : " INPUT
		INPUT=${INPUT:-Y}
		case ${INPUT} in
			y|Y)
				# force installation
				break
				;;
			n|N)
				echo_msg MSG_I011
				;;
			*)
				echo_msg MSG_W001
				;;
		esac
	done
	return 0
}

function InputFtpServer()
{
	echo
	while [ 1 ]
	do
		sleep ${INSTALL_SLEEP} && read -p "`echo_msg MSG_I013` : " FTP_HOST
		FTP_HOST=${FTP_HOST:-127.0.0.1}
		read -p "`echo_msg MSG_I050` : " INPUT
		INPUT=${INPUT:-Y}
		case ${INPUT} in
			y|Y)
				break
				;;
			n|N)
				echo_msg MSG_I011
				;;
			*)
				echo_msg MSG_W001
				;;
		esac
	done
	return 0
}

function InputMountPoint()
{
	echo
	echo_msg 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 ${INSTALL_SLEEP} && echo "`echo_msg MSG_I040`"
			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 ${INSTALL_SLEEP} && echo "`echo_msg MSG_I041`"
			break
		fi
	done
	
	return 0
}

function CopyFiles()
{
	echo
	echo_msg_n MSG_I012 && sleep ${INSTALL_SLEEP}
	unzip -q ${SCRIPT_DIR}/thirdparty/${JBOSS_PACKAGE} \
		&& mv ${JBOSS_EXTRACT_DIR} ${HINEMOS_HOME}/jboss-as \
		&& rm -rf ${HINEMOS_HOME}/jboss-as/server/all \
		&& rm -rf ${HINEMOS_HOME}/jboss-as/server/minimal \
		&& rm -rf ${HINEMOS_HOME}/jboss-as/server/production \
		&& rm -rf ${HINEMOS_HOME}/jboss-as/server/standard \
		&& rm -rf ${HINEMOS_HOME}/jboss-as/server/web \
		&& mv ${HINEMOS_HOME}/jboss-as/server/default ${HINEMOS_HOME}/jboss-as/server/hinemos \
		\
		&& 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_EXTRACT_DIR} ${HINEMOS_HOME} \
		&& rm -rf ${HINEMOS_HOME}/postgresql-8.3.1/doc
	if [ $? -ne 0 ]
	then
		EchoNG
		echo_msg MSG_E004
		return 255
	fi
	EchoOK
	return 0
}

function ConfigureFiles()
{
	echo
	echo_msg_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_HOME%%|${JAVA_HOME}|" \
		-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 MSG_E004
		return 255
	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 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/jboss/selfcheck-service.xml > ${HINEMOS_HOME}/etc/jboss/selfcheck-service.xml
	if [ $? -ne 0 ]
	then
		EchoNG
		echo_msg MSG_E004
		return 255
	fi
	
	# symlink (compatibility for old shells)
	ln -f -s etc/hinemos.cfg ${HINEMOS_HOME}/hinemos.cfg \
		&& rm -rf ${HINEMOS_HOME}/jboss-as/bin/run.conf \
		&& ln -f -s ../../etc/jboss/run.conf ${HINEMOS_HOME}/jboss-as/bin/run.conf \
		&& ln -f -s ../../etc/jboss/run_hinemos.sh ${HINEMOS_HOME}/jboss-as/bin/run_hinemos.sh \
		&& ln -f -s ../../etc/jboss/shutdown_hinemos.sh ${HINEMOS_HOME}/jboss-as/bin/shutdown_hinemos.sh \
		\
		&& rm -rf ${HINEMOS_HOME}/jboss-as/server/hinemos/conf/jboss-log4j.xml \
		&& rm -rf ${HINEMOS_HOME}/jboss-as/server/hinemos/conf/jboss-service.xml \
		&& rm -rf ${HINEMOS_HOME}/jboss-as/server/hinemos/conf/login-config.xml \
		&& rm -rf ${HINEMOS_HOME}/jboss-as/server/hinemos/conf/standardjboss.xml \
		&& rm -rf ${HINEMOS_HOME}/jboss-as/server/hinemos/deploy/mail-service.xml \
		&& ln -f -s ../../../../etc/jboss/jboss-log4j.xml ${HINEMOS_HOME}/jboss-as/server/hinemos/conf/jboss-log4j.xml \
		&& ln -f -s ../../../../etc/jboss/jboss-service.xml ${HINEMOS_HOME}/jboss-as/server/hinemos/conf/jboss-service.xml \
		&& ln -f -s ../../../../etc/jboss/login-config.xml ${HINEMOS_HOME}/jboss-as/server/hinemos/conf/login-config.xml \
		&& ln -f -s ../../../../etc/jboss/standardjboss.xml ${HINEMOS_HOME}/jboss-as/server/hinemos/conf/standardjboss.xml \
		&& ln -f -s ../../../../etc/jboss/mail-service.xml ${HINEMOS_HOME}/jboss-as/server/hinemos/deploy/mail-service.xml \
		\
		&& rm -rf ${HINEMOS_HOME}/jboss-as/server/hinemos/deploy/hdscanner-jboss-beans.xml \
		&& rm -rf ${HINEMOS_HOME}/jboss-as/server/hinemos/deploy/hsqldb-ds.xml \
		&& rm -rf ${HINEMOS_HOME}/jboss-as/common/lib/hsqldb.jar \
		&& rm -rf ${HINEMOS_HOME}/jboss-as/common/lib/hsqldb-plugin.jar \
		\
		&& ln -f -s ../../../../etc/jboss/HinemosEntity.jar ${HINEMOS_HOME}/jboss-as/server/hinemos/deploy/HinemosEntity.jar \
		&& ln -f -s ../../../../etc/jboss/HinemosMDB.jar ${HINEMOS_HOME}/jboss-as/server/hinemos/deploy/HinemosMDB.jar \
		&& ln -f -s ../../../../etc/jboss/HinemosSession.jar ${HINEMOS_HOME}/jboss-as/server/hinemos/deploy/HinemosSession.jar \
		&& ln -f -s ../../../../etc/jboss/hinemos-ds.xml ${HINEMOS_HOME}/jboss-as/server/hinemos/deploy/hinemos-ds.xml \
		&& ln -f -s ../../../../etc/jboss/hinemos-service.xml ${HINEMOS_HOME}/jboss-as/server/hinemos/deploy/hinemos-service.xml \
		&& ln -f -s ../../../../etc/jboss/jmx-invoker-service.xml ${HINEMOS_HOME}/jboss-as/server/hinemos/deploy/jmx-invoker-service.xml \
		&& ln -f -s ../../../../etc/jboss/polling-service.xml ${HINEMOS_HOME}/jboss-as/server/hinemos/deploy/polling-service.xml \
		&& ln -f -s ../../../../etc/jboss/schedule-dbms-service.xml ${HINEMOS_HOME}/jboss-as/server/hinemos/deploy/schedule-dbms-service.xml \
		&& ln -f -s ../../../../etc/jboss/schedule-ram-service.xml ${HINEMOS_HOME}/jboss-as/server/hinemos/deploy/schedule-ram-service.xml \
		&& ln -f -s ../../../../etc/jboss/scheduler-ds.xml ${HINEMOS_HOME}/jboss-as/server/hinemos/deploy/scheduler-ds.xml \
		&& ln -f -s ../../../../etc/jboss/selfcheck-service.xml ${HINEMOS_HOME}/jboss-as/server/hinemos/deploy/selfcheck-service.xml \
		&& ln -f -s ../../../../etc/jboss/sharedtable-service.xml ${HINEMOS_HOME}/jboss-as/server/hinemos/deploy/sharedtable-service.xml \
		&& ln -f -s ../../../../etc/jboss/snmptrap-service.xml ${HINEMOS_HOME}/jboss-as/server/hinemos/deploy/snmptrap-service.xml \
		&& ln -f -s ../../../../etc/jboss/syslog-service.xml ${HINEMOS_HOME}/jboss-as/server/hinemos/deploy/syslog-service.xml \
		\
		&& rm -rf ${HINEMOS_HOME}/jboss-as/server/hinemos/conf/bootstrap/deployers.xml \
		&& ln -f -s ../../../../../etc/jboss/deployers.xml ${HINEMOS_HOME}/jboss-as/server/hinemos/conf/bootstrap/deployers.xml \
		\
		&& rm -rf ${HINEMOS_HOME}/jboss-as/server/hinemos/deploy/messaging/hsqldb-persistence-service.xml \
		&& rm -rf ${HINEMOS_HOME}/jboss-as/server/hinemos/deploy/messaging/messaging-service.xml \
		&& rm -rf ${HINEMOS_HOME}/jboss-as/server/hinemos/deploy/messaging/remoting-bisocket-service.xml \
		&& ln -f -s ../../../../../etc/jboss/destinations-service.xml ${HINEMOS_HOME}/jboss-as/server/hinemos/deploy/messaging/destinations-service.xml \
		&& ln -f -s ../../../../../etc/jboss/messaging-jboss-beans.xml ${HINEMOS_HOME}/jboss-as/server/hinemos/deploy/messaging/messaging-jboss-beans.xml \
		&& ln -f -s ../../../../../etc/jboss/messaging-service.xml ${HINEMOS_HOME}/jboss-as/server/hinemos/deploy/messaging/messaging-service.xml \
		&& ln -f -s ../../../../../etc/jboss/postgresql-persistence-service.xml ${HINEMOS_HOME}/jboss-as/server/hinemos/deploy/messaging/postgresql-persistence-service.xml \
		&& ln -f -s ../../../../../etc/jboss/remoting-bisocket-service.xml ${HINEMOS_HOME}/jboss-as/server/hinemos/deploy/messaging/remoting-bisocket-service.xml \
		\
		&& ln -f -s ../../../../lib/HinemosCommon.jar ${HINEMOS_HOME}/jboss-as/server/hinemos/lib/HinemosCommon.jar \
		&& ln -f -s ../../../../lib/HinemosManager.jar ${HINEMOS_HOME}/jboss-as/server/hinemos/lib/HinemosManager.jar \
		&& ln -f -s ../../../../lib/commons-codec-1.4.jar ${HINEMOS_HOME}/jboss-as/server/hinemos/lib/commons-codec-1.4.jar \
		&& ln -f -s ../../../../lib/commons-net-3.0.1.jar ${HINEMOS_HOME}/jboss-as/server/hinemos/lib/commons-net-3.0.1.jar \
		&& ln -f -s ../../../../lib/httpclient-4.1.1.jar ${HINEMOS_HOME}/jboss-as/server/hinemos/lib/httpclient-4.1.1.jar \
		&& ln -f -s ../../../../lib/httpclient-cache-4.1.1.jar ${HINEMOS_HOME}/jboss-as/server/hinemos/lib/httpclient-cache-4.1.1.jar \
		&& ln -f -s ../../../../lib/httpcore-4.1.jar ${HINEMOS_HOME}/jboss-as/server/hinemos/lib/httpcore-4.1.jar \
		&& ln -f -s ../../../../lib/httpmime-4.1.1.jar ${HINEMOS_HOME}/jboss-as/server/hinemos/lib/httpmime-4.1.1.jar \
		&& ln -f -s ../../../../lib/joesnmp.jar ${HINEMOS_HOME}/jboss-as/server/hinemos/lib/joesnmp.jar \
		&& rm -rf ${HINEMOS_HOME}/jboss-as/common/lib/joesnmp.jar \
		&& ln -f -s ../../../../lib/intel-wsman-1.0.1-mod.jar ${HINEMOS_HOME}/jboss-as/server/hinemos/lib/intel-wsman-1.0.1-mod.jar \
		&& ln -f -s ../../../../lib/postgresql-9.0-801.jdbc4.jar ${HINEMOS_HOME}/jboss-as/server/hinemos/lib/postgresql-9.0-801.jdbc4.jar \
		\
		&& ln -f -s ${WBEM_JAR} ${HINEMOS_HOME}/lib/sblimCIMClient.jar \
		&& ln -f -s ../../../../lib/sblimCIMClient.jar ${HINEMOS_HOME}/jboss-as/server/hinemos/lib/sblimCIMClient.jar \
		\
		&& rm -rf ${HINEMOS_HOME}/jboss-as/server/hinemos/deploy/management \
		&& rm -rf ${HINEMOS_HOME}/jboss-as/server/hinemos/deploy/admin-console.war \
		&& rm -rf ${HINEMOS_HOME}/jboss-as/server/hinemos/deploy/jmx-console.war \
		\
		&& rm -rf ${HINEMOS_HOME}/jboss-as/server/hinemos/deploy/ejb3-connectors-jboss-beans.xml \
		&& rm -rf ${HINEMOS_HOME}/jboss-as/server/hinemos/deploy/ejb3-container-jboss-beans.xml \
		&& rm -rf ${HINEMOS_HOME}/jboss-as/server/hinemos/deploy/ejb3-interceptors-aop.xml \
		&& rm -rf ${HINEMOS_HOME}/jboss-as/server/hinemos/deploy/ejb3-timerservice-jboss-beans.xml \
		&& rm -rf ${HINEMOS_HOME}/jboss-as/server/hinemos/deployers/jboss-ejb3-endpoint-deployer.jar \
		&& rm -rf ${HINEMOS_HOME}/jboss-as/server/hinemos/deployers/jboss-ejb3-metrics-deployer.jar \
		&& rm -rf ${HINEMOS_HOME}/jboss-as/server/hinemos/deployers/ejb3-deployers-jboss-beans.xml \
		&& rm -rf ${HINEMOS_HOME}/jboss-as/server/hinemos/deployers/ejb3.deployer/ \
		&& rm -rf ${HINEMOS_HOME}/jboss-as/server/hinemos/deploy/http-invoker.sar \
		&& rm -rf ${HINEMOS_HOME}/jboss-as/server/hinemos/deploy/monitoring-service.xml \
		&& rm -rf ${HINEMOS_HOME}/jboss-as/server/hinemos/deploy/schedule-manager-service.xml \
		&& rm -rf ${HINEMOS_HOME}/jboss-as/server/hinemos/deploy/scheduler-service.xml \
		&& rm -rf ${HINEMOS_HOME}/jboss-as/server/hinemos/deploy/sqlexception-service.xml \
		&& rm -rf ${HINEMOS_HOME}/jboss-as/server/hinemos/deploy/uuid-key-generator.sar \
		&& rm -rf ${HINEMOS_HOME}/jboss-as/server/hinemos/deployers/seam.deployer \
		\
		&& rm -rf ${HINEMOS_HOME}/jboss-as/server/hinemos/deployers/jbossws.deployer \
		&& rm -rf ${HINEMOS_HOME}/jboss-as/server/hinemos/deployers/jbossweb.deployer \
		&& rm -rf ${HINEMOS_HOME}/jboss-as/server/hinemos/deploy/jbossws.sar \
		&& rm -rf ${HINEMOS_HOME}/jboss-as/server/hinemos/deploy/jbossweb.sar \
		&& rm -rf ${HINEMOS_HOME}/jboss-as/common/lib/jbossws-native-jaxrpc.jar \
		&& rm -rf ${HINEMOS_HOME}/jboss-as/common/lib/jbossws-native-jaxws-ext.jar \
		&& rm -rf ${HINEMOS_HOME}/jboss-as/common/lib/jbossws-native-jaxws.jar \
		&& rm -rf ${HINEMOS_HOME}/jboss-as/common/lib/jbossws-native-saaj.jar \
		&& rm -rf ${HINEMOS_HOME}/jboss-as/lib/endorsed/jbossws-native-jaxws-ext.jar \
		&& rm -rf ${HINEMOS_HOME}/jboss-as/lib/endorsed/jbossws-native-jaxws.jar \
		&& rm -rf ${HINEMOS_HOME}/jboss-as/lib/endorsed/jbossws-native-saaj.jar \
		&& rm -rf ${HINEMOS_HOME}/jboss-as/lib/endorsed/jaxb-api.jar \
		&& rm -rf ${HINEMOS_HOME}/jboss-as/lib/jaxb-impl.jar \
		&& rm -rf ${HINEMOS_HOME}/jboss-as/lib/jaxb-xjc.jar \
		\
		&& rm -rf ${HINEMOS_HOME}/jboss-as/server/hinemos/deployers/bsh.deployer \
		&& rm -rf ${HINEMOS_HOME}/jboss-as/common/lib/bsh.jar \
 		\
		&& rm -rf ${HINEMOS_HOME}/jboss-as/server/hinemos/deploy/juddi-service.sar \
		\
		&& rm -rf ${HINEMOS_HOME}/jboss-as/common/lib/hibernate-* \
		&& rm -rf ${HINEMOS_HOME}/jboss-as/common/lib/jboss-hibernate.jar \
		&& rm -rf ${HINEMOS_HOME}/jboss-as/server/hinemos/deployers/hibernate-deployer-jboss-beans.xml
	if [ $? -ne 0 ]
	then
		EchoNG
		echo_msg MSG_E004
		return 255
	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 MSG_I042 && sleep ${INSTALL_SLEEP}
		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 MSG_E004
			return 255
		fi
		
		echo_msg MSG_I043
		echo_msg MSG_I044
		echo_msg MSG_W008
	fi
	
	return 0
}

function ConfigureRsyslog() {
	echo
	echo_msg_n MSG_I062
	
	# rsyslog enables the reception of syslog of RFC3164(no HOSTNAME message). 
	if [ -f /etc/sysconfig/rsyslog ]
	then
		RSYS_CHECK=`cat /etc/sysconfig/rsyslog | grep -v "^#" | grep "SYSLOGD_OPTIONS=.*-u 1" | wc -l`
		if [ "x"${RSYS_CHECK} != "x1" ]
		then
			echo
			echo_msg_n MSG_I063
			cp -pr /etc/sysconfig/rsyslog /etc/sysconfig/rsyslog.saved_`date +"%Y%m%d-%H%M%S"`
			echo "SYSLOGD_OPTIONS=\"-c 4 -u 1\"" > /etc/sysconfig/rsyslog
		fi
	fi
		
	echo
	echo_msg_n MSG_I057
	
	BKUP_FILE=${RSYSLOG_CONF}.saved_`date +"%Y%m%d-%H%M%S"`
	if [ `grep "rsyslog_hinemos.conf" ${RSYSLOG_CONF} | grep -v "^#" | wc -l` -eq 0 ]
	then
		echo
		echo_msg_n MSG_I058
		cp -pu ${SCRIPT_DIR}/lib/rsyslog_hinemos.conf /etc/ \
		&& mv ${RSYSLOG_CONF} ${BKUP_FILE} \
		&& echo "\$IncludeConfig /etc/rsyslog_hinemos.conf" >> ${RSYSLOG_CONF} \
		&& echo "" >> ${RSYSLOG_CONF} \
		&& cat ${BKUP_FILE} >> ${RSYSLOG_CONF}
		if [ $? -ne 0 ]
		then
			EchoNG
			echo_msg MSG_E004
			return 255
		fi
		service rsyslog restart
		if [ $? -ne 0 ]
		then
			EchoNG
			echo_msg MSG_E004
			return 255
		fi
	fi
}

function ChangeOwner()
{
	echo
	echo_msg_n MSG_I016 && sleep ${INSTALL_SLEEP}
	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 MSG_E004
		return 255
	fi
	EchoOK
	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 MSG_I018 && sleep ${INSTALL_SLEEP}
	if [ `grep -v "^#" ${HOSTS_FILE} | grep ${HOSTNAME} | wc -l` -ne 0 ]
	then
		echo_msg MSG_I019
		return 0
	fi
	
	while [ 1 ]
	do
		read -p "`echo_msg MSG_I020`" INPUT
		INPUT=${INPUT:-Y}
		case ${INPUT} in
			y|Y)
				break
				;;
			n|N)
				echo_msg MSG_I021
				echo_msg MSG_W005
				return 0
				;;
			*)
				echo_msg MSG_W001
				;;
		esac
	done
	
	cp -pr ${HOSTS_FILE} ${SAVEFILE}
	
	# add 127.0.0.1 ${HOSTNAME}
	echo >> ${HOSTS_FILE}
	echo "# for Hinemos Manager" >> ${HOSTS_FILE}
	echo "127.0.0.1   ${HOSTNAME}" >> ${HOSTS_FILE}
	echo "::1         ${HOSTNAME}" >> ${HOSTS_FILE}
	
	echo_msg MSG_I022
	echo_msg MSG_I023
	return 0
}

function ConfigureKernelParameters()
{
	echo
	echo_msg MSG_I024 && sleep ${INSTALL_SLEEP}
	
	# configure SHMMAX
	echo_msg MSG_I025
	if [ "${CURRENT_SHMMAX}" -lt "${SHMMAX}" ] ;then
		while [ 1 ] ;
		do
			sleep ${INSTALL_SLEEP} && read -p "`echo_msg 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 MSG_E004
					return 255
					;;
				*)
					echo_msg MSG_W001
					;;
			esac
		done
	else
		echo_msg MSG_I035
	fi
	
	# configure SHMALL
	echo_msg MSG_I027
	if [ "${CURRENT_SHMALL}" -lt "${SHMALL}" ] ;then
		while [ 1 ] ;
		do
			sleep ${INSTALL_SLEEP} && read -p "`echo_msg 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 MSG_E004
					return 255
					;;
				*)
					echo_msg MSG_W001
					;;
			esac
		done
	else
		echo_msg MSG_I036
	fi
	
	return 0
}

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

function SIGINTExit()
{
	echo
	echo_msg MSG_E015
	exit 255
}

function echo_msg()
{
	local PARAM=$1
	
	if [ -e ${SCRIPT_DIR}/lib/${LANGUAGE}_install.lng ]
	then
		. ${SCRIPT_DIR}/lib/${LANGUAGE}_install.lng
	fi
	
	eval 'echo "${'${PARAM}'}"'
}

function echo_msg_n()
{
	local PARAM=$1
	echo -n "`echo_msg ${PARAM}`"
}

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

#
# check parameters
#
if [ $# -ne 1 ]; then
	echo_msg MSG_E001
	exit 255
fi

# define trap
trap SIGINTExit 2

# print welcome
Welcome

# confirm installation
ConfirmInstallation || exit 254

# check environment
CheckEnvironment|| exit 253

# check install directory
CheckInstallDirectory || exit 252

# check install user
CreateUser || exit 251

# input java
InputJava || exit 250

# input wbem client module
InputWbemModule || exit 249

# input ip address
#InputIpAddress || exit 248

# input ftp server
InputFtpServer || exit 247

# input mount point
InputMountPoint || exit 246

# copy files
CopyFiles || exit 245

# configure files
ConfigureFiles || exit 244

# configure rsyslog.conf
ConfigureRsyslog || exit 239

# change owner
ChangeOwner || exit 243

# configure /etc/hosts
ConfigureHosts || exit 242

# configure kernel parameter
ConfigureKernelParameters || exit 241

# initialize database
InitializeDatabase || exit 240

echo && echo_msg MSG_I030 && echo

exit 0

