#!/bin/bash # # SCRIPT: get_edelivery.sh # # DESCRIPTION: Script used to download all files from an Oracle E-Delivery page. # ##################################################################################### BASE_URL="http://edelivery.oracle.com" SCRIPT=`basename $0` # Check for mandatory parameters. if [ $# -ne 2 ]; then echo "Usage: ${SCRIPT} EGROUP_ARU_NUMBER cookies.txt" exit $1 fi # Set variables. EGROUP_ARU_NUMBER=${1} COOKIES=${2} # Ensure cookies file exists. if [ ! -r ${COOKIES} ]; then echo "ERROR: Could not read cookies file." exit 1 fi # Ensure the checksum executable is available. CKSUMEXE=`which sha1sum` if [ ! -x ${CKSUMEXE} ]; then echo "ERROR: Cannot locate the sha1sum executable." exit 1 fi # Download the main patch page. PATCH_HTML=patches_${EGROUP_ARU_NUMBER}.html echo "Downloading Patch Page: ${PATCH_HTML}" wget --load-cookies ${COOKIES} "${BASE_URL}/EPD/Download/get_form?egroup_aru_number=${EGROUP_ARU_NUMBER}" -O ${PATCH_HTML} # Download the file Digests. PATCH_CSV=patches_${EGROUP_ARU_NUMBER}.csv echo "Downloading Patch CSV: ${PATCH_CSV}" EPACK_PART_NUMBER=`grep "View Digest" ${PATCH_HTML} | awk -F= '{print $5}' | awk -F\- '{print $1}'` wget --load-cookies ${COOKIES} "${BASE_URL}/EPD/ViewDigest/get_form?epack_part_number=${EPACK_PART_NUMBER}&export_to_csv=1" -O ${PATCH_CSV} # Generate file list. PATCH_URL=patches_${EGROUP_ARU_NUMBER}.url echo "Generating Patch URLs: ${PATCH_URL}" grep "Download" ${PATCH_HTML} | grep ${EGROUP_ARU_NUMBER} | grep -v "Readme" | awk -F\" '{print $16}' > ${PATCH_URL} # Download the files. while read line; do FILE_NAME=`echo $line | awk -F\/ '{print $5}' | awk -F\? '{print $1}'` if [ ! -f "${FILE_NAME}" ]; then echo "Downloading File: ${FILE_NAME}" wget --load-cookies ${COOKIES} "${BASE_URL}/${line}" -O ${FILE_NAME} else echo "Skipping File: ${FILE_NAME}" fi done < ${PATCH_URL} # Check file checksums. while read line; do FILE_NAME=`echo $line | awk -F\, '{print $1}' | sed -e 's/\"//g'` MD5=`echo $line | awk -F\, '{print $3}' | awk -F\, '{print $1}' | sed -e 's/\"//g'` SHA=`echo $line | awk -F\, '{print $4}' | awk -F\, '{print $1}' | sed -e 's/\"//g' | tr [a-z] [A-Z]` if [ "${FILE_NAME}" != "File Name" ]; then if [ -f ${FILE_NAME} ]; then CKSUM=`${CKSUMEXE} ${FILE_NAME} | awk '{print $1}' | tr [a-z] [A-Z]` echo "File: ${FILE_NAME} File Checksum: ${CKSUM} Oracle Checksum: ${SHA}" if [ "${CKSUM}" != ${SHA} ]; then echo "ERROR: File checksum does not match! ${FILE_NAME}" fi else echo "ERROR: File does not exist: ${FILE_NAME}" fi fi done < ${PATCH_CSV}