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.
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!!
Pingback: You may still need gcc when patching Oracle Database 12.2 | Martins Blog