Oracle Patch Downloads in der Linux-Kommandozeile

By | 3. Mai 2020

Das Patchen von Oracle Produkten gehört zu den regelmäßigen Aufgaben eines Administrators. Laufen die Oracle Produkte auf einem Linux Server auf dem keine Desktop-Umgebung nebst Browser zur Verfügung steht, muss man sich Gedanken machen, wie man die von Oracle auf den Support Webseiten bereitgestellten Patch-Dateien auf das Linux-System bekommt.

Eine Möglichkeit besteht darin, die Patches auf einen Rechner herunterzuladen, welcher über einen Internetzugang und Browser verfügt, um dann die Patches via SCP oder SFTP auf den Linux-Server zu kopieren. Dies ist die in der Regel die einzige Möglichkeit, wenn der Linux Server über keinerlei Verbindungsmöglichkeiten ins Internet verfügt.

Verfügt der Linux Server jedoch über einen Zugang zum Internet, entweder direkt oder über einen Web-Proxy, so kann man die Patches auch ohne Umwege auf den Linux-Server herunterladen, was effizienter ist.

In dem nachfolgenden Tipp möchte ich meine favorisierte Methode vorstellen, um sich Oracle Patches von den Oracle Support Webseiten direkt auf den Linux-Server herunterzuladen.

Oracxle Patch Download

Verwendung Download-Script

Mein bevorzugtes Verfahren verwendet ein von mir bereitgestelltes interaktives Shell-Script, welches auf der von Oracle angebotene WGET-Download-Option basiert. Im Unterschied zu dem wget.sh-Script von Oracle, beschränkt sich mein Script nicht nur auf einen spezifischen Patch, sondern kann für alle Patche, die von updates.oracle.com kommen, wiederverwendet werden. Darüberhinaus werden Status-Informationen zum Download ausgegeben.

Voraussetzungen

1. Internetzugang

Wie eingangs erwähnt, muss der Linux Server auf dem die Patche direkt heruntergelanden werden sollen, Zugang zum Internet haben. Wenn ein Web-Proxy zum Schutz des Netzwerkes genutzt wird, sollte man daran denken, die notwendigen Proxy-Informationen entweder als Umgebungsvariablen in der Shell vor dem Download oder direkt im Script download_oracle_patch.sh zu konfigurieren:

export http_proxy=//<Proxy_Server>:<port>
export https_proxy=//<Proxy_Server>:<port>
export ftp_proxy=//<Proxy_Server>:<port>

Sofern Benutzername und Passwort für den Web-Proxy notwendig sind, müssen diese ebenfalls angegeben werden.

export http_proxy=//<Username>:<Password>@<Proxy_Server>:<port>
export https_proxy=//<Username>:<Password>@<Proxy_Server>:<port>
export ftp_proxy=//<Username>:<Password>@<Proxy_Server>:<port>

Alternativ kann man auch die Proxy-Konfiguration in der Datei /etc/wgetrc vornehmen.

2. Wget Package

Der Download wird mit Hilfe des wget-Packages durchgeführt. Wget ist ein Programm, um direkt aus der Shell Dateien mittels der Internetprotokolle HTTP, HTTPS, FTP und FTPS herunterladen zu können.  Wenn das Package auf dem Linux-System nicht vorhanden ist, so kann es nachinstalliert werden (Beispiel: yum install wget).

3. My Oracle Support Account

Für den Download ist ein My Oracle Support Account, sprich, Username und Passwort notwendig. Natürlich muss man auch über einen gültigen Support-Vertrag für das zu patchende Oracle Produkt verfügen, um die Patches herunterladen zu können.

Script download_oracle_patches

Das Script, ein modifiziertes Oracle wget.sh-Script, kann für das regelmäßige Herunterladen von Oracle Patches verwendet werden.

#!/bin/sh
# download_oracle_patch.sh
# Script to download Oracle patches from updates.oracle.com (authentication required)
# Vesion 1.0

### Web-Proxy Configuration if neessary (and delete #-charaters)
#export http_proxy=//<Proxy_Server>:<port> 
#export https_proxy=//<Proxy_Server>:<port>

export LANG=C
trap 'rm -f $COOKIE_FILE; exit 1' 1 2 3 6
echo " "
printf 'Enter complete Download URL: '; read DOWNLOAD_URL
export FILENAME=`echo $DOWNLOAD_URL | rev | cut -d'=' -f 1 | rev`
printf 'Enter Oracle Account Username: '; read SSO_USERNAME
echo -n "Enter Oracle Account Password: "
while IFS= read -p "$prompt" -r -s -n 1 char
do
if [ "${char}" = $'\0' ] ; then
break
fi
if [ "${char}" = $'\177' ] ; then
prompt=$'\b \b'; SSO_PASSWORD="${SSO_PASSWORD%?}"
else
prompt='*'; SSO_PASSWORD+="$char"
fi
done
WGET=/usr/bin/wget
LOGDIR=.
LOGFILE=$LOGDIR/download-wgetlog-$(date +%m-%d-%y-%H:%M).log
COOKIE_FILE=$(mktemp -t wget_sh_XXXXXX)>> "$LOGFILE" 2>&1
if [ $? -ne 0 ] || [ -z "$COOKIE_FILE" ]
then
echo "Temporary cookie file creation failed. See $LOGFILE for more details." | tee -a "$LOGFILE"
exit 1
fi
echo "Created temporary cookie file $COOKIE_FILE">> "$LOGFILE"
OUTPUT_DIR=.
$WGET --secure-protocol=auto --save-cookies="$COOKIE_FILE" --keep-session-cookies --http-user "$SSO_USERNAME" --http-password="$SSO_PASSWORD" "https://updates.oracle.com/Orion/Services/download" -O /dev/null 2>> "$LOGFILE"
if [ $? -ne 0 ]
then
echo "Authentication failed with the given credentials." | tee -a "$LOGFILE"
echo "Please check logfile: $LOGFILE for more details." | tee -a "$LOGFILE"
else
echo -e "Authentication is successful. \nDownloading file $FILENAME" | tee -a "$LOGFILE"
$WGET --progress=bar --load-cookies="$COOKIE_FILE" "$DOWNLOAD_URL" -O "$OUTPUT_DIR/$FILENAME" | tee -a "$LOGFILE"
fi
rm -f "$COOKIE_FILE"
echo "Removed temporary cookie file $COOKIE_FILE">> "$LOGFILE"

Anleitung

1. Script auf den Linux Server kopieren

Das Script in das vorgesehene Download-Verzeichnis auf den Linux Server kopieren und ausführbar machen.

Beispiel:

/u01/patches/download_oracle_patch.sh
chmod u+x /u01/patches/download_oracle_patch.sh

2.  Sofern notwendig, Web-Proxy konfigurieren (Im Script oder in der SSH-Session)

Beispiel ohne Username und Passwort für den Web-Proxy:

export http_proxy=//myproxy-server.example.com:3128
export https_proxy=//myproxy-server.example.com:3128
export ftp_proxy=//myproxy-server.example.com:3128

3. Die URL des gewünschten Patch in die Zwichenablage kopieren

Auf den Oracle Support Webseiten (https://support.oracle.com)  den gewünschten Patch suchen und auswählen.
Den Patch aber nicht im Browser herunterladen, sondern die Link-Adresse (URl) in die Zwischenablage kopieren!

File URL

Beispiel Link-Adresse:
https://updates.oracle.com/Orion/Services/download/p30869156_190000_Linux-x86-64.zip?aru=23493838&patch_file=p30869156_190000_Linux-x86-64.zip

4. Download-Script starten

./download_oracle_patch.sh

Nach dem Start wird man nach der Link-Adresse (Download URL) und dem Benutzernamen sowie Passwort des zu verwendenen Oracle Accounts gefragt.

Beispiel:

Enter complete Download URL: https://updates.oracle.com/Orion/Services/download/p30869156_190000_Linux-x86-64.zip?aru=23493838&patch_file=p30869156_190000_Linux-x86-64.zip
Enter Oracle Account Username: max.mustermann@example.de
Enter Oracle Account Password: ***********

Beispiel-Ausgabe:

Authentication is successful.
Downloading file p30869156_190000_Linux-x86-64.zip
--2020-05-03 11:34:21--  https://updates.oracle.com/Orion/Services/download/p30869156_190000_Linux-x86-64.zip?aru=23493838&patch_file=p30869156_190000_Linux-x86-64.zip
Resolving updates.oracle.com (updates.oracle.com)... 141.146.44.51
Connecting to updates.oracle.com (updates.oracle.com)|141.146.44.51|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location:  https://aru-akam.oracle.com/adcarurepos/vol/patch05/PLATFORM/CORE/Linux-x86-64/R600000000101150/p30869156_190000_Linux-x86-64.zip?FilePath=/adcarurepos/vol/patch05/PLATFORM/CORE/Linux-x86-64/R600000000101150/p30869156_190000_Linux-x86-64.zip&File=p30869156_190000_Linux-x86-64.zip&params=L2F2S1I4ckpzUWMyUUdob3Q4NHZkdzphcnU9MjM0OTM4MzgmZW1haWw9Zi5nZXJhc2NoQGl0LXAuZGUmZmlsZV9pZD0xMDc1NjU4MjEmcGF0Y2hfZmlsZT1wMzA4NjkxNTZfMTkwMDAwX0xpbnV4LXg4Ni02NC56aXAmdXNlcmlkPW8tZi5nZXJhc2NoQGl0LXAuZGUmc2l6ZT0xMjE1NDkzNDAyJmNvbnRleHQ9QUAxMCtIQGFhcnV2bXRwMDcub3JhY2xlLmNvbStQQCZkb3dubG9hZF9pZD00MTUxNzg3MDc@&AuthParam=1588498584_1134431fd29bd845455b9e46ca0c5c0a [following]
--2020-05-03 11:34:22--  https://aru-akam.oracle.com/adcarurepos/vol/patch05/PLATFORM/CORE/Linux-x86-64/R600000000101150/p30869156_190000_Linux-x86-64.zip?FilePath=/adcarurepos/vol/patch05/PLATFORM/CORE/Linux-x86-64/R600000000101150/p30869156_190000_Linux-x86-64.zip&File=p30869156_190000_Linux-x86-64.zip&params=L2F2S1I4ckpzUWMyUUdob3Q4NHZkdzphcnU9MjM0OTM4MzgmZW1haWw9Zi5nZXJhc2NoQGl0LXAuZGUmZmlsZV9pZD0xMDc1NjU4MjEmcGF0Y2hfZmlsZT1wMzA4NjkxNTZfMTkwMDAwX0xpbnV4LXg4Ni02NC56aXAmdXNlcmlkPW8tZi5nZXJhc2NoQGl0LXAuZGUmc2l6ZT0xMjE1NDkzNDAyJmNvbnRleHQ9QUAxMCtIQGFhcnV2bXRwMDcub3JhY2xlLmNvbStQQCZkb3dubG9hZF9pZD00MTUxNzg3MDc@&AuthParam=1588498584_1134431fd29bd845455b9e46ca0c5c0a
Resolving aru-akam.oracle.com (aru-akam.oracle.com)... 23.194.204.31
Connecting to aru-akam.oracle.com (aru-akam.oracle.com)|23.194.204.31|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1215493402 (1.1G) [application/zip]
Saving to: './p30869156_190000_Linux-x86-64.zip'

100%[===========================================================================================================================================================>] 1,215,493,402 1.63MB/s   in 14m 29s

020-05-03 12:03:53 (1.33 MB/s) - './p30869156_190000_Linux-x86-64.zip' saved [1215493402/1215493402]

 

Der Download wird in einem Logfile download-wgetlog-<timestamp>.log protokolliert. Nach erfolgreichem Download kann der Patch gemäß der Patch-Readme installiert werden.