#!/bin/ksh -p
#
# ident "installer.ksh $Date: 2008-06-23 16:15:35 -0700 (Mon, 23 Jun 2008) $ $Revision: 250 $"
#
# Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
# Use is subject to license terms.
#

PATH=/bin:/usr/bin:/usr/sbin

OS="$(uname -s)"

ISA="$(uname -m)"
case "$ISA" in
  sun4*)      ISA="sparc";;
  i?86*|i86*) ISA="i386";;
  x86_64)     ISA="x86_64";;
esac  

GetPROGRAM_DIR() {
  (cd $1; pwd)
}

PROGRAM_ID="${0##*/}"
PROGRAM_DIR="$(GetPROGRAM_DIR ${0%/*})"

Usage() {
  cat 1>&2 <<-!
	Usage: $PROGRAM_ID $PROGRAM_OPTS

	   -a admin
	      specify an admin(4) file to be used by pkgadd(1m)
	      calls during install (Solaris only)

	   -d dir
	      specify a directory to install the software from
	!

  exit 1
}

Error() {
  print -u2 "$PROGRAM_ID: error, $1"
}

Fatal() {
  print -u2 "$PROGRAM_ID: fatal, $1"
  exit 1
}

UPGRADE_QUESTION () {
  print "\nSun Ray Connector $PROD_VER is currently installed."
  print "Do you want to uninstall it"
  print "and install Sun Ray Connector 2.1?"
}

UPGRADE_PROD () {
    if $FORCE; then
      UPGRADE_QUESTION
      print "$PROMPT Y"   # answer 'Y' is supplied
      $PROD_LOCAL/$BASEPKG/sbin/uninstaller  $*
    else
      while true; do
        UPGRADE_QUESTION
        print -n "$PROMPT "
        read RESPONSE
        case "$RESPONSE" in
          [Yy]|[Yy][Ee][Ss]) 
  	    $PROD_LOCAL/$BASEPKG/sbin/uninstaller  $*
	    break;;
          [Nn]|[Nn][Oo])    exit 1;;
        esac
      done
    fi
}

# main() {

OPTSTR="a:d:fp:v"
PROGRAM_OPTS="[-a admin] [-d dir]"

FORCE=false
OPT_V=""
IMAGE_ROOT=""
ADMIN_FILE=""
PREFIX=""

while getopts $OPTSTR OPT; do
  case "$OPT" in
    f) FORCE=true;;
    v) OPT_V="-v";;
    d) IMAGE_ROOT="$OPTARG";;
    a) ADMIN_FILE="$OPTARG";;
    p) PREFIX="$OPTARG";;
    *) Usage;;
  esac
done
shift $(($OPTIND - 1))

if (( $# != 0 )); then
  Usage
fi

case "$(id)" in
  'uid=0('*) ;; # ok uid is zero (root)
  *) Fatal "must be run as 'root'";;
esac

if [[ -z "$IMAGE_ROOT" ]]; then
  IMAGE_ROOT="$PROGRAM_DIR"
fi

if [[ ! -d $IMAGE_ROOT ]]; then
  Fatal "'$IMAGE_ROOT' is not a directory"
fi

case "$OS" in
SunOS)
  if [[ -n "$PREFIX" ]]; then
    Fatal "can not specify -p option on Solaris"
  fi

  if [[ -z "$ADMIN_FILE" ]]; then
    ADMIN_FILE="$IMAGE_ROOT/.install/admin_default"
  fi
  if [[ ! -r $ADMIN_FILE ]]; then
    Fatal "can not read '$ADMIN_FILE'"
  fi
  ;;

Linux)
  if [[ -n "$ADMIN_FILE" ]]; then
    Fatal "can not specify -a option on Linux"
  fi
  if [[ -z "$PREFIX" ]]; then
    PREFIX="/opt"
  fi

  ;;
esac

LICENSE_AGREEMENT="$IMAGE_ROOT/Legal/SLA.txt"

if [[ ! -r "$LICENSE_AGREEMENT" ]]; then
  Fatal "can not read '$LICENSE_AGREEMENT'"
fi

PROMPT="Accept (Y/N):"

if $FORCE; then
  cat $LICENSE_AGREEMENT
  print "$PROMPT Y"   # answer 'Y' is supplied
else
  more $LICENSE_AGREEMENT

  while true; do
    print -n "$PROMPT "
    read RESPONSE
    case "$RESPONSE" in
      [Yy]|[Yy][Ee][Ss]) break;;
      [Nn]|[Nn][Oo])     exit 1;;
    esac
  done
fi

PRODUCT_ROOT="$IMAGE_ROOT/Sun_Ray_Connector_2.1"


case "$OS,$ISA" in
  "SunOS,sparc")  DIR="$PRODUCT_ROOT/Solaris_10+/sparc/Packages";;
  "SunOS,i386")   DIR="$PRODUCT_ROOT/Solaris_10+/i386/Packages";;
  "Linux,i386")   DIR="$PRODUCT_ROOT/Linux/Packages";;
  "Linux,x86_64") DIR="$PRODUCT_ROOT/Linux/Packages";;
esac

case "$OS" in
SunOS)
  BASEPKG="SUNWuttsc"
  PKGS="SUNWuttsc SUNWuttscr"
  KIOPKG="SUNWuttsc-kiosk"
  KIODEP="SUNWkio"

  INSTALL_OPTS="-a $ADMIN_FILE"

  if pkginfo -q $BASEPKG; then
    PROD_VER="$(pkgparam $BASEPKG SUNW_PRODVERS)"
    PROD_LOCAL="$(pkgparam $BASEPKG BASEDIR)"
    UPGRADE_PROD $INSTALL_OPTS
  fi

  print "\n+++ Installing 'Sun Ray Connector 2.1'"

  if pkginfo -q $KIODEP ; then
      PKGS="$PKGS $KIOPKG"
  else  
      print "\n+++ Kiosk Mode Package '$KIODEP' is not installed"
      print   "+++ Skipping '$KIOPKG'."
  fi	  

  for PKG in $PKGS
  do
	  if pkginfo -q $PKG; then
	      PROD_VER="$(pkgparam $PKG SUNW_PRODVERS)"
	      print "\n+++ Package '$PKG' (version $PROD_VER) is already installed"
	      print   "+++ Skipping '$PKG' (version 2.1)."
	    
	  else  
	      print "\n+++ Adding '$PKG'"
	      pkgadd $OPT_V $INSTALL_OPTS -d $DIR $PKG
	  fi  
  done  
  ;;

Linux)
  BASEPKG="SUNWuttsc"
  PKG="SUNWuttsc" 
  ROOT_PKG="SUNWuttscr" 
  NORELOC_PKG="SUNWuttsc-kiosk"
  INSTALL_OPTS="--prefix $PREFIX $INSTALL_PATH"

  if rpm -q $BASEPKG 1>&- 2>&-; then
    PROD_VER="$(rpm -q --qf='%{VERSION}' $BASEPKG)"
    PROD_LOCAL="$(rpm -q --qf='%{INSTALLPREFIX}' $BASEPKG)"
    UPGRADE_PROD
  fi
  if [[ -n "$OPT_V" ]]; then
    OPT_V="-vv"
  fi
  print "\n+++ Installing 'Sun Ray Connector 2.1'"

  print "\n+++ Adding '$PKG'"
  rpm $OPT_V -i --nodeps $INSTALL_OPTS $DIR/$PKG-[0-9]*.rpm

  print "\n+++ Adding '$ROOT_PKG'"
  rpm $OPT_V -i --nodeps $DIR/$ROOT_PKG-[0-9]*.rpm

  if rpm -q $NORELOC_PKG 1>&- 2>&-; then
    PROD_VER="$(rpm -q --qf='%{VERSION}' $NORELOC_PKG)"
    print "\n+++ RPM '$NORELOC_PKG' (version $PROD_VER) is already installed"
    print   "+++ Skipping '$NORELOC_PKG' (version 2.1)."
  else
    print "\n+++ Adding '$NORELOC_PKG'"
    rpm $OPT_V -i --nodeps $DIR/$NORELOC_PKG-[0-9]*.rpm
  fi
  ;;
esac

exit 0
# }
