Tuesday, October 23, 2012

PT8.52 on OL6.3 : “strings: '/lib/libc.so.6': No such file” (bis)

One and an half year ago, I wrote a blog entry giving a workaround about such error when installing Peopletools 8.51 on Oracle Linux 6.0, it was not certified combination at that time though, so no support.

Right now, there’s Peopletools 8.52 for quite a while and Oracle Linux 6.3. According to the certification matrix on My Oracle Support, it is certified.
However, when running a simple install, we are still facing this issue (that’s why I’ve wrote “bis” in the title).
[psoft@orion6 Disk1]$ ./setup.sh
Setting temporary directory /tmp/IA.7738
Executing setup.linux   -DCOMP_NAME=orion6.phoenix.nga -DPS_UMASK=0002
Preparing to install...
Extracting the JRE from the installer archive...
Unpacking the JRE...
Extracting the installation resources from the installer archive...
Configuring the installer for this system's environment...
strings: '/lib/libc.so.6': No such file

Launching installer...

Preparing CONSOLE Mode Installation...
<...stopping Peopletools install...>

So, let’s have a try to apply the same workaround that I described in that other entry and see if it is still doing the trick.
[root@orion6 lib]# ln -s /usr/lib64/libc.so libc.so.6
[root@orion6 lib]# su - psoft

[psoft@orion6 Disk1]$ ./setup.sh
Setting temporary directory /tmp/IA.14170
Executing setup.linux   -DCOMP_NAME=orion6.phoenix.nga -DPS_UMASK=0002
Preparing to install...
Extracting the JRE from the installer archive...
Unpacking the JRE...
Extracting the installation resources from the installer archive...
Configuring the installer for this system's environment...

Launching installer...

Preparing CONSOLE Mode Installation...

<...install Peopletools 8.52 successfully...>

We get the Peopletools installed painlessly. But later on, we need to invoke psconfig.sh to set the Peopletools environment :
[psoft@orion6 ~]$ cd $PS_HOME
[psoft@orion6 ptools852]$ . ./psconfig.sh
[psoft@orion6 ptools852]$ ls
ls: error while loading shared libraries: /lib/libc.so.6: invalid ELF header
[psoft@orion6 ptools852]$
[psoft@orion6 ptools852]$ vi psconfig.sh
vim: error while loading shared libraries: /lib/libc.so.6: invalid ELF header

Hmmm, not nice, is it ? So, let’s have a look what happens if we remove that file :
[root@orion6 lib]# ls -lrt
total 36
drwxr-xr-x.  2 root root 4096 Apr 16  2012 security
drwxr-xr-x.  6 root root 4096 Oct 23 09:27 terminfo
lrwxrwxrwx.  1 root root   14 Oct 23 09:28 cpp -> ../usr/bin/cpp
drwxr-xr-x.  3 root root 4096 Oct 23 09:29 alsa
drwxr-xr-x.  3 root root 4096 Oct 23 09:29 crda
drwxr-xr-x.  6 root root 4096 Oct 23 09:31 kbd
drwxr-xr-x.  2 root root 4096 Oct 23 09:31 lsb
dr-xr-xr-x.  6 root root 4096 Oct 23 10:05 modules
drwxr-xr-x. 45 root root 4096 Oct 23 10:05 firmware
drwxr-xr-x.  5 root root 4096 Oct 23 11:44 udev
lrwxrwxrwx.  1 root root   18 Oct 23 12:14 libc.so.6 -> /usr/lib64/libc.so
[root@orion6 lib]# rm -f libc.so.6
[root@orion6 lib]# su - psoft
[psoft@orion6 ~]$ . $PS_HOME/psconfig.sh
[psoft@orion6 ~]$ ls
bea  psft
[psoft@orion6 ~]$

It works much better. But then any further installation will fail again as explained earlier…
For the record, here’s the OS details (OL6.3) :
[psoft@orion6 ptools852]$ more /etc/redhat-release
Red Hat Enterprise Linux Server release 6.3 (Santiago)
[psoft@orion6 ptools852]$
[root@orion6 ~]# uname -a
Linux orion6.phoenix.nga 2.6.39-200.34.1.el6uek.x86_64 #1 SMP Thu Oct 18 17:00:17 PDT 2012 x86_64 x86_64 x86_64 GNU/Linux
[root@orion6 ~]#

Finally, there’s something looking much better. A link to an other library, a 64bit :
[root@orion6 lib]# ln -s /lib64/libc.so.6 /lib/libc.so.6
[root@orion6 lib]# su - psoft
[psoft@orion6 ~]$ . $PS_HOME/psconfig.sh
[psoft@orion6 ~]$ ls
bea  psft
[psoft@orion6 ~]$

You have a working environment, and the Peopletools installation is also working fine with this last symbolic link :
[psoft@orion6 Disk1]$ ./setup.sh
Setting temporary directory /tmp/IA.23315
Executing setup.linux   -DCOMP_NAME=orion6.phoenix.nga -DPS_UMASK=0002
Preparing to install...
Extracting the JRE from the installer archive...
Unpacking the JRE...
Extracting the installation resources from the installer archive...
Configuring the installer for this system's environment...

Launching installer...

Preparing CONSOLE Mode Installation...

===============================================================================
PeopleTools                                      (created with InstallAnywhere)
-------------------------------------------------------------------------------
<… continuing…>

So in first instance I was probably wrong last year, whereas it should be a symbolic link from /lib/libc.so.6 pointing to /lib64/libc.so.6.
----
But overall, we can also ask why this link is needed for the installation even though Peopletools claims to be a real 64bit…
It should be somewhere in the setup itself.
Just going a little bit further, having a look into ./Disk1/InstData/setup.linux, if you're searching for "libc", there's only one occurrence, and you'll see the libc.so.6 is hardcoded to be tested under /lib. Sic.
Here’s an extract:

nptl="`strings /lib/libc.so.6 | grep -i nptl`"
if [ "$nptl" ]; then
        debugOut "NPTL detected! checking for vulnerable JVM....";


Obviously, when running the strings command (the very first line from above), it aborts within the same error message that we get during the very first installation :
[psoft@orion6 InstData]$ strings /lib/libc.so.6 | grep -i nptl
strings: '/lib/libc.so.6': No such file
[psoft@orion6 InstData]$

So, apart from creating a link as earlier in this article, you may prefer to modify the setup.linux. At least it affects only the installer, not the system itself, so most likely better.
Remove the link created above and replace the given line in setup.linux.
However, since it's an binary file, you cannot just edit the file, modify and save.
       nptl="`strings /lib/libc.so.6 | grep -i nptl`"
must be replaced by 
       nptl="`strings /lib64/libc.so.6|grep -i nptl`" 
Note that luckily enough, whether we need two more characters for “64”, and we can remove two extra spaces to keep the same amount of bytes in the binaries file. 
Using sed command, it’s doable (do not forget to save the source file first!):
[psoft@orion6 InstData]$ cat setup.linux.bak|sed "s/\/lib\/libc.so.6 | grep -i nptl/\/lib64\/libc.so.6|grep -i nptl/">setup.linux.new

Now the script looks like :
# LD_ASSUME_KERNEL for Native POSIX Threading Library on some Linux distros
if [ `uname` = "Linux" -a -n "`which strings 2>/dev/null`" ]; then
        debugOut "checking for NPTL + JVM vulernability..."
        #check libc to see if it was compiled with NPTL
        nptl="`strings /lib64/libc.so.6|grep -i nptl`"
        if [ "$nptl" ]; then
                debugOut "NPTL detected! checking for vulnerable JVM....";


To be convinced this is working, here a run without the link :
[psoft@orion6 InstData]$ cp setup.linux.bak setup.linux
[psoft@orion6 InstData]$ cd ../
[psoft@orion6 Disk1]$ ./setup.sh
Setting temporary directory /tmp/IA.30517
Executing setup.linux   -DCOMP_NAME=orion6.phoenix.nga -DPS_UMASK=0002
Preparing to install...
Extracting the JRE from the installer archive...
Unpacking the JRE...
Extracting the installation resources from the installer archive...
Configuring the installer for this system's environment...
strings: '/lib/libc.so.6': No such file

Launching installer...

Preparing CONSOLE Mode Installation...

===============================================================================
PeopleTools                                      (created with InstallAnywhere)
-------------------------------------------------------------------------------

===============================================================================
Welcome
-------

InstallAnywhere will guide you through the installation of PeopleTools 8.52.

PRESS <ENTER> TO CONTINUE: ^C
[psoft@orion6 Disk1]$

Now going for the new file:
[psoft@orion6 Disk1]$ cp InstData/setup.linux.new InstData/setup.linux
[psoft@orion6 Disk1]$ ./setup.sh
Setting temporary directory /tmp/IA.30741
Executing setup.linux   -DCOMP_NAME=orion6.phoenix.nga -DPS_UMASK=0002
Preparing to install...
Extracting the JRE from the installer archive...
Unpacking the JRE...
Extracting the installation resources from the installer archive...
Configuring the installer for this system's environment...

Launching installer...

Preparing CONSOLE Mode Installation...

===============================================================================
PeopleTools                                      (created with InstallAnywhere)
-------------------------------------------------------------------------------

===============================================================================
Welcome
-------

InstallAnywhere will guide you through the installation of PeopleTools 8.52.

PRESS <ENTER> TO CONTINUE:
<…skipped…>
===============================================================================
Installation Complete
---------------------

Congratulations. PeopleTools has been successfully installed to:

   /apps/psoft/ptools852

PRESS <ENTER> TO EXIT THE INSTALLER:
[psoft@orion6 Disk1]$ exit
logout
[root@orion6 lib]# su – psoft
[psoft@orion6 ~]$ . $PS_HOME/psconfig.sh
[psoft@orion6 ~]$ cd $PS_HOME/appserv
[psoft@orion6 appserv]$ ./psadmin -v
Version 8.52
[psoft@orion6 appserv]$

Of course (sic), the same applies to all the Peopletools patches as well… for instance:
[psoft@orion6 InstData]$ pwd
/nfs/software/PeopleSoftCD/PeopleTools/PT8.52/PeopleTools8.52.02/cd85202/Disk1/InstData
[psoft@orion6 InstData]$ grep libc setup.linux
        #check libc to see if it was compiled with NPTL
        nptl="`strings /lib/libc.so.6 | grep -i nptl`"
[psoft@orion6 InstData]$


In the end, whether this error can probably be ignored, it should be better to have this cleaned definitely from within the installer (or why it is missing from the OS level ?).

Nicolas.

No comments: