YUM on Exadata – Repositories

When you work on Exadata compute (i.e. database) node – you are actually on Oracle Linux. Is this pure Oracle Linux or is it “special” version of it – like on Exadata Storage Servers? Well, this is indeed Oracle Linux (OL6 if you have Exadata firmware between 12.x or 18.x or OL7 if you are on 19.x) – but you get it already preinstalled by Oracle (in the factory or during re-imaging process). You can even reinstall it yourself following this or that process – but you will always need to use specific install image (ISO, PXE/NFS) for your Exadata software version. You can get these images (patches) from MOS looking into this Doc ID 888828.1. But you will never use generic installation ISO from http://edelivery.oracle.com/linux, like you would do on generic hardware.cloud not showWhen you work on Exadata compute (i.e. database) node – you are actually on Oracle Linux. Is this pure Oracle Linux or is it “special” version of it – like on Exadata Storage Servers? Well, this is indeed Oracle Linux (OL6 if you have Exadata firmware between 12.x or 18.x or OL7 if you are on 19.x) – but you get it already preinstalled by Oracle (in the factory or during re-imaging process). You can even reinstall it yourself following this or that process – but you will always need to use specific install image (ISO, PXE/NFS) for your Exadata software version. You can get these images (patches) from MOS looking into this Doc ID 888828.1. But you will never use generic installation ISO from http://edelivery.oracle.com/linux, like you would do on generic hardware.

Let’s check this out using Exadata 12.1 as an example:

[root@exa01vm03 ~]# imageinfo -ver -kver
Kernel version: 2.6.39-400.284.1.el6uek.x86_64 #1 SMP Mon Sep 12 19:26:25 PDT 2016 x86_64
Image version: 12.1.2.3.3.161013

Here we are using Exadata firmware 12.1 and if we look over Doc ID 888828.1 we will find reference to Doc ID 2181366.1 containing links to PXE image for our database server – which is necessary only is we ever needed to re-image our compute node and links to ISO files containing base ULN repositories appropriate for this particular firmware version.

However on our database node there are no YUM repositories configured (and this is exactly how you get it from Oracle factory):

[root@exa01vm03 ~]# yum repolist
repolist: 0

Let’s connect to base ULN repository from the Doc ID 2181366.1 or from https://linux.oracle.com directly (In my case I do have such repo already mirrored on separate Oracle Linux machine called yum-mirror:

[root@exa01vm03 ~]# cat >/etc/yum.repos.d/exadata.repo <<EOF
[exadata_ol6_base_repo_12.1.2.3.3]
name=Exadata release 12.1.2.3.3 db server installation packages (x86_64)
baseurl=http://yum-mirror/EngineeredSystems/exadata/dbserver/12.1.2.3.3/base/x86_64
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
gpgcheck=1
enabled=1
EOF

Let’s check what can be installed from this repo:

[root@exa01vm03 ~]# yum list available
Available Packages
Lib_Utils.noarch                          1.00-09                 exadata_ol6_base_repo_12.1.2.3.3
MegaCli.noarch                            8.07.07-1               exadata_ol6_base_repo_12.1.2.3.3
MegaOEM.noarch                            setSubOEMID-1           exadata_ol6_base_repo_12.1.2.3.3
flash_dom.x86_64                          1.2.12-1                exadata_ol6_base_repo_12.1.2.3.3
infiniband-diags.x86_64                   1.5.13.MLNX_20120708-4.mlnx1.5.5r2.el6
                                                                  exadata_ol6_base_repo_12.1.2.3.3
ipmiflash.x86_64                          1.8.12.4-0.el6          exadata_ol6_base_repo_12.1.2.3.3
lsidiag.x86_64                            113.00.01.00-0.el6      exadata_ol6_base_repo_12.1.2.3.3
mrdiag.x86_64                             3.0.4-0                 exadata_ol6_base_repo_12.1.2.3.3
mstflint.x86_64                           1.4-9.mlnx1.5.5r2.el6   exadata_ol6_base_repo_12.1.2.3.3
oracle-hmp-tools-biosconfig.x86_64        2.3.3.0-1.el6           exadata_ol6_base_repo_12.1.2.3.3
oracle-hmp-tools-ubiosconfig.x86_64       2.3.3.0-1.el6           exadata_ol6_base_repo_12.1.2.3.3
sas_snmp.x86_64                           14.02-0103              exadata_ol6_base_repo_12.1.2.3.3
storcli.noarch                            1.19.08-1               exadata_ol6_base_repo_12.1.2.3.3

And that is all – there are only 13 packages in the repository that are not installed on my node. There would be even less of them (or none?) if I was not using virtualized compute node.

So, how can I install additional software on my Exadata compute node?

First of all you need to ask yourself if you really have to. Exadata is specialized system dedicated to run Oracle databases – and everything for this sole purpose is already installed. However additional software is often really needed: screen, wget, xauth, cifs-utils, nfs4-acl-tools – are examples of the tools often necessary to maintain Exadata (one might be surprised but even simple screen tool is not included in base Exadata ULN repository)

Oracle allows installation of customer software with some restrictions. You can find them in documentation and also in some support documents:

Installing and updating non-Exadata branded rpms on Exadata database servers are allowed as long as kernel and InfiniBand-specific packages remain untouched.
Note that customizing the operating system by adding or updating packages may introduce problems when applying an Exadata software update because the additional software may add new dependencies which will not be provided by the Exadata update. For this reason it is recommended to stay close to the Exadata image and customize as little as possible.

Exadata documentation

You may load additional software on the database servers. However, to ensure best performance, Oracle discourages adding software except for agents, such as backup agents and security monitoring agents, on the database servers.

Exadata documentation

Items to consider before installing additional RPMS:
1) Customer installed software must not update any Exadata provided packages.
2) Customer is fully responsible for the additional software.
3) Future Exadata Software updates may remove customer installed packages or the upgrades may fail due to customer installed packages.
4) If a customer installed package is needed to be removed as part of an Exadata Software update, the customer is responsible for removal of the package and re-installing, if needed after the upgrade..

Doc ID 1541428.1

NOTE: While this document covers configuring access to the Oracle Public YUM Repository, DO NOT USE  yum update with this repository to update an Exadata system. This can lead to severe problems with the system’s operation. 

Doc ID 2160289.1

Sounds dangerous, doesn’t it? And in reality customer seems to be a bit lost after reading such recommendations. They usually follow last MOS note and connect the system to Oracle Linux 6/7 Latest public repository.

Let’s find out what happen in our case when our node was not upgraded for some time and is based on OL 6.8 (/etc/oracle-release -> Oracle Linux Server release 6.8), while OL 6.10 is already available and Latest repository contains packages up to this version.

[root@exa01vm03 ~]# cat >>/etc/yum.repos.d/exadata.repo <<EOF
[public_ol6_latest]
name=Oracle Linux $releasever Latest (\$basearch)
baseurl=http://public-yum.oracle.com/repo/OracleLinux/OL6/latest/\$basearch/
gpgkey=http://public-yum.oracle.com/RPM-GPG-KEY-oracle-ol6
gpgcheck=1
enabled=1
EOF

Now I can install screen easily:

[root@exa01vm03 ~]# yum list available screen
Available Packages
screen.x86_64                   4.0.3-19.el6                   public_ol6_latest
[root@exa01vm03 ~]# yum install screen
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package screen.x86_64 0:4.0.3-19.el6 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package       Arch          Version             Repository                Size
================================================================================
Installing:
 screen        x86_64        4.0.3-19.el6        public_ol6_latest        494 k

Transaction Summary
================================================================================
Install       1 Package(s)

Total download size: 494 k
Installed size: 795 k
Is this ok [y/N]: 

I’m not going to confirm that – as I want to get you attention into potential problems you might have when using Latest repository. Case with package screen is very simple because it does not have any dependencies. How about installing something more sophisticated like IPA client:

[root@exa01vm03 ~]# yum install ipa-client
Setting up Install Process
Resolving Dependencies
...
Error: Package: exadata-sun-vm-computenode-exact-12.1.2.3.3.161208-1.noarch (exadata_ol6_base_repo_12.1.2.3.3)
           Requires: krb5-libs = 1.10.3-57.el6
           Removing: krb5-libs-1.10.3-57.el6.x86_64 (installed)
               krb5-libs = 1.10.3-57.el6
           Updated By: krb5-libs-1.10.3-65.el6.x86_64 (public_ol6_latest)
               krb5-libs = 1.10.3-65.el6
...

Installation fails on dependencies. There are actually dozens of errors like above and most of them are related to exadata-sun-vm-computenode-exact package (vm appears on virtual db node, on physical node it would be exadata-sun-computenode-exact). This package does not contain any files, its purpose is to protect some original packages installed on Exadata db node from being upgraded to newer version. In the documentation these protected packages are called Oracle Exadata branded packages and after initial installation majority of installed packages are falling into this category.

BTW: there is another package of this kind: exadata-sun-(vm-)computenode-minimum which defines similar dependencies but with “>=” relation – effectively allowing you upgrade (but not delete or downgrade) branded packages to newer versions.

You can find what is protected in this way by running:

[root@exa01vm03 ~]# yum deplist exadata-sun-vm-computenode-exact

The same mechanism protects from accidentally updating all packages using yum update. Attempt to do this – will end with same kind of dependency errors like in my yum install example.

However Oracle allows you to remove this package when you – for some reasons – need to update them anyway (ad-hoc security fixes are one of examples). Lets find out what happens if I do this and attempt to install IPA-client again:

[root@exa01vm03 ~]# yum remove exadata-sun-vm-computenode-exact
Setting up Remove Process
Resolving Dependencies
--> Running transaction check
---> Package exadata-sun-vm-computenode-exact.noarch 0:12.1.2.3.3.161013-1 will be erased
--> Finished Dependency Resolution

Dependencies Resolved

==============================================================================================
 Package                              Arch       Version                  Repository     Size
==============================================================================================
Removing:
 exadata-sun-vm-computenode-exact     noarch     12.1.2.3.3.161013-1      installed     0.0  

Transaction Summary
==============================================================================================
Remove        1 Package(s)
20
Installed size: 0  
Is this ok [y/N]: y
Downloading Packages:
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Erasing    : exadata-sun-vm-computenode-exact-12.1.2.3.3.161013-1.noarch                1/1 
  Verifying  : exadata-sun-vm-computenode-exact-12.1.2.3.3.161013-1.noarch                1/1 

Removed:
  exadata-sun-vm-computenode-exact.noarch 0:12.1.2.3.3.161013-1                               

Complete!
[root@exa01vm03 ~]# yum install ipa-client
Setting up Install Process
Resolving Dependencies
...
Dependencies Resolved

==============================================================================================
 Package                Arch       Version                        Repository             Size
==============================================================================================
Installing:
 ipa-client             x86_64     3.0.0-51.0.1.el6               public_ol6_latest     152 k
Installing for dependencies:
...
Updating for dependencies:
 dbus-libs              x86_64     1:1.2.24-9.0.1.el6             public_ol6_latest     126 k
 krb5-libs              x86_64     1.10.3-65.el6                  public_ol6_latest     674 k

Transaction Summary
==============================================================================================
Install      57 Package(s)
Upgrade       2 Package(s)

Total download size: 17 M
Is this ok [y/N]: 

Now, I can install newest version of ipa-client on my exadata db node – but notice that dbus-libs and krb5-libs packages will also be updated. And these are part of Exadata branded packages – which means that during next Exadata firmware upgrade – patchmgr will complain about this and probably refuse to carry on until you resolve the problem. More on that in Part 2.

Also, if I attempt to update all packages using yum update command – which as you have read is not supported by Oracle – there is great chance that without exadata-sun-vm-computenode-exact this will succeed.

Of course I will need to confirm this answering final question (y|N) before actual upgrade – but we sometimes do this automatically.

Is there alternative solution?

Personally I prefer using public YUM repository for specific release update for my Exadata firmware version. As I said my compute node is based on OL 6.8. So let’s connect to base repository for Oracle Linux 6 Update 8:

[root@exa01vm03 ~]# cat /etc/oracle-release 
Oracle Linux Server release 6.8

[root@exa01vm03 ~]# cat >>/etc/yum.repos.d/exadata.repo <<EOF
[ol6_u10_x86_64_base]
name=Oracle Linux 6 Update 8 installation media copy (x86_64)
baseurl=http://yum.oracle.com/repo/OracleLinux/OL6/8/base/x86_64
gpgkey=http://public-yum.oracle.com/RPM-GPG-KEY-oracle-ol6
gpgcheck=1
enabled=1
EOF

Now let’s disable [public_ol6_latest] i.e. Latest repository in exadata.repo file by changing “enabled=1” to “enabled=0” and reinstall package exadata-sun-vm-computenode-exact-12.1.2.3.3.161013-1.noarch to reinstate protection dependencies. Then let’s install package ipa-client again:

[root@exa01vm03 ~]# rpm -q exadata-sun-vm-computenode-exact
exadata-sun-vm-computenode-exact-12.1.2.3.3.161013-1.noarch
[root@exa01vm03 ~]# yum repolist
repo id                            repo name                                                             status
exadata_ol6_base_repo_12.1.2.3.3   Exadata release 12.1.2.3.3 db server installation packages (x86_64)           446
ol6_u8_x86_64_base                 Oracle Linux 6 Update 8 installation media copy (x86_64)              6,765+2,197
repolist: 7,211

root@exa01vm03 ~]# yum install ipa-client
Setting up Install Process
Resolving Dependencies
...
Dependencies Resolved

===========================================================================================================
 Package                    Arch           Version                        Repository                  Size
===========================================================================================================
Installing:
 ipa-client                 x86_64         3.0.0-50.el6.1                 ol6_u8_x86_64_base         150 k
Installing for dependencies:
...
Transaction Summary
===========================================================================================================
Install      55 Package(s)

Total download size: 16 M
Installed size: 52 M
Is this ok [y/N]: 

Of course installed package is not in the newer version – but this is what I wanted to achieve: install additional tool staying as close to my Exadata firmware version as possible.

Leave a Reply

Your email address will not be published. Required fields are marked *

The following GDPR rules must be read and accepted:
This form collects your name and email so that I can keep track of the comments placed on the website. I do not share this data with any organisation or person. Your IP address is not collected and will not be displayed with your comment.