#!/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