#!/bin/sh
#
# Copyright (c) 2006 by Sun Microsystems, Inc.
# All rights reserved.
#
# Installation script for the Sun Desktop Manager 1.0 - Client Installation
# 

################################################################################
#
# Global variables
#
################################################################################
MISSINGPATCHES=""


################################################################################
#
# Check if user is logged in as root
#
################################################################################

isRoot() 
{
    id=`id | awk '{print $1}'`
    if [ "${id}" != "uid=0(root)" ]; then
        echo "You must be the system's root user to perform the installation."
        echo
        exit 1
    fi
}


################################################################################
# 
# Create pkgadd admin file (used by installPackages/uninstallPackages)
#
################################################################################

createAdminFile() {
    echo "mail=" >> ${ADMIN}
    echo "instance=overwrite" >> ${ADMIN}
    echo "partial=nocheck" >> ${ADMIN}
    echo "runlevel=nocheck" >> ${ADMIN}
    echo "idepend=nocheck" >> ${ADMIN}
    echo "rdepend=nocheck" >> ${ADMIN}
    echo "space=nocheck" >> ${ADMIN}
    echo "setuid=nocheck" >> ${ADMIN}
    echo "conflict=nocheck" >> ${ADMIN}
    echo "action=nocheck" >> ${ADMIN}
    echo "basedir=default" >> ${ADMIN}
}


################################################################################
# 
# Install Solaris packages
#
################################################################################

installPackages() 
{
    echo ""
    echo "Installing Packages"

    ADMIN=/tmp/admin.$$
    createAdminFile

    pkgadd -n -a ${ADMIN} -d . SUNWapleg
    pkgadd -n -a ${ADMIN} -d . SUNWardsa
    pkgadd -n -a ${ADMIN} -d . SUNWardsa-misc

    rm -f ${ADMIN}
}

################################################################################
# 
# Remove a Solaris package
#
################################################################################
removePackage()
{
    pkginfo -q $2
    if [ $? -eq 0 ]; then
	# package installed, remove it
	pkgrm -n -a $1 $2
    fi
}


################################################################################
# 
# Remove Solaris packages
#
################################################################################

removePackages() 
{
    echo "Removing Packages"
    
    ADMIN=/tmp/admin.$$
    createAdminFile

    removePackage ${ADMIN} SUNWardsa-misc
    removePackage ${ADMIN} SUNWardsa
    removePackage ${ADMIN} SUNWapleg

    rm -f ${ADMIN}
}


#################################################################################
# Check user input
# $1 Message to display
# $2 valid answer from the user
#
################################################################################
checkUserInput() {
 while true; do
        echo
        /usr/ucb/echo -n $1
        read INPUT
        if [ "$INPUT" ]; then
            case "$INPUT" in
                y|Y|yes|YES)
                    return 0
                    ;;
                n|N|no|NO)
                    echo "Exiting installation"
                    exit
                    ;;
                *)
                    echo "Invalid input."
                    continue
                    ;;
            esac
         fi
    done
}

################################################################################
# 
# checkPatchLevel
#
################################################################################
checkPatchLevel() {

    TOINSTALLFILE=/tmp/toinstall.$$
    INSTALLEDPATCHES=/tmp/installed.$$
    REQPATCHES=`ls Patches | nawk -F. '{print$1}'`
    showrev -p > $INSTALLEDPATCHES

    for REQPATCH in $REQPATCHES; do
	grep $REQPATCH $INSTALLEDPATCHES 2>&1 > /dev/null
	if [ $? -eq 1 ]; then
	    echo $REQPATCH >> $TOINSTALLFILE
	fi
    done
    
    rm -f $INSTALLEDPATCHES
    
    if [ -f $TOINSTALLFILE ]; then
	MISSINGPATCHES=`cat $TOINSTALLFILE`
	rm -f $TOINSTALLFILE
    fi
}

################################################################################
# 
# Display Warnings
#
################################################################################

displayWarnings() {
    if [ "x" != "x$MISSINGPATCHES" ]; then
	echo
	echo "********************************************************************"
	echo "WARNING: The following required patches are not installed"
	echo "on your system:"
	echo
	for PATCH in $MISSINGPATCHES; do
	    echo "\t$PATCH"
	done
	echo
        echo "Please install them on your target system."
	echo
	echo "Please refer to the Release Notes for information about the"
	echo "patches and the issues they address."
	echo "A copy that may not be the most up to date is available under "
	echo "the Patches directory, please go to http://sunsolve.sun.com for"
	echo "the latest version of these patches."
	echo "********************************************************************"
	echo
    fi
}


################################################################################
# 
# Installation
#
################################################################################

install() {
    echo
    echo "- Sun Desktop Manager 1.0 - Client Installation -"
    isRoot
    # is SUNWapleg installed?
    pkginfo -q SUNWapleg
    if [ $? -eq 0 ]; then
	#installed

    	INSTALLEDVERSION=`pkginfo -l SUNWapleg |grep VERSION | awk '{print $2}'| awk -F. '{print$1"."$2"."$3"."$4}'`
        PKGVERSION=`pkginfo -d . -l SUNWapleg |grep VERSION |awk '{print $2}'|
awk -F. '{print$1"."$2"."$3"."$4}'`
        if [ $INSTALLEDVERSION = $PKGVERSION ]; then
                checkUserInput "Reinstall Sun Desktop Manager - Client? [y/n]" 
        else
                checkUserInput "Upgrade Sun Desktop Manager - Client? [y/n]" 
	fi

	echo "Proceeding to uninstall old packages"
	uninstall
	echo "Uninstallation finished"
    else
	checkUserInput "Install Sun Desktop Manager - Client? [y/n]"
    fi

    installPackages
    echo "-- Installation completed." 
    echo
    checkPatchLevel
    displayWarnings

    echo "The installation log can be found in " $1
}


################################################################################
# 
# Uninstallation
#
################################################################################

uninstall() {
    isRoot
    removePackages
}

#################################################################################
# acceptLicense
#
################################################################################
acceptLicense() {
	LICENSEBASEDIR="../../Licenses"
        LICENSEBASENAME="$LICENSEBASEDIR/LICENSE"
        ACCEPTSENTENCE="$LICENSEBASEDIR/AcceptSentence"

        if [ $LANG ]; then
                FILE="$LICENSEBASENAME.$LANG"
                SENTENCE="$ACCEPTSENTENCE.$LANG"
                if [ ! -f $FILE -o ! -f $SENTENCE ]; then
                        FILE=$LICENSEBASENAME
                        SENTENCE=$ACCEPTSENTENCE
                fi
        else
                FILE=$LICENSEBASENAME
                SENTENCE=$ACCEPTSENTENCE
        fi
        if [ ! -f $FILE ]; then
                echo "No license file available. Exiting the installation"
                exit 1
        fi
        if [ ! -f $SENTENCE ]; then
                echo "No acceptance sentence available. Exiting installation"
                exit 1
        fi

        MSG=`cat "$SENTENCE"`
        more "$FILE"
        checkUserInput "$MSG"
}



################################################################################
# 
# Main
#
################################################################################

acceptLicense
LOGFILE=/var/sadm/install/logs/SunDesktopManagerClient_install.`date "+%Y%m%d%H%M%S`
install $LOGFILE 2>&1 | tee $LOGFILE
