Article Figure 1 Listing 1 Listing 2 Listing 3
Listing 4 feb2007.tar

Listing 4 Pull_cluster


#!/bin/bash 
################################################
#
#  pull_cluster.sh - 
#
#  Purpose: - This script is designed to pull the new patch clusters and 
#  install them in the common patch directories. 
#
#  the patch script first moves the old patch to the production 
#  directories and then pulls the new patch clusters down to the 
#  appropriate development directories.
#  
#  This script will pull the folowing patch cluters
#  
#  9_Recommended.zip
#  8_Recommended.zip
#  7_Recommended.zip
#  
#  J2SE_Solaris_9_Recommended.zip
#  J2SE_Solaris_8_Recommended.zip
#  J2SE_Solaris_7_Recommended.zip
#
#  Special Requirements:
#  These will be installed in the appropriate share directories. 
#
#  patchdir ---- 
#           | Production -----
#                |5.7
#                |5.8
#                |5.9
#                |5.10
#
#           | Development -----
#                |5.7
#                |5.8
#                |5.9
#                |5.10
#
#  where Production must have the last patch cluster and Development 
#  must have the newest patch cluster. 
#
#  to accomplish this the patches are rotated from development to production
#  and the the new cluster is obtained from sun's anonymous site...
#
#  Caution:  
#  (1) Sun may be eliminating there anonymous site when 
#  they do they will have to provide a new link. 
#
#  (2) Run as root. (eventually put in root's cron)
#
#
##################################################
# DEBUG LINE
set -x 

PRODUCTION="production"
DEVELOPMENT="development"
PATCHDIR="/patches"
OS=( 7 8 9 )
USER="--username"
PASSWD="--password"
URL="http://patches.sun.com/clusters"
UserID
UserPWD
PATH=$PATH:/usr/local/bin
export PATH

#######################
#                     #
# SUPPORT FUNCTIONS   #
#                     #
# get_cluster()       #
# md5()               #
# check_development() #
# check_production()  #
#                     #
#######################

function get_cluster()
{
 wget --http-user=${UserID} --http-passwd=${UserPWD} \
 "http://sunsolve.sun.com/private-cgi/ \
  pdownload.pl?target=${1}_Recommended.zip&method=h" \
 -O ${PATCHDIR}/${DEVELOPMENT}/5.${1}/${1}_Recommended.zip

 wget --http-user=${UserID} --http-passwd=${UserPWD} \
 "http://sunsolve.sun.com/private-cgi/ \
  pdownload.pl?target=J2SE_Solaris_${1}_Recommended.zip&method=h" \
 -O ${PATCHDIR}/${DEVELOPMENT}/5.${1}/J2SE_Solaris_${1}_Recommended.zip

# old lines that worked in the past.. before sun mucked around
# wget ${USER} ${PASSWD} -P ${PATCHDIR}/${DEVELOPMENT}/5.${1} \
  ${URL}/${1}_Recommended.zip 
# wget ${USER} ${PASSWD} -P ${PATCHDIR}/${DEVELOPMENT}/5.${1} \
  ${URL}/J2SE_Solaris_${1}_Recommended.zip
}

function md5()
{
   digest -a md5 ${PATCHDIR}/${DEVELOPMENT}/5.${1}/${1}_Recommended.zip > \
   ${PATCHDIR}/${DEVELOPMENT}/5.${1}/${1}_Recommended.zip.md5
   digest -a md5 ${PATCHDIR}/${DEVELOPMENT}/5.${1}/ \
     J2SE_Solaris_${1}_Recommended.zip >\
   ${PATCHDIR}/${DEVELOPMENT}/5.${1}/J2SE_Solaris_${1}_Recommended.zip.md5
}

function cleanup_zip()
{
   if [ -f ${PATCHDIR}/${DEVELOPMENT}/5.${1}/${1}_Recommended.zip ]; then
      rm ${PATCHDIR}/${DEVELOPMENT}/5.${1}/${1}_Recommended.zip
   fi
   if [ -f ${PATCHDIR}/${DEVELOPMENT}/5.${1}/${1}_Recommended.zip.md5 ]; then
      rm ${PATCHDIR}/${DEVELOPMENT}/5.${1}/${1}_Recommended.zip.md5
   fi
   if [ -f ${PATCHDIR}/${DEVELOPMENT}/5.${1}/ \
        J2SE_Solaris_${1}_Recommended.zip ]; then
      rm ${PATCHDIR}/${DEVELOPMENT}/5.${1}/ \
        J2SE_Solaris_${1}_Recommended.zip
   fi
   if [ -f ${PATCHDIR}/${DEVELOPMENT}/5.${1}/ \
        J2SE_Solaris_${1}_Recommended.zip.md5 ]; then
      rm ${PATCHDIR}/${DEVELOPMENT}/5.${1}/ \
        J2SE_Solaris_${1}_Recommended.zip.md5
   fi
}

function check_development()
{
   #
   # First check Recommended patch cluster
   #
   if [ -f ${PATCHDIR}/${DEVELOPMENT}/5.${1}/${1}_Recommended.old.zip ]; then
    if diff ${PATCHDIR}/${DEVELOPMENT}/5.${1}/${1}_Recommended.old.md5 \
            ${PATCHDIR}/${DEVELOPMENT}/5.${1}/${1}_Recommended.zip.md5; then
           mv ${PATCHDIR}/${DEVELOPMENT}/5.${1}/${1}_Recommended.zip \
              ${PATCHDIR}/${PRODUCTION}/5.${1}/${1}_Recommended.zip
           mv ${PATCHDIR}/${DEVELOPMENT}/5.${1}/${1}_Recommended.zip.md5 \
              ${PATCHDIR}/${PRODUCTION}/5.${1}/${1}_Recommended.zip.md5
    else 
        mv ${PATCHDIR}/${DEVELOPMENT}/5.${1}/${1}_Recommended.old.zip \
              ${PATCHDIR}/${PRODUCTION}/5.${1}/${1}_Recommended.zip
           mv ${PATCHDIR}/${DEVELOPMENT}/5.${1}/${1}_Recommended.old.md5 \
              ${PATCHDIR}/${PRODUCTION}/5.${1}/${1}_Recommended.zip.md5
           cp ${PATCHDIR}/${DEVELOPMENT}/5.${1}/${1}_Recommended.zip \
              ${PATCHDIR}/${DEVELOPMENT}/5.${1}/${1}_Recommended.old.zip
           cp ${PATCHDIR}/${DEVELOPMENT}/5.${1}/${1}_Recommended.zip.md5 \
              ${PATCHDIR}/${DEVELOPMENT}/5.${1}/${1}_Recommended.old.md5
    fi
   else
        cp ${PATCHDIR}/${DEVELOPMENT}/5.${1}/${1}_Recommended.zip \
           ${PATCHDIR}/${DEVELOPMENT}/5.${1}/${1}_Recommended.old.zip
        cp ${PATCHDIR}/${DEVELOPMENT}/5.${1}/${1}_Recommended.zip.md5 \
           ${PATCHDIR}/${DEVELOPMENT}/5.${1}/${1}_Recommended.old.md5
   fi    

   #
   # Now Check J2SE patch cluster
   #

   if [ -f ${PATCHDIR}/${DEVELOPMENT}/5.${1}/ \
        J2SE_Solaris_${1}_Recommended.old.zip ]; then
    if diff ${PATCHDIR}/${DEVELOPMENT}/5.${1}/ \
        J2SE_Solaris_${1}_Recommended.old.md5 \
            ${PATCHDIR}/${DEVELOPMENT}/5.${1}/ \
              J2SE_Solaris_${1}_Recommended.zip.md5; then
           mv ${PATCHDIR}/${DEVELOPMENT}/5.${1}/ \
             J2SE_Solaris_${1}_Recommended.zip \
              ${PATCHDIR}/${PRODUCTION}/5.${1}/ \
                J2SE_Solaris_${1}_Recommended.zip
           mv ${PATCHDIR}/${DEVELOPMENT}/5.${1}/ \
                J2SE_Solaris_${1}_Recommended.zip.md5 \
              ${PATCHDIR}/${PRODUCTION}/5.${1}/ \
                J2SE_Solaris_${1}_Recommended.zip.md5
    else 
        mv ${PATCHDIR}/${DEVELOPMENT}/5.${1}/ \
             J2SE_Solaris_${1}_Recommended.old.zip \
              ${PATCHDIR}/${PRODUCTION}/5.${1}/ \
                J2SE_Solaris_${1}_Recommended.zip
           mv ${PATCHDIR}/${DEVELOPMENT}/5.${1}/ \
                J2SE_Solaris_${1}_Recommended.old.md5 \
              ${PATCHDIR}/${PRODUCTION}/5.${1}/ \
                J2SE_Solaris_${1}_Recommended.zip.md5
           cp ${PATCHDIR}/${DEVELOPMENT}/5.${1}/ \
                J2SE_Solaris_${1}_Recommended.zip \
              ${PATCHDIR}/${DEVELOPMENT}/ \
                5.${1}/J2SE_Solaris_${1}_Recommended.old.zip
           cp ${PATCHDIR}/${DEVELOPMENT}/5.${1}/ \
                J2SE_Solaris_${1}_Recommended.zip.md5 \
              ${PATCHDIR}/${DEVELOPMENT}/5.${1}/ \
                J2SE_Solaris_${1}_Recommended.old.md5
    fi
   else
        cp ${PATCHDIR}/${DEVELOPMENT}/5.${1}/ \
             J2SE_Solaris_${1}_Recommended.zip \
           ${PATCHDIR}/${DEVELOPMENT}/5.${1}/ \
             J2SE_Solaris_${1}_Recommended.old.zip
        cp ${PATCHDIR}/${DEVELOPMENT}/5.${1}/ \
             J2SE_Solaris_${1}_Recommended.zip.md5 \
           ${PATCHDIR}/${DEVELOPMENT}/5.${1}/ \
             J2SE_Solaris_${1}_Recommended.old.md5
   fi    
}

function check_production()
{
   #
   # First check Recommended patch cluster
   #
   if [ -f ${PATCHDIR}/${PRODUCTION}/5.${1}/${1}_Recommended.old.zip ]; then
      if [ -f ${PATCHDIR}/${PRODUCTION}/5.${1}/${1}_Recommended.zip ]; then
    if diff ${PATCHDIR}/${PRODUCTION}/5.${1}/${1}_Recommended.old.md5 \
            ${PATCHDIR}/${PRODUCTION}/5.${1}/${1}_Recommended.zip.md5; then
           rm ${PATCHDIR}/${PRODUCTION}/5.${1}/${1}_Recommended.zip
           rm ${PATCHDIR}/${PRODUCTION}/5.${1}/${1}_Recommended.zip.md5 
    else 
           cp ${PATCHDIR}/${PRODUCTION}/5.${1}/${1}_Recommended.zip \
              ${PATCHDIR}/${PRODUCTION}/5.${1}/${1}_Recommended.old.zip
           cp ${PATCHDIR}/${PRODUCTION}/5.${1}/${1}_Recommended.zip.md5 \
              ${PATCHDIR}/${PRODUCTION}/5.${1}/${1}_Recommended.old.md5
    fi
      fi
   else
        if [ -f ${PATCHDIR}/${PRODUCTION}/5.${1}/${1}_Recommended.zip ]; then
           cp ${PATCHDIR}/${PRODUCTION}/5.${1}/${1}_Recommended.zip \
              ${PATCHDIR}/${PRODUCTION}/5.${1}/${1}_Recommended.old.zip
           cp ${PATCHDIR}/${PRODUCTION}/5.${1}/${1}_Recommended.zip.md5 \
              ${PATCHDIR}/${PRODUCTION}/5.${1}/${1}_Recommended.old.md5
    fi
   fi

   #
   # Now Check J2SE patch cluster
   #
    
   if [ -f ${PATCHDIR}/${PRODUCTION}/5.${1}/ \
        J2SE_Solaris_${1}_Recommended.old.zip ]; then
      if [ -f ${PATCHDIR}/${PRODUCTION}/5.${1}/ \
           J2SE_Solaris_${1}_Recommended.zip ]; then
    if diff ${PATCHDIR}/${PRODUCTION}/ \
      5.${1}/J2SE_Solaris_${1}_Recommended.old.md5 \
            ${PATCHDIR}/${PRODUCTION}/5.${1}/ \
              J2SE_Solaris_${1}_Recommended.zip.md5; then
           rm ${PATCHDIR}/${PRODUCTION}/5.${1}/ \
             J2SE_Solaris_${1}_Recommended.zip 
           rm ${PATCHDIR}/${PRODUCTION}/5.${1}/ \
             J2SE_Solaris_${1}_Recommended.zip.md5 
    else 
           cp ${PATCHDIR}/${PRODUCTION}/5.${1}/ \
                J2SE_Solaris_${1}_Recommended.zip \
              ${PATCHDIR}/${PRODUCTION}/5.${1}/ \
                J2SE_Solaris_${1}_Recommended.old.zip
           cp ${PATCHDIR}/${PRODUCTION}/5.${1}/ \
                J2SE_Solaris_${1}_Recommended.zip.md5 \
              ${PATCHDIR}/${PRODUCTION}/5.${1}/ \
                J2SE_Solaris_${1}_Recommended.old.md5
    fi
      fi
   else
        if [ -f ${PATCHDIR}/${PRODUCTION}/5.${1}/ \
             J2SE_Solaris_${1}_Recommended.zip ]; then
           cp ${PATCHDIR}/${PRODUCTION}/5.${1}/ \
             J2SE_Solaris_${1}_Recommended.zip \
              ${PATCHDIR}/${PRODUCTION}/5.${1}/ \
                J2SE_Solaris_${1}_Recommended.old.zip
           cp ${PATCHDIR}/${PRODUCTION}/5.${1}/ \
                J2SE_Solaris_${1}_Recommended.zip.md5 \
              ${PATCHDIR}/${PRODUCTION}/5.${1}/ \
                J2SE_Solaris_${1}_Recommended.old.md5
        fi
   fi    

}

########################
#                      #
#  MAIN ROUTINE        #
#                      #
########################

 
#  A new approach here to grab only patches that need to 
#  be installed. Comment out the original code and use 
#  digests as flags to set up successful installation. 

for i in "${OS[@]}"
do 
   cleanup_zip "$i"
   get_cluster "$i"
   md5 "$i"
   check_development "$i"
   check_production "$i"
done