How to Install 32-bit Oracle on an x86-64 Platform

by: Marc Fielding

I couldn't find this install documented anywhere on Metalink or the Internet, so here are some instructions on how to do it. It's written for Oracle 9 and RHEL3, but should apply to Oracle 10 and RHEL4 as well.

How to install 32-bit oracle on a x86-64 platform:

 

  • Unpack the regular oracle x86 install disks (ship_9204_linux_disk1.cpio etc)
  • Download patch 3005865 and unpack
  • Extract the assembler code in rhel3_pre_install.sh into a new file libcwait.c. It should look something like this:
#include 
#include
#include
#include
pid_t
__libc_wait (int *status)
{
int res;
asm volatile ("pushl %%ebx\n\t"
"movl %2, %%ebx\n\t"
"movl %1, %%eax\n\t"
"int \$0x80\n\t"
"popl %%ebx"
: "=a" (res)
: "i" (__NR_wait4), "0" (WAIT_ANY), "c" (status), "d"
(0), "S" (0));
return res;
}
  • Compile it, using GCC 2.96:
    /usr/bin/gcc296 -O2 -shared -fpic -c libcwait.c -o libcwait.so
  • Generate the 64-bit version of libcwait.
    cp libcwait.c libcwait64.c
    vi libcwait64.c

    Replace "pushl %%ebx\n\t" with "pushq %%rbx\n\t"
    Replace "popl %%ebx" with "popq %%rbx"
  • Compile using the more recent 3.23 compiler (for RHEL3; other linux versions will vary):
    /usr/bin/gcc323 -m64 -O2 -shared -fpic -c libcwait64.c -o libcwait64.so
  • Install 32-bit and 64-bit libcwaits into recognized library paths:
    cp libcwait.so /usr/lib
    cp libcwait64.so /usr/lib64/libcwait.so
  • Refresh the LD cache
    ldconfig
  • Now run the install, in an X session:
    setarch i686
    export LD_ASSUME_KERNEL=2.4.19
    export LD_PRELOAD=libcwait.so
    ./runInstaller