#!/bin/sh
# vim:set sw=4 ts=4:
#
# $Id: make_informix,v 1.8 2005/04/11 14:14:39 fabian Exp $
#
#############################################################################
#
# ALICE
# Automatic Linux Installation and Configuration Environment
#
# Copyright (c) 2000-2002 SuSE Linux Solutions AG, Eschborn, Germany.
#               2002-2004 SuSE Linux AG, Eschborn, Germany
#               2005      SUSE GmbH, Nuernberg, Germany
#
# 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; either version 2 of the License, or
# (at your option) any later version.
#
# 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.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
#
#############################################################################
#
# Author: Juergen Henge-Ernst (hernst@suse.de) 
#
# This module was sponsored by Bundesanstalt fuer Landwirtschaft und
# Ernaehrung (BLE)
#
############################################################################
#
# make_informix
# installs an Informix server 
#
# Sections: informix
# Tags:     CONFIGMODE, INFORMIX_*
#

suse_release=`awk -F" " '$1==SuSE{print $2}' /etc/SuSE-release`

case $suse_release in
	SuSE-6|SuSE-7)	RAWD=/dev
	;;
	SuSE-8|SUSE-9)	RAWD=/dev/raw
	;;
	*)		RAWD=/dev/raw
	;;
esac

test -n "$alice_dir" && alice_dir="/usr/lib/alice2/"
export alice_dir
usage()
{
   cat <<EOF
usage: $0 -h | --help | -?

EOF
}

while [ $# -gt 0 ]
do
   case $1 in
       -h | --help | -? ) usage
                          exit 1
                          ;;
       -fqhn | --fqhn ) export fqhn=$2; shift
            ;;

   esac
   shift
done   

[ -r "${alice_dir}" ] && . "${alice_dir}/lib/alicerc"

WELCOME

#
############################################################################
#
GET_CONFIGURATION informix ${CFG_DEBUG}

[ $(id -u) -ne 0 ] && FATAL ROOTONLY

input2stdout () {
	echo "$INPUT" | awk -F : ' {
		if ( $2 == "") { total=1 } else { total=$2 };
		if ( NF > 3) {
			text=$3;
			for (i=4; i <= NF; i++) {
				text = text ":" $i;
			}
		} else {
		        text=$3;
		}
		for (i=0; i<total; i++) {
			if ($1 == "R") {
				printf "%s\n", text
			} else if ($1 == "T") {
				printf "%s", text
			};
		}
	}' 

}

# only do that action on installation mode, not configmode
if [ -z "$CONFIGMODE" ]; then
	. /etc/profile.d/informix.sh
	if [ -n "${INFORMIX_SRC_DIR}" ]; then

		# Get the files
		LOCAL_DIR="/tmp/alice_informix_src.$$"
		method=${INFORMIX_SRC_DIR%%:*}
		method=$(echo $method | tr '[:lower:]' '[:upper:]')
		URL=${INFORMIX_SRC_DIR#*:}
		URL=${URL#//}
		case $method in
		NFS ) # //server/path
			url_server=${URL%%/*}
			url_path="/${URL#*/}"
			mkdir $LOCAL_DIR
			mount $url_server:$url_path $LOCAL_DIR
			;;
		FILE ) # ///path
			url_path="/${URL#*/}"
			ln -s $url_path $LOCAL_DIR
			;;
		esac
		# If the Directory doesn't exist create it
		if [ ! -d ${INFORMIX_DIR} ]; then
			mkdir -p ${INFORMIX_DIR}
			chown informix.informix ${INFORMIX_DIR}
		fi

		cd ${INFORMIX_DIR}
		# Now run over the modules to install
		echo "${INFORMIX_PARTS}" | while read IMODUL; do
			eval TDIR=\${INFORMIX_${IMODUL}_DIR}
			eval TFILE=\${INFORMIX_${IMODUL}_FILE}
			eval TTYPE=\${INFORMIX_${IMODUL}_TYPE}
			eval TINST=\${INFORMIX_${IMODUL}_INSTALL}
			eval INPUT=\${INFORMIX_${IMODUL}_INPUT}
			eval INPUT=\""${INPUT}"\"
			
			export TINST INFORMIX_DIR
	
			ITYPE=$( echo $TTYPE | tr '[:lower:]' '[:upper:]' )
			case $ITYPE in
			CPIO )	set -x
				cd $LOCAL_DIR/$TDIR	
				for f in *.cpi *.cpio install*; do
				    ln -s $(pwd)/$f $INFORMIX_DIR
				done

				case $IMODUL in
				 ids )
				 su - informix -c "cd $INFORMIX_DIR; ./$TINST -f"	
				 ;;
				 csdk )
			 #SCRIPT=./${TINST}
			 #cd $INFORMIX_DIR; input2stdout | $SCRIPT 
			 su - informix -c "cd $INFORMIX_DIR; ./$TINST -f"	
				 ;;
				esac

				cd $INFORMIX_DIR
				# install<s> -> RUN_AS_ROOT.<s>
				s=`echo $TINST | cut -c 8-` 
				./RUN_AS_ROOT.$s
				rm -f *.cpio *.cpi RUN_AS_ROOT.* install*
				sleep 10
				;;
			TAR )
				tar -xf ${LOCAL_DIR}/${TFILE}
				SCRIPT=./${TINST}
				input2stdout | $SCRIPT
				;;
			TGZ )
				tar -xzf ${LOCAL_DIR}/${TFILE}
				SCRIPT=./${TINST}
				input2stdout | $SCRIPT
				;;
			TBZ )
				tar --bzip2 -xf "${LOCAL_DIR}/${TFILE}"
				SCRIPT=./${TINST}
				input2stdout | $SCRIPT
				;;
			RPM )
				eval RPMOPTS=\${INFORMIX_${IMODUL}_RPMOPTS}
				if [ ! -e /dev/tty.org ]; then
					mv /dev/tty /dev/tty.org
				fi
				input2stdout > /dev/tty
				rpm -i ${RPMOPTS} ${LOCAL_DIR}/${TFILE}
				mv /dev/tty.org /dev/tty
				;;
			INSTALL )
				eval SLEEPS=\${INFORMIX_${IMODUL}_SLEEPS}
				tmpdir=/tmp/alice_informix.$$
				mkdir -p $tmpdir
				I=1
				LTIME=0
				echo -e "$SLEEPS\nend" | while read TIME; do
					echo "sleep $LTIME" >> $tmpdir/run
					echo "cat $tmpdir/$I" >> $tmpdir/run
					eval INPUT=\"\${INFORMIX_${IMODUL}_INPUT_${I}}\"
					eval INPUT=\""${INPUT}"\"
					input2stdout > $tmpdir/$I
					I=$(( I + 1 ))
					LTIME=$TIME
				done;
				chmod +x $tmpdir/run
				$tmpdir/run | sh ${LOCAL_DIR}/${TFILE}
				rm -rf $tmpdir
				;;
			esac
		done


		# Clean up the temporary files
		case $method in
		NFS ) # //server/path
			umount $LOCAL_DIR
			rmdir $LOCAL_DIR
			;;
		FILE ) # ///path
			rm $LOCAL_DIR
			;;
		esac
	fi
fi

( eval echo \""${INFORMIX_SQLHOSTS}"\" )> ${INFORMIX_DIR}/etc/sqlhosts
chown informix.informix ${INFORMIX_DIR}/etc/sqlhosts

( eval echo \""${INFORMIX_INFORMIXSH}"\" )> /etc/profile.d/informix.sh
chmod 644 /etc/profile.d/informix.sh

( eval echo \""${INFORMIX_ONCONFIG}"\" )> ${INFORMIX_DIR}/etc/${INFORMIX_ONCONFIG_NAME}
chown informix.informix ${INFORMIX_DIR}/etc/${INFORMIX_ONCONFIG_NAME}

if [ -z "$CONFIGMODE" ]; then
	if [ -n "${INFORMIX_DBSPACES}" ]; then
		echo "${INFORMIX_DBSPACES}" | ( IFS=: ; while read action phydev rawdev rawname dbname size; do
			# also activate the raw-devices now, so we can init the db
			RawDev="$RAWD/${rawdev}"
			PhyDev="/dev/${phydev}"
			/usr/sbin/raw "${RawDev}" "${PhyDev}"
			echo "/usr/sbin/raw" "${RawDev}" "${PhyDev}" >>/etc/rc.d/boot.local
			# create the link to the rawdevice in ~informix
			ln -s "${RawDev}" ~informix/${rawname}
			# change the rights on the raw-device
			chown informix.informix "${RawDev}"
			chmod 660 "${RawDev}"
			# now do the action 
			# now do the action
			# r = init the db
			# c = create a dbspace
			# t = create a temp-dbspace
			# a = append a chunk to a dbspace
			case $action in
			r )
				su - informix -c "oninit -iy"
				sleep 10
				;;
			c )
				su - informix -c "onspaces -c -d $dbname -p ~informix/$rawname -o 0 -s $size"
				;;
			t )
				su - informix -c "onspaces -c -d $dbname -t -p ~informix/$rawname -o 0 -s $size"
				;;
			a )
				su - informix -c "onspaces -a $dbname -p ~informix/$rawname -o 0 -s $size"
				;;
			* )
			esac
		done
		)
	fi
fi

#
############################################################################
# Thats all
GOOD_BYE 
