The Pythian Group HomeEmergencyClient LoginContact Us
About Us   Our Services   The Pythian Advantage   News
back

News

Pythian Papers

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

by Marc Fielding

A passion for excellence  

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 <errno.h>
#include <sys/syscall.h>
#include <sys/types.h>
#include <sys/wait.h>
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