#!/bin/sh
#
# Script Name:		dfxinstall
# Original Date:	Jan 24, 2013
# Copyright (c) 2013 Greystone Data Technologies, Inc. All Rights Reserved.
#This script installs the DFX main application software
#
# Revision History
# Date		Revision	Changes/Additions/Deletions
# =============	===============	================================
# 2011.07.15	Original (R0)	Original release
# 2011.07.15	1		changed "-x" to "-e" for non-executable file tests
#				added full path in on "shutdown"
#				changed "-e" to "-d" for directory tests
# 2011.07.15	2		change all -x to -e
#
# 2011.07.15	3		Change permissions on grey file to 755
#				Delete setup files directory
#				Change location of result file to be
#				in home directory
#

#
# add a "-n" to the command line to prevent the script from rebooting
# the DF-X when the installation is complete
#

VER_MAJ=1
VER_MIN=0
REVISION=0
VER_DATE="Jan 24, 2013"
COPYRIGHT="Copyright (c) Greystone Data Technologies, Inc. All Rights Reserved."
KERNEL_VERSION=`uname -r`
BASE_DIR=/home/greystone/dfx
MODULE_DIR=module
HELP_DIR=helpbrowser
DRIVER_DIR=/lib/modules/$KERNEL_VERSION/gdsnb
MODULE=gdt2010_asm1061.ko
MAIN_APP=grey
CO_PATH=/etc
CHANGEOWNER=local
TEMP_FILE=.GDS_TEMP
RC_LOCAL=init.d
HOMEDIR=/home/greystone
DFX_DIR=installDFX
DFX_APP=dfx.6.6.1.tar
HELP_APP=helpbrowser.tar
RESULT_FILE=$HOMEDIR/result.txt
PWD=`pwd`
SN=0
GREYPERM=755

#
# Print opening banner
#
echo "*******************************************************************"
echo "* Greystone Data Technologies                                          *"
echo "* DF-X Application Software & Driver Installation Script          *"
echo "* Version $VER_MAJ.$VER_MIN.$REVISION                             *"
echo "* Release Date $VER_DATE                                          *"
echo "* $COPYRIGHT                                                      *"
echo "*******************************************************************"

WAI=`whoami`
if ( [ "$WAI" != "root" ] ) then
	echo "You are logged in as $WAI"
	echo "This script must be executed with root access"
	echo "Enter in the root (aka super user) password"
	su root -c "./dfxinstall $1"
	exit 0
fi

echo "User: $WAI executing script"
echo "Current directory: `pwd`"

#
# Open result.txt file to report results
#
if ( [ -e $RESULT_FILE ] ) ; then rm -f $RESULT_FILE ; fi

touch $RESULT_FILE
#
# Make result file world readable and writeable
#
chmod 666 $RESULT_FILE

echo "*******************************************************************" >> $RESULT_FILE
echo "* Greystone Data Technologies                                          *" >> $RESULT_FILE
echo "* DF-X Application Software & Driver Installation Script          *" >> $RESULT_FILE
echo "* Version $VER_MAJ.$VER_MIN.$REVISION                             *" >> $RESULT_FILE
echo "* Release Date $VER_DATE                                          *" >> $RESULT_FILE
echo "* $COPYRIGHT                                                      *" >> $RESULT_FILE
echo "*******************************************************************" >> $RESULT_FILE

echo "--------------------------------------------------------------" >>$RESULT_FILE
echo " $0 installation script V$VER_MAJ.$VER_MIN.$REVISION " >> $RESULT_FILE
echo " record of installation steps" >> $RESULT_FILE
echo " `date`" >> $RESULT_FILE
echo "--------------------------------------------------------------" >>$RESULT_FILE

echo "*****************************************************"
echo "* Installation results are in the file \"$RESULT_FILE\" *"
echo "*****************************************************"

#
# check for the base directory - create if it doesn't exist
#
if ( [ -d $BASE_DIR ] ) then
	echo "$BASE_DIR exists" >> $RESULT_FILE
else
	echo "Creating $BASE_DIR ..."
	echo "Creating $BASE_DIR ..." >> $RESULT_FILE
	mkdir $BASE_DIR
	RSLT=$?
	#
	# was the base directory created??
	#
	if ( ! [ $RSLT = 0 ] ) then
		echo "mkdir result = $RSLT"
		echo "FATAL ERROR 01: Unable to create $BASE_DIR"
		echo "mkdir result = $RSLT" >> $RESULT_FILE
		echo "FATAL ERROR 01: Unable to create $BASE_DIR" >> $RESULT_FILE
		exit 1
	fi
fi

#
# Ok, now the base directory is in place ...
#
echo "$BASE_DIR			 		[Ok]"
echo "$BASE_DIR			 		[Ok]" >> $RESULT_FILE

#
# if old application exists then save it and copy new application
# in it's place
#
SN=0
if ( [ -e $BASE_DIR/$MAIN_APP ] ) then

	# if old application exists check for xx.0 backup
	# if the xx.0 backup exists then check for xx.1 backup

	if( [ -e $BASE_DIR/$MAIN_APP.$SN ] ) then
		SN=$SN+1
		# check for xx.1 backup, if it exists then copy
		# it to xx.2

		if ( [ -e $BASE_DIR/$MAIN_APP.$SN ] ) then
			SN_NEW=$SN+1

			# if xx.2 exists then remove it, 3 backups are enough

			if ( [ -e $BASE_DIR/$MAIN_APP.$SN_NEW ] ) then
				rm -f $BASE_DIR/$MAIN_APP.$SN_NEW
			fi

			# change name of xx.1 to xx.2

			mv $BASE_DIR/$MAIN_APP.$SN $BASE_DIR/$MAIN_APP.$SN_NEW
		fi

		# copy xx.0 to xx.1
		SN=$SN-1
		#SN-=1
		SN_NEW=$SN+1

		# change name of xx.0 to xx.1

		mv $BASE_DIR/$MAIN_APP.$SN $BASE_DIR/$MAIN_APP.$SN_NEW
	fi

	# change name of application to xx.0

	SN=0
	mv $BASE_DIR/$MAIN_APP $BASE_DIR/$MAIN_APP.$SN
fi

echo "Copying ./$MAIN_APP to $BASE_DIR/$MAIN_APP" >> $RESULT_FILE
cp -f ./$MAIN_APP $BASE_DIR/$MAIN_APP

RSLT=$?

# check copy status

if ( ! [ $RSLT = 0 ] ) then
	echo "cp result = $RSLT"
	echo "FATAL ERROR 02: Unable to copy $MAIN_APP to $BASE_DIR/$MAIN_APP"
	echo "cp result = $RSLT" >> $RESULT_FILE
	echo "FATAL ERROR 02: Unable to copy $MAIN_APP to $BASE_DIR/$MAIN_APP" >> $RESULT_FILE
	exit 2
fi

# check copy

if ( [ -e $BASE_DIR/$MAIN_APP ] ) ; then
	echo "$BASE_DIR/$MAIN_APP			 		[Ok]"
	echo "$BASE_DIR/$MAIN_APP			 		[Ok]" >> $RESULT_FILE
else
	echo "FATAL ERROR 03: Failure to copy $MAIN_APP to $BASE_DIR/$MAIN_APP"
	echo "FATAL ERROR 03: Failure to copy $MAIN_APP to $BASE_DIR/$MAIN_APP" >> $RESULT_FILE
	exit 3
fi

#
# Set correct permissions on grey application
#

chmod 755 $BASE_DIR/$MAIN_APP
ln -s $BASE_DIR/$MAIN_APP /home/greystone/Desktop/DatafastX
#
# check for $MODULE_DIR
#

if ( [ -d $BASE_DIR/$MODULE_DIR ] ) then
	echo "$BASE_DIR/$MODULE_DIR exists" >> $RESULT_FILE
else
	echo "Creating $BASE_DIR/$MODULE_DIR"
	echo "Creating $BASE_DIR/$MODULE_DIR" >> $RESULT_FILE
	mkdir $BASE_DIR/$MODULE_DIR
	RSLT=$?
	#
	# check status
	#
	if ( ! [ $RSLT = 0 ] ) then
		echo "mkdir result = $RSLT"
		echo "FATAL ERROR 04: Unable to create $BASE_DIR/$MODULE_DIR"
		echo "mkdir result = $RSLT" >> $RESULT_FILE
		echo "FATAL ERROR 04: Unable to create $BASE_DIR/$MODULE_DIR" >> $RESULT_FILE
		exit 4
	fi
fi

echo "$BASE_DIR/$MODULE_DIR			 		[Ok]"
echo "$BASE_DIR/$MODULE_DIR			 		[Ok]" >> $RESULT_FILE

#
# if old driver exists then save it and copy new driver
# in it's place
#
SN=0
if ( [ -e $BASE_DIR/$MODULE_DIR/$MODULE ] ) then

	# if old driver exists check for xx.0 backup
	# if the xx.0 backup exists then check for xx.1 backup

	if( [ -e $BASE_DIR/$MODULE_DIR/$MODULE.$SN ] ) then
		SN=$N+1

		# check for xx.1 backup, if it exists then copy
		# it to xx.2

		if ( [ -e $BASE_DIR/$MODULE_DIR/$MODULE.$SN ] ) then
			SN_NEW=$SN+1

			# if xx.2 exists then remove it, 3 backups are enough

			if ( [ -e $BASE_DIR/$MODULE_DIR/$MODULE.$SN_NEW ] ) then
				rm -f $BASE_DIR/$MODULE_DIR/$MODULE.$SN_NEW
			fi

			# change name of xx.1 to xx.2

			mv $BASE_DIR/$MODULE_DIR/$MODULE.$SN $BASE_DIR/$MODULE_DIR/$MODULE.$SN_NEW
		fi

		# copy xx.0 to xx.1
		SN=$N-1
		SN_NEW=$SN+1

		# change name of xx.0 to xx.1

		mv $BASE_DIR/$MODULE_DIR/$MODULE.$SN $BASE_DIR/$MODULE_DIR/$MODULE.$SN_NEW
	fi

	# change name of driver to xx.0

	SN=0
	mv $BASE_DIR/$MODULE_DIR/$MODULE $BASE_DIR/$MODULE_DIR/$MODULE.$SN
fi

#
# copy driver
#

echo "Copying ./$MODULE_DIR/$MODULE to $BASE_DIR/$MODULE_DIR/$MODULE" >> $RESULT_FILE
cp -f ./$MODULE_DIR/$MODULE $BASE_DIR/$MODULE_DIR/$MODULE

RSLT=$?

# check copy status

if ( ! [ $RSLT = 0 ] ) then
	echo "cp result = $RSLT"
	echo "FATAL ERROR 08: Unable to copy $MODULE to $BASE_DIR/$MODULE_DIR/$MODULE"
	echo "cp result = $RSLT" >> $RESULT_FILE
	echo "FATAL ERROR 08: Unable to copy $MODULE to $BASE_DIR/$MODULE_DIR/$MODULE" >> $RESULT_FILE
	exit 5
fi

# check copy

if ( [ -e $BASE_DIR/$MODULE_DIR/$MODULE ] ) then
	echo "$BASE_DIR/$MODULE_DIR/$MODULE			 		[Ok]"
	echo "$BASE_DIR/$MODULE_DIR/$MODULE			 		[Ok]" >> $RESULT_FILE
else
	echo "FATAL ERROR 09: Failure to copy $MODULE to $BASE_DIR/$MODULE_DIR/$MODULE"
	echo "FATAL ERROR 09: Failure to copy $MODULE to $BASE_DIR/$MODULE_DIR/$MODULE" >> $RESULT_FILE
	exit 6
fi

#
# check for $DRIVER_DIR
#

if ( [ -d $DRIVER_DIR ] ) then
	echo "$DRIVER_DIR exists" >> $RESULT_FILE
else
	echo "Creating $DRIVER_DIR"
	echo "Creating $DRIVER_DIR" >> $RESULT_FILE
	mkdir $DRIVER_DIR 
	RSLT=$?
	#
	# check status
	#
	if ( ! [ $RSLT = 0 ] ) then
		echo "mkdir result = $RSLT"
		echo "FATAL ERROR 10: Unable to create $DRIVER_DIR"
		echo "mkdir result = $RSLT" >> $RESULT_FILE
		echo "FATAL ERROR 10: Unable to create $DRIVER_DIR" >> $RESULT_FILE
		exit 7
	fi
fi

echo "$DRIVER_DIR			 		[Ok]"
echo "$DRIVER_DIR			 		[Ok]" >> $RESULT_FILE

#
# if old driver exists then save it and copy new driver
# in it's place
#
SN=0
if ( [ -e $DRIVER_DIR/$MODULE ] ) then

	# if old driver exists check for xx.0 backup
	# if the xx.0 backup exists then check for xx.1 backup

	if( [ -e $DRIVER_DIR/$MODULE.$SN ] ) then
		SN=$SN+1

		# check for xx.1 backup, if it exists then copy
		# it to xx.2

		if ( [ -e $DRIVER_DIR/$MODULE.$SN ] ) then
			SN_NEW=$SN+1

			# if xx.2 exists then remove it, 3 backups are enough

			if ( [ -e $DRIVER_DIR/$MODULE.$SN_NEW ] ) then
				rm -f $DRIVER_DIR/$MODULE.$SN_NEW
			fi

			# change name of xx.1 to xx.2

			mv $DRIVER_DIR/$MODULE.$SN $DRIVER_DIR/$MODULE.$SN_NEW
		fi

		# copy xx.0 to xx.1
		SN=$SN-1
		SN_NEW=$SN+1

		# change name of xx.0 to xx.1

		mv $DRIVER_DIR/$MODULE.$SN $DRIVER_DIR/$MODULE.$SN_NEW
	fi

	# change name of driver to xx.0

	SN=0
	mv $DRIVER_DIR/$MODULE $DRIVER_DIR/$MODULE.$SN
fi

#
# copy driver to someplace where the operating system can get it
#

echo "Copying ./$MODULE to $DRIVER_DIR/$MODULE" >> $RESULT_FILE
cp -f ./$MODULE_DIR/$MODULE $DRIVER_DIR/$MODULE

RSLT=$?

# check copy status

if ( ! [ $RSLT = 0 ] ) then
	echo "cp result = $RSLT"
	echo "FATAL ERROR 11: Unable to copy $MODULE to $DRIVER_DIR/$MODULE"
	echo "cp result = $RSLT" >> $RESULT_FILE
	echo "FATAL ERROR 11: Unable to copy $MODULE to $DRIVER_DIR/$MODULE" >> $RESULT_FILE
	exit 8
fi

# check copy

if ( [ -e $DRIVER_DIR/$MODULE ] ) then
	echo "$DRIVER_DIR/$MODULE			 		[Ok]"
	echo "$DRIVER_DIR/$MODULE			 		[Ok]" >> $RESULT_FILE
else
	echo "FATAL ERROR 12: Failure to copy $MODULE to $DRIVER_DIR/$MODULE"
	echo "FATAL ERROR 12: Failure to copy $MODULE to $DRIVER_DIR/$MODULE" >> $RESULT_FILE
	exit 9
fi

# install changeowner script to install new driver on re-boot

#
# if old changeowner exists then save it and copy new changeowner
# in it's place
#
SN=0
if ( [ -e $CO_PATH/$CHANGEOWNER ] ) then

	# if old changeowner exists check for xx.0 backup
	# if the xx.0 backup exists then check for xx.1 backup

	if( [ -e $CO_PATH/$CHANGEOWNER.$SN ] ) then
		SN=$SN+1

		# check for xx.1 backup, if it exists then copy
		# it to xx.2

		if ( [ -e $CO_PATH/$CHANGEOWNER.$SN ] ) then
			SN_NEW=$SN+1

			# if xx.2 exists then remove it, 3 backups are enough

			if ( [ -e $CO_PATH/$CHANGEOWNER.$SN_NEW ] ) then
				rm -f $DRIVER_DIR/$MODULE.$SN_NEW
			fi

			# change name of xx.1 to xx.2

			mv $CO_PATH/$CHANGEOWNER.$SN $CO_PATH/$CHANGEOWNER.$SN_NEW
		fi

		# copy xx.0 to xx.1
		SN=$SN-1
		SN_NEW=$SN+1

		# change name of xx.0 to xx.1

		mv $CO_PATH/$CHANGEOWNER.$SN $CO_PATH/$CHANGEOWNER.$SN_NEW
	fi

	# change name of changeowner to xx.0

	SN=0
	mv $CO_PATH/$CHANGEOWNER $CO_PATH/$CHANGEOWNER.$SN
fi

#
# copy changeowner to someplace where the operating system can get it
#

echo "Copying ./$CHANGEOWNER to $CO_PATH" >> $RESULT_FILE
cp -f ./$CHANGEOWNER $CO_PATH

RSLT=$?

# check copy status

if ( ! [ $RSLT = 0 ] ) then
	echo "cp result = $RSLT"
	echo "FATAL ERROR 13: Unable to copy $CHANGEOWNER to $CO_PATH/$CHANGEOWNER"
	echo "cp result = $RSLT" >> $RESULT_FILE
	echo "FATAL ERROR 13: Unable to copy $CHANGEOWNER to $CO_PATH/$CHANGEOWNER" >> $RESULT_FILE
	exit 10
fi

# check copy

if ( [ -e $CO_PATH/$CHANGEOWNER ] ) then
	echo "$CO_PATH/$CHANGEOWNER			 		[Ok]"
	echo "$CO_PATH/$CHANGEOWNER			 		[Ok]" >> $RESULT_FILE
else
	echo "FATAL ERROR 14: Failure to copy $CHANGEOWNER to $CO_PATH/$CHANGEOWNER"
	echo "FATAL ERROR 14: Failure to copy $CHANGEOWNER to $CO_PATH/$CHANGEOWNER" >> $RESULT_FILE
	exit 11
fi

if ( [ -e $CO_PATH/$RC_LOCAL ] ) then	
	cat $CO_PATH/$RC_LOCAL | grep $CHANGEOWNER >/dev/null
	RSLT=$?
	if ( [ $RSLT = 0 ] ) then
		echo "True"
		sed /exit/d $CO_PATH/$RC_LOCAL >$TEMP_FILE
        	sed /$CHANGEOWNER/d $TEMP_FILE >$CO_PATH/$RC_LOCAL
		sed '$d' $CO_PATH/$RC_LOCAL >$TEMP_FILE
		cp -f $TEMP_FILE $CO_PATH/$RC_LOCAL
	else
		echo "False"
		sed /exit/d $CO_PATH/$RC_LOCAL >$TEMP_FILE
		sed /route/d $TEMP_FILE >$CO_PATH/$RC_LOCAL
	fi
	
        #sed 's/exit 0/# Add this line to call changeowner file/g' $CO_PATH/$RC_LOCAL>$TEMP_FILE
	RSLT=$?
        if ( [ $RSLT = 0 ] ) then
		# This next line will add the $CHANGEOWNER file to the boot initialization
		# file. The $CHANGEOWNER file will be executed at the next reboot
                echo "if ( [ -e $CO_PATH/$CHANGEOWNER ] );  then $CO_PATH/$CHANGEOWNER" >> $CO_PATH/$RC_LOCAL
		echo "fi" >> $CO_PATH/$RC_LOCAL
		echo "exit 0" >> $CO_PATH/$RC_LOCAL
		RSLT=$?
                if( [ $RSLT = 0 ] ) then
			echo "$CO_PATH/$RC_LOCAL			 		[Ok]"
			echo "$CHANGEOWNER added successfully to $CO_PATH/$RC_LOCAL" >> $RESULT_FILE
			echo "Installation completed successfully" >> $RESULT_FILE
			echo "*************************************************************"
			echo "DF-X Application software and Driver installed successfully"

			#
			# delete install directory and files
			#
			cd $HOMEDIR
			rm -rf $HOMEDIR/dfx.dist
                        rm -rf $HOMEDIR/$DFX_APP
			rm -rf $HOMEDIR/$HELP_APP
                        chmod -R 777 $BASE_DIR
			#
			# SUCCESSFUL INSTALLATION!
			#
			# sleep for a short time to allow customer to digest message
			sleep 5

			#
                        # If a "-n" is entered on the command line the DF-X will
			# not be rebooted after the installation
			#
                        if ( [ "$1" = "-n" ] ) then
				echo "Reboot the DF-X to complete installation"
			else
				echo "The DF-X will restart Now..."
				sleep 2
                                reboot
			fi
		else
			echo "FATAL ERROR 15: Unable to add $CHANGEOWNER to $RC_LOCAL"
			echo "FATAL ERROR 15: Unable to add $CHANGEOWNER to $RC_LOCAL" >> $RESULT_FILE
			exit 14
		fi
		
	else
		echo "FATAL ERROR 17: Unable to remove $CHANGEOWNER from $RC_LOCAL"
		echo "FATAL ERROR 17: Unable to remove $CHANGEOWNER from $RC_LOCAL" >> $RESULT_FILE
		echo "sed result: $RSLT" >> $RESULT_FILE
		exit 13
	fi

	rm -f $TEMP_FILE
else
	echo "FATAL ERROR 18: $CO_PATH/$RC_LOCAL does not exist - unable to install driver"
	echo "FATAL ERROR 18: $CO_PATH/$RC_LOCAL does not exist - unable to install driver" >> $RESULT_FILE
	exit 12
fi

#################################
exit 0
#################################

