For quite some time now Oracle has documented the use of the so-called preinstall RPMs to prepare Oracle Linux for the installation of the Oracle database software. I think that’s a great idea if the settings applied by the RPM fit your environment. If I find the time, I’ll write a blog post about what it does specifically in a little while. It definitely fits my lab environment, and I regularly kickstart my OL 7 VMs specifying the preinstall RPM in the %packages section.
When upgrading the current base image from Oracle Linux 7.2 to Oracle 7.4/Oracle 12.2 I noticed a few changes to the preinstall RPMs.
| IMPORTANT NOTE | If you find this post via an Internet search engine please bear in mind that Oracle could have changed the preinstall RPM since this article was posted in September 2017. Make sure you check with the most current version to see the problem I ran into still exists |
Different name
The first surprise came when I changed the virt-install command to reference the Oracle Linux 7.4 ISO instead of 7.2. During the installation session a warning appeared stating that there wasn’t a package named oracle-rdbms-server-12cR1-preinstall anywhere to be found. Really? OK … that was a bit strange. I went straight off to check the public-yum repository for Oracle Linux 7.4 and indeed, there wasn’t the RPM I was looking for. All I could find was a package named oracle-database-server-12cR2-preinstall. All right then, I’ll use that instead. A change to the kickstart file was all that needed to be done, and subsequent installations completed ok.
Except for this other problem …
No more dependencies on the C compiler suite
The other night I wanted to apply a patch to the 12.2 lab cluster using opatchauto. The patching process ran into an error on node 2, and then failed completely trying to roll the patch back. Usually that’s a sad story (and the reason why you create backups before patching) but this time I was lucky and didn’t have to restore. Well, lucky in a way.
Going through the opatch log files (the error reported had something to do with a failure to relink a target in ins_rdbms.mk) I noticed that Oracle complained about not finding gcc. That struck me as odd, and I thought I’d actually seen gcc installed on my 7.2 base image with the 12.1 preinstall RPM.
A quick check reveals that the 12.1 preinstall RPM (taken from the Oracle Linux 7.2 base repository that I used previously) actually defines a dependency on gcc:
[oracle@server1 ~]$ rpm -qpi --requires /tmp/oracle-rdbms-server-12cR1-preinstall-1.0-4.el7.x86_64.rpm
Name : oracle-rdbms-server-12cR1-preinstall
Version : 1.0
Release : 4.el7
Architecture: x86_64
Install Date: (not installed)
Group : Test Environment/Libraries
Size : 44346
License : GPLv2
Signature : RSA/SHA256, Wed 14 Oct 2015 02:18:22 AM EDT, Key ID 72f97b74ec551f03
Source RPM : oracle-rdbms-server-12cR1-preinstall-1.0-4.el7.src.rpm
Build Date : Wed 14 Oct 2015 02:18:19 AM EDT
Build Host : x86-ol7-builder-01.us.oracle.com
Relocations : (not relocatable)
Vendor : Oracle
Summary : Sets the system for Oracle Database single instance
and Real Application Cluster install for Oracle Linux 7
Description :
The Oracle Preinstallation RPM package installs software packages and
sets system parameters required for Oracle Database single instance and
Oracle Real Application Clusters installations for Oracle Linux Release 7
Files affected: /etc/sysctl.conf, /boot/grub/menu.lst OR /boot/grub2/grub.cfg
Files added: /etc/security/limits.d/oracle-rdbms-server-12cR1-preinstall.conf
/bin/bash
/bin/sh
/bin/sh
/bin/sh
/bin/sh
/etc/redhat-release
bind-utils
binutils
compat-libcap1
compat-libstdc++-33
config(oracle-rdbms-server-12cR1-preinstall) = 1.0-4.el7
ethtool
gcc
gcc-c++
glibc
glibc-devel
initscripts
kernel-uek
ksh
libaio
libaio-devel
libgcc
libstdc++
libstdc++-devel
make
module-init-tools
nfs-utils
openssh-clients
pam
procps
psmisc
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
smartmontools
sysstat
util-linux-ng
xorg-x11-utils
xorg-x11-xauth
rpmlib(PayloadIsXz) <= 5.2-1
As you can see, gcc (and even gcc-c++) feature quite prominently in the list of requirements.
The change must have come with Oracle Linux 7.3, but I haven’t noticed it until now. I checked the Oracle Linux 7.4 base repository on public-yum.oracle.com and noticed the following:
- The 11g Release 2 preinstall RPM is gone (it was still available in the OL 7.3 repository)
- The 12c Release 1 preinstall RPM is gone, too (it had already disappeared in OL 7.3 but I hadn’t noticed)
- There is a new RPM for 12.2 named oracle-database-server-12cR2-preinstall
Interestingly enough all 3 preinstall RPMs (11.2/12.1/12.2) exist in the “latest” channel for OL7.
Looking at the new oracle-database-server-12cR2-preinstall.x86_64 RPM I noticed that gcc wasn’t referenced anymore:
[oracle@server1 ~]$ rpm -qi --requires oracle-database-server-12cR2-preinstall
Name : oracle-database-server-12cR2-preinstall
Version : 1.0
Release : 3.el7
Architecture: x86_64
Install Date: Thu 31 Aug 2017 04:38:58 AM EDT
Group : Test Environment/Libraries
Size : 56561
License : GPLv2
Signature : RSA/SHA256, Mon 10 Jul 2017 06:27:07 AM EDT, Key ID 72f97b74ec551f03
Source RPM : oracle-database-server-12cR2-preinstall-1.0-3.el7.src.rpm
Build Date : Mon 10 Jul 2017 06:26:59 AM EDT
Build Host : x86-ol7-builder-02.us.oracle.com
Relocations : (not relocatable)
Vendor : Oracle
Summary : Sets the system for Oracle Database single instance and
Real Application Cluster install for Oracle Linux 7
Description :
The Oracle Preinstallation RPM package installs software packages and
sets system parameters required for Oracle Database single instance and
Oracle Real Application Clusters installations for Oracle Linux Release 7
Files affected: /etc/sysctl.conf, /boot/grub/menu.lst OR /boot/grub2/grub.cfg
Files added: /etc/security/limits.d/oracle-database-server-12cR2-preinstall.conf
/bin/bash
/bin/sh
/bin/sh
/bin/sh
/bin/sh
/etc/redhat-release
bind-utils
binutils
compat-libcap1
compat-libstdc++-33
config(oracle-database-server-12cR2-preinstall) = 1.0-3.el7
ethtool
glibc
glibc-devel
initscripts
kernel-uek
ksh
libaio
libaio-devel
libgcc
libstdc++
libstdc++-devel
make
module-init-tools
net-tools
nfs-utils
openssh-clients
oraclelinux-release
pam
procps
psmisc
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
smartmontools
sysstat
unzip
util-linux-ng
xorg-x11-utils
xorg-x11-xauth
rpmlib(PayloadIsXz) <= 5.2-1
Interesting! I thought I’d post this just to let you know.
When planning on installing Enterprise Manager agents you might also notice the absence of gcc: the agent deployment prerequisite check for OEM 13.2 complained for this exact reason.
Full comparison between 12.1 and 12.2
I ran a quick diff to compare the dependencies between oracle-database-server-12cR2-preinstall-1.0-3.el7.x86_64 and oracle-rdbms-server-12cR1-preinstall-1.0-4.el7.x86_64.rpm. Here is the result:
[oracle@server1 ~]$ rpm -q --requires oracle-database-server-12cR2-preinstall > /tmp/12cR2-preinstall.txt
[oracle@server1 ~]$ rpm -qp --requires oracle-rdbms-server-12cR1-preinstall-1.0-4.el7.x86_64.rpm > /tmp/12cR1-preinstall.txt
[oracle@server1 ~]$ diff --width 100 -y /tmp/12cR1-preinstall.txt /tmp/12cR2-preinstall.txt
/bin/bash /bin/bash
/bin/sh /bin/sh
/bin/sh /bin/sh
/bin/sh /bin/sh
/bin/sh /bin/sh
/etc/redhat-release /etc/redhat-release
bind-utils bind-utils
binutils binutils
compat-libcap1 compat-libcap1
compat-libstdc++-33 compat-libstdc++-33
config(oracle-rdbms-server-12cR1-preinstall) | config(oracle-database-server-12cR2-preinstal
ethtool ethtool
gcc <
gcc-c++ <
glibc glibc
glibc-devel glibc-devel
initscripts initscripts
kernel-uek kernel-uek
ksh ksh
libaio libaio
libaio-devel libaio-devel
libgcc libgcc
libstdc++ libstdc++
libstdc++-devel libstdc++-devel
make make
module-init-tools module-init-tools
> net-tools
nfs-utils nfs-utils
openssh-clients openssh-clients
> oraclelinux-release
pam pam
procps procps
psmisc psmisc
rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests) <= 4.6.0-1 rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
smartmontools smartmontools
sysstat sysstat
> unzip
util-linux-ng util-linux-ng
xorg-x11-utils xorg-x11-utils
xorg-x11-xauth xorg-x11-xauth
rpmlib(PayloadIsXz) <= 5.2-1 rpmlib(PayloadIsXz) <= 5.2-1
It came as a bit of a surprise to see the (deprecated) net-tools again. Maybe it has to do with OSWatcher, as it likes netstat for example. I personally made the switch from net-tools to iproute some time ago and haven’t missed anything. I appreciate the addition of unzip to the list of required packages.
Responses
I just wish they’d finally remove the UEK kernel as a dependency – then you could safely use those preinstall RPMs on RHEL as well!
very nice explanation, thank you Martin
I think gcc is no more required because it is not used any more in the relink steps:
https://pierreforstmanndotcom.wordpress.com/2017/01/23/cloning-oracle-database-home-12-2-0-1-on-new-oracle-linux-machine-in-oracle-cloud/
I definitely required it as part of a patch application and linking a target.
Yippie! The 12.2 preinstall rpm now contains unzip as a dependency, which was really silly to be missing previously!!
[…] have previously written about changes in the Oracle 12.2 preinstall RPM and how gcc is no longer part of the dependencies list. As was pointed out to me, this […]