Wednesday, February 23, 2011

WGET shell Script for downloading patches

What I have to offer this time is a script using which you can download patches using WGET from Meta.....oops, from My Oracle Support, I should say!


This script needs (or accepts) the following parameters:


1. Me...oops...MOS Username
2. MOS (I got it right this time!) password
3. Patch file name
4. ARU Number

You can get 3 and 4 in the following way:


Using MOS:

Query for the particular patch, click on the download link, click on WGET Options on the left side bottom corner and then copy the WGET script to clipboard. That script will have both the patch name and the ARU number.


Using HTML (supporthtml.oracle.com):

Query for the particular patch, click on the patch, then RIGHT CLICK on the patch zip file link and click on copy shortcut in IE (or copy link location in Mozilla Firefox). This link will have both the patch file name and the ARU number.

Using the classic patches window:

Query for the particular patch, then RIGHT CLICK on the DOWNLOAD button and click on copy shortcut in IE (or copy link location in Mozilla Firefox). This link will have both the patch file name and the ARU number.


I do understand that this is a roundabout process but I believe it is better than downloading the file to your desktop and then uploading to the server.

I am also working on a script to retrieve the aru number and the patch file name given the patch number. But I have had no success so far. If anyone has that script or any better script to download patches, please do not hesitate to share it.

WGET SCRIPT:

#!/bin/sh



# Start of user configurable variables

#



# SSO username and password

printf "\n\nEnter the SSO USERNAME for Metalink:\t"

read SSO_USERNAME

printf "\n\n\n\nEnter the SSO PASSWORD for Metalink:\t"

##SSO_PASSWORD="password"

stty -echo

read SSO_PASSWORD

stty echo



# E-Delivery token

EPD_TOKEN=







# Path to wget command

WGET=/usr/bin/wget



# Location of cookie file

COOKIE_FILE=/tmp/$$.cookies



# Log directory and file

LOGDIR=.

LOGFILE=$LOGDIR/wgetlog-`date +%d-%b-%y-%H-%M`.log



# Output directory and file

OUTPUT_DIR=.



## Added by Praveen B K, for customising the script.

printf "\n\nEnter the PATCH FILE NAME:\t"

read PATCH_FILE_NAME



printf "\n\nEnter the aru number:\t"

read ARU



#

# End of user configurable variable

#



if [ "$SSO_USERNAME " = " " ]

then

printf "\n\nSSO USERNAME cannot be null. Exiting............\n\n\n"

exit 1

fi



if [ "$SSO_PASSWORD " = " " ]

then

printf "\n\nSSO PASSWORD cannot be null. Exiting............\n\n\n"

exit 1

fi



if [ "$PATCH_FILE_NAME " = " " ]

then

printf "\n\nPATCH FILE NAME cannot be blank. Exiting............\n\n\n"

exit 1

fi



if [ "$ARU " = " " ]

then

printf "\n\naru number cannot be blank. Exiting............\n\n\n"

exit 1

fi



# Contact updates site so that we can get SSO Params for logging in

SSO_RESPONSE=$($WGET https://updates.oracle.com/Orion/Services/download 2>&1grep Location)



# Extract request parameters for SSO

SSO_TOKEN=`echo $SSO_RESPONSE cut -d '=' -f 2cut -d ' ' -f 1`

SSO_SERVER=`echo $SSO_RESPONSE cut -d ' ' -f 2cut -d 'p' -f 1,2`

SSO_AUTH_URL=sso/auth

AUTH_DATA="ssousername=$SSO_USERNAME&password=$SSO_PASSWORD&site2pstoretoken=$SSO_TOKEN"



# The following command to authenticate uses HTTPS. This will work only if the wget in the environment

# where this script will be executed was compiled with OpenSSL. Remove the --secure-protocol option

# if wget was not compiled with OpenSSL

# Depending on the preference, the other options are --secure-protocol= autoSSLv2SSLv3TLSv1

$WGET --secure-protocol=auto --post-data $AUTH_DATA --save-cookies=$COOKIE_FILE --keep-session-cookies $SSO_SERVER$SSO_AUTH_URL -O sso.out >> $LOGFILE 2>&1



rm -f sso.out



$WGET --load-cookies=$COOKIE_FILE --save-cookies=$COOKIE_FILE --keep-session-cookies "https://updates.oracle.com/Orion/Services/download/${PATCH_FILE_NAME}?aru=${ARU}&patch_file=${PATCH_FILE_NAME}" -O $OUTPUT_DIR/${PATCH_FILE_NAME} >> $LOGFILE 2>&1





# Cleanup

rm -f $COOKIE_FILE



No comments: