getMOSPatch.sh – Downloading Patches From My Oracle Support

Nov 11, 2013 / By Maris Elsins

Tags: , , , , , , , ,

How to download patches from My Oracle Support (MOS) directly to the server? This has bothered me since the ftp access was closed a few years ago. Of course, I’ve been given some options by Oracle, like, I could access MOS from the server using a browser (probably from a VNC desktop – thank you very much), or I could look up the patches on my workstation to download the WGET script from MOS, which I uploaded to the server, adjusted with the username and the password of my MOS account and then started the downloads. Not too convenient, is it?
Then, back in 2009 my teammate John published a blog post on Retrieving Oracle patches with wget. This eliminated the need to upload the wget script from MOS to the server and I only had to get the URLs of the patches and pass them to a shell function. While this was so much easier, I still needed to open the browser to find those URLs.
I think it’s time to get rid of browser dependency. So I’ve written a shell script getMOSPatch.sh that can be used to download patches directly to the server using only the patch number.
I’ve tested the tool on Linux, and there is a good chance it won’t work on some other platforms as it utilizes tools like awk, sed, grep, egrep and wget with options that probably only work on Linux, but if there’s much interest in this tool and I get many comments on this blog post I promise to change that :)
You can use wget to download the script to the server directly:

[oracle@mel1 Patches]$ wget --no-check-certificate -nv https://raw.github.com/MarisElsins/TOOLS/master/Shell/getMOSPatch.sh
WARNING: cannot verify raw.github.com's certificate, issued by `/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert High Assurance CA-3':
  Unable to locally verify the issuer's authority.
2013-11-10 17:42:17 URL:https://raw.github.com/MarisElsins/TOOLS/master/Shell/getMOSPatch.sh [4021/4021] -> "getMOSPatch.sh" [1]
[oracle@mel1 Patches]$ chmod u+x getMOSPatch.sh

First time you run the script (or when you run it with parameter reset=yes) it will let you choose which platforms and languages the patches need to be downloaded for and the choices will be saved in a configuration file. The available platforms and languages are fetched from MOS.

[oracle@mel1 Patches]$ ./getMOSPatch.sh reset=yes
Oracle Support Userid: elsins@pythian.com
Oracle Support Password:

Getting the Platform/Language list
Available Platforms and Languages:
527P - Acme Packet OS
293P - Apple Mac OS X (Intel) (32-bit)
522P - Apple Mac OS X (Intel) (64-bit)
...
226P - Linux x86-64
912P - Microsoft Windows (32-bit)
...
7L - Finnish (SF)
2L - French (F)
4L - German (D)
104L - Greek (EL)
107L - Hebrew (IW)
...
39L - Ukrainian (UK)
43L - Vietnamese (VN)
999L - Worldwide Spanish (ESW)
Comma-delimited list of required platform and language codes: 226P,4L
[oracle@mel1 Patches]$

After this you simply have to run the script with parameter patch=patchnr1,patchnr2,… and the listed patches will be downloaded. This is how it happens:

  • the script looks up each of the patches for each platform and language and:
    • if one patch is found – it is automatically downloaded
    • if multiple patches are found (this can happen if the same patch is available for multiple releases) – the tool will ask you to choose which patches to download.
  • you can also specify parameter download=all to download all found patches without being asked to choose ones from the list.
  • you can also specify parameter regexp to apply filters to the filenames of the looked up patches. This is especially useful for Apps DBAs as filter regexp=”.*A_R12.*” would be helpful for e-Business Suite Release 12.0 and regexp=”.*B_R12.*” – for R12.1.
  • if you set environment variables mosUser and mosPass before running the script you won’t be asked to enter the user credentials.

Take a look at the following examples:

  • downloading the latest CPU patch (patch 16902043, OCT2013) for 11gR2.
    [oracle@mel1 Patches]$ ./getMOSPatch.sh patch=16902043
    Oracle Support Userid: elsins@pythian.com
    Oracle Support Password:
    
    Getting patch 16902043 for "Linux x86-64"
    p16902043_112030_Linux-x86-64.zip completed with status: 0
    
    Getting patch 16902043 for "German (D)"
    no patch available
    
  • Downloading the latest patch for OPatch (there are multiple patches available on the same platform):
    [oracle@mel1 Patches]$ export mosUser=elsins@pythian.com
    [oracle@mel1 Patches]$ ./getMOSPatch.sh patch=6880880
    Oracle Support Password:
    
    Getting patch 6880880 for "Linux x86-64"
    1 - p6880880_112000_Linux-x86-64.zip
    2 - p6880880_111000_Linux-x86-64.zip
    3 - p6880880_121010_Linux-x86-64.zip
    4 - p6880880_131000_Generic.zip
    5 - p6880880_101000_Linux-x86-64.zip
    6 - p6880880_102000_Linux-x86-64.zip
    Comma-delimited list of files to download: 3
    p6880880_121010_Linux-x86-64.zip completed with status: 0
    
    Getting patch 6880880 for "German (D)"
    no patch available
    [oracle@mel1 Patches]$
    
  • Downloading multiple patches at the same time without prompting user to specify which files to download if multiple files are found. (don’t be confused that files with “LINUX” and not “Linux-x86-64″ in the filename are downloaded here. These are e-Business Suite patches and both 32b and 64b platforms have the same patch):
    [oracle@mel1 Patches]$ ./getMOSPatch.sh patch=10020251,10141333 download=all
    Oracle Support Userid: elsins@pythian.com
    Oracle Support Password:
    
    Getting patch 10020251 for "Linux x86-64"
    p10020251_R12.AR.B_R12_LINUX.zip completed with status: 0
    p10020251_R12.AR.A_R12_LINUX.zip completed with status: 0
    
    Getting patch 10020251 for "German (D)"
    p10020251_R12.AR.A_R12_d.zip completed with status: 0
    
    Getting patch 10141333 for "Linux x86-64"
    p10141333_R12.AR.A_R12_LINUX.zip completed with status: 0
    p10141333_R12.AR.B_R12_LINUX.zip completed with status: 0
    
    Getting patch 10141333 for "German (D)"
    p10141333_R12.AR.B_R12_d.zip completed with status: 0
    p10141333_R12.AR.A_R12_d.zip completed with status: 0
    
  • Downloading the same patches as in the previous example with an additional filter for e-Business Suite 12.1 patches only:
    [oracle@mel1 Patches]$ ./getMOSPatch.sh regexp=".*B_R12.*" patch=10020251,10141333 download=all
    Oracle Support Userid: elsins@pythian.com
    Oracle Support Password:
    
    Getting patch 10020251 for "Linux x86-64"
    p10020251_R12.AR.B_R12_LINUX.zip completed with status: 0
    
    Getting patch 10020251 for "German (D)"
    no patch available
    
    Getting patch 10141333 for "Linux x86-64"
    p10141333_R12.AR.B_R12_LINUX.zip completed with status: 0
    
    Getting patch 10141333 for "German (D)"
    p10141333_R12.AR.B_R12_d.zip completed with status: 0
    

29 Responses to “getMOSPatch.sh – Downloading Patches From My Oracle Support”

  • Andre Araujo says:

    Great piece of work, Maris!!!

  • Thanks for the great work my friend Maris! We whole community is getting better and more efficient because of ideas and solutions like yours :)

    Thanks A TON :)

    Yury

  • Truely awesome. Yet to test it out but looks promising stuff!!

  • James Senior says:

    Great script and very creative.

  • Great Work Thanks For Sharing

  • dinh says:

    Features request to download checksum file and/or perform checksum.

    Thanks Michael.

  • Looks cool Maris – I’m going to try this out when I have a chance!

  • Maris Elsins says:

    Thanks all!
    Just a reminder, if you find any issues, let me know and I’ll try to fix them!

  • Hey Maris,

    The tool works great! Just used it to download 11.2.0.4 database patchset.

    $ ./getMOSPatch.sh patch=13390677
    Oracle Support Userid:
    Oracle Support Password:

    Getting patch 13390677 for “Linux x86-64″
    1 – p13390677_112040_Linux-x86-64_1of7.zip
    2 – p13390677_112040_Linux-x86-64_2of7.zip
    3 – p13390677_112040_Linux-x86-64_3of7.zip
    4 – p13390677_112040_Linux-x86-64_4of7.zip
    5 – p13390677_112040_Linux-x86-64_5of7.zip
    6 – p13390677_112040_Linux-x86-64_6of7.zip
    7 – p13390677_112040_Linux-x86-64_7of7.zip
    Comma-delimited list of files to download: 1,2
    Downloading file p13390677_112040_Linux-x86-64_1of7.zip …
    p13390677_112040_Linux-x86-64_1of7.zip completed with status: 0
    Downloading file p13390677_112040_Linux-x86-64_2of7.zip …
    p13390677_112040_Linux-x86-64_2of7.zip completed with status: 0

    No issues so far.

    Regards,
    Andrejs.

  • Sumeet Goyal says:

    I am observing below error while running you script
    WARNING: cannot verify login.oracle.com’s certificate, issued by `/C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=Terms of use at https://www.verisign.com/rpa (c)10/CN=VeriSign Class 3 International Server CA – G3′:
    Unable to locally verify the issuer’s authority.
    Authorization failed.

    Is there any change in the downloading process of the patches in oracle

  • Sumeet Goyal says:

    Yes it is working now . I have doubt that the script does not ask where the requested patch is R12.1 or R12.0

    • Maris Elsins says:

      If the same patch exists for R12.1 and R12.0 it will list both patches and you’ll be able to choose witch one to download. Alternatively you can use parameters: regexp=”.*B_R12.*” for R12.1 patches and regexp=”.*A_R12.*” for R12.0.

      • John Piwowar says:

        One thing I’ve noticed in this case is that if a patch is superseded or obsolete, it will be skipped. This is usually a good thing, but it can cause some confusion when downloading patches for R12. Example: 1) A My Oracle Support note instructs you to download 12345678 for 12.1.
        2) Patch 12345678 exists for codelines A and B
        3) Patch 12345678 is superseded by patch 12349999 in codeline B

        Result: getMOSPatch.sh will download 12345678.A, but not 12345678.B

        Lesson: Review your download results AND the Oracle patch docs carefully. But we all do that already, right? :)

  • bharath. Panuganti says:

    Can it be used for downloading media from e-delivery? Say for ex : 12.2 media pack

  • Joel says:

    I tried running this script, getMOSPatch.sh reset=yes, and after entering my MOS username and pwd, the message returned is “Unable to establish SSL connection.” wget version is 1.12. I can connect OK via my browser to MOS.

    Any suggestions?

    Thanks

    • Maris Elsins says:

      Hi Joel,

      I’ve seen this happening time to time, but every times I checked that there was something wrong with the authentication process on MOS side. It’s a different authentication process if you log on using the browser, so that might work while the other one doesn’t.
      Could you check it later again? And let me know if it started working please.

      P.S. If you have a really complex password with different special characters – it might confuse wget. I’d appreciate if you could figure out which special character is causing trouble (or let me know which ones you’re using in the password) so I can test it and apply a “special treatment” for it in the script.

      Maris

      • Joel says:

        Thanks. The password is number and letters only, no special characters. However, I think the problem must be on the Oracle side. I downloaded one of the MOS-supplied wget scripts and I’m getting the same (failed) result.

  • Joel says:

    New info: I grabbed a copy of wget 1.15 and everything is working. Thanks again…this script rocks!

  • Sammy Lorza says:

    Nice script!! If you add –secure-protocol=TLSv1 in every wget instruction on the script it will work with any version of wget. I tried it and it works like a charm.

  • Cameron Hodge says:

    Love your work. Linux 6.5 with wget 1.12. Just added into each wget command –secure-protocol=TLSv1

  • Cameron Hodge says:

    Migration to R12.2.3 coming soon. 15+ languages. I think this will save a few hours. I you a beer if we ever meet

  • Handojo says:

    Hi Maris.

    Nice Script that you have.
    I tried that on Centos 6.4
    First I run with reset=yes
    Next
    Put the Platform and Language already
    But it seems I can’t get patch # 18741545, 18555488, 18741369

    Did I miss something ?

    • Maris Elsins says:

      Hi,

      same thing here:
      Maris:99_TMP melsins$ ./getMOSPatch.sh reset=yes
      Oracle Support Userid: elsins@pythian.com
      Oracle Support Password:

      Getting the Platform/Language list
      Available Platforms and Languages:
      ...
      226P - Linux x86-64
      ...
      Comma-delimited list of required platform and language codes: 226P
      Maris:99_TMP melsins$ ./getMOSPatch.sh patch=18741545,18555488,18741369
      Oracle Support Userid: elsins@pythian.com
      Oracle Support Password:

      Getting patch 18741545 for "Linux x86-64"
      no patch available

      Getting patch 18555488 for "Linux x86-64"
      no patch available

      Getting patch 18741369 for "Linux x86-64"
      no patch available

      And when I check the patches directly from the simple patch search in MOS I see the message “You do not have the required access privilege to download this patch.” That’s also why downloading doesn’t work.
      I’ll take a look if I can update the script to display the error messages too.

      Thanks for the feedback,
      Maris

Leave a Reply

  • (will not be published)

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>