#!/bin/sh
#
# Andrei.Ryjov  AKA  aryzhov@excite.com  Mon Jan 15 14:41:59 MET 2001
#
. $JSINCLUDE/Subroutines || exit 1 ;
SetRootOpts ; [ X$ROOT != X/ ] && exec Chroot_Script $0 $*

egrep -s '^#!NoPatch' $SI_PROFILE &&  {
  NotifyMe "

     Patching will be skipped as requested in SI_PROFILE
     remove the NoPatch line to enable patching again

  "
  exit 0
}


CLUSTER_LIST=$*
DEFAULT_CLUSTER_LIST="oncd Recommended"

FASTPATCH="patchadd $ROOTOPTS -u -d -M"
echo $JS_PATCH_METHOD | grep -i fast && FASTPATCH="fastpatch.pl $ROOTOPTS -nfbI -p"

#
# Default patch sets - in case we forgot the arguments
#
[ -z "$CLUSTER_LIST" ] && {
  echo "
        WARNING:
                Patch cluster name not specified in $0 command line
                Selecting default sets - $DEFAULT_CLUSTER_LIST

  "
  CLUSTER_LIST=$DEFAULT_CLUSTER_LIST
}

echo Applying Solaris patches

HOME=$JS_PATCH_DIR
export HOME

cd /tmp
#
# if BOOTED and TARGET releases are different,
# Jumpstart's built-in finish_script tries to install the patches
# from CD image for BOOTED release before our finish script.
#
# To avoiid this, the patchdir on CD image was removed;
# the ONCD patches are installed here before Recommended cluster
# Just in case...
#
TSYMBOL=`echo $TARGET | cut -d. -f2-`
PREFIXES="$TARGET $TSYMBOL"
SUFFIXES="zip tgz tar.Z z tar.z tar.gz tar.bz2 tbz2"

for CLUSTER in $CLUSTER_LIST ; do

  echo "Installing $CLUSTER patch cluster - started at  `date`"
  echo Looking for a patch cluster \"$CLUSTER\" for Solaris $TARGET
  FILES=""
  for P in $PREFIXES  ; do for S in $SUFFIXES ; do
     [ -f $HOME/${P}.${CLUSTER}.$S ] && FILES="$FILES $HOME/${P}.${CLUSTER}.$S"
     [ -f $HOME/${P}_${CLUSTER}.$S ] && FILES="$FILES $HOME/${P}_${CLUSTER}.$S"
  done ; done

  COUNT=`echo $FILES | wc -w`

  [ $COUNT -eq 0 ] && {
    echo "
      WARNING:
        No $CLUSTER patch cluster for Solaris $TARGET
    "
    continue
  }

  FILES=`ls -1 $FILES | sort -u`
  COUNT=`echo $FILES | wc -w`

  [ $COUNT -ne 1 ] && {
    echo "
      WARNING:
        More than one patch $CLUSTER clusters found:
        $FILES

        Selecting the latest - `ls -rt $FILES | tail -1`
    "
    FILES=`ls -1rt $FILES | tail -1`
  }

  FILES=`echo $FILES`

  echo Extracting $HOME/$FILES to `pwd`
  case `echo $FILES | awk -F. '{print $NF}'` in
    *bz2)
      bzip2 -d <$FILES | tar xvf - 2>&1 | awk '{print $2}' | sed 's/,$//'  >/tmp/PatchList
      ;;
    z|Z|gz|tgz)
      gzip -d <$FILES  | tar xvf - 2>&1 | awk '{print $2}' | sed 's/,$//'  >/tmp/PatchList
      ;;
    zip)
      unzip $FILES                 2>&1 | awk '{print $NF}'| sed 's/\/$//' >/tmp/PatchList
      ;;
    *)
      echo Unsuported suffix in $FILES ; continue
      ;;
  esac

  PATCHXXX=`cat /tmp/PatchList | egrep '/[0-9]*-[0-9][0-9]$' | tail -1`
  PATCHDIR=`pwd`/`dirname $PATCHXXX`

# set -x
# [ x$SI_PROFILE != x ] && egrep -s '^filesys.*mirror' $SI_PROFILE && {
#   #
#   # If the root disk is being mirrored during Jumpstart,
#   # don't install any patches containing SUNWmd* packages
#   # from within Jumpstart finish scripts!
#   #
#   echo Skipping patches
#   find $PATCHDIR | egrep /SUNWmd | sed 's:/SUNWmd.*$::' | sort -u | xargs rm -rf
# }
# set +x

  PATCHLIST=`ls $PATCHDIR | egrep '^[0-9]*-[0-9][0-9]$'`
  [ -f $PATCHDIR/patch_order ] && PATCHLIST=`cat $PATCHDIR/patch_order`

  PKGLIST="`pkginfo $ROOTOPTS | awk '{print $2}' | cut -d. -f1`"
  PATCHFULL=$PATCHLIST
  PATCHLIST=""

  echo "Re-generating list of patches according to installed packages only"
  echo "Full Cluster: `echo $PATCHFULL`"
  echo "New  Cluster: \c"

  for PCH in $PATCHFULL ; do
    POLD="$PATCHLIST"
    for PKG in `ls $PATCHDIR/$PCH/*/pkginfo | awk -F/ '{print $(NF-1)}' | cut -d. -f1` ; do
      echo "$PKGLIST" | egrep -s "^$PKG\$" && { echo "$PCH \c" ; PATCHLIST="$PATCHLIST $PCH" ; break ; }
    done
    [ "$PATCHLIST" != "$POLD" ] && PATCHLIST="$PATCHLIST          "
  done
  echo

  if [ -z "$PATCHLIST" ] ; then
    echo No packages to patch with cluster \"$CLUSTER\"
  else
    echo Installing patches from $PATCHDIR
    echo $FASTPATCH $PATCHDIR $PATCHLIST
    time $FASTPATCH $PATCHDIR $PATCHLIST
  fi
  echo "Installed  $CLUSTER patch cluster - finish  at  `date`"
  rm -r $PATCHDIR

done

# uname -n | egrep -s wcwe001d && start_shell
