Установка патча для Oracle9i в среде RHEL AS/ES 3, Fedora Core 2

В статье описывается процесс наложения патча для Oracle9i (9.2.0.X) в коммерческих и "любительских" дистрибутивах Red Hat

[Dmitry Bystrov d_bystrov at yahoo.com]

Патч p3006854_9204_LINUX.zip должен быть установлен перед инсталляцией Oracle9i (Database)9.2.0.X +(коммулятивный патч 9205), OAS 9.0.4 в среде RHEL AS/ES 3,RH RH FC2. Порядок установки:

Патч можно скачать с http://conrad2001.narod.ru/terek/p3006854_9204_LINUX.zip или http://www.opennet.ru/soft/ora_inst/

    # unzip p3006854_9204_LINUX.zip  
    # cd 3006854
    # sh rhel3_pre_install.sh
Код, выполняемый скриптом:
    #!/bin/bash
    # Script rhel3_pre_install.sh

    USER=`whoami`
    if [ $USER != root ]; then
      echo "Must be root to run this script, please login as root and re-try"
      exit
    fi

    # see if libcwait.so is already being loaded
    if [ -f "/etc/ld.so.preload" ] && [ -n "`grep libcwait /etc/ld.so.preload`" ]; then
      echo "Patch has already been applied"
      exit
    else
      echo "Applying patch..."
    fi

    cat << EOF |
    #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;
    }
    EOF
    gcc -O2 -shared -fpic -xc - -o /etc/libcwait.so
    echo "/etc/libcwait.so" >>/etc/ld.so.preload

    echo "Ensuring permissions are correctly set..."
    chown root.root /etc/libcwait.so /etc/ld.so.preload
    chmod 755 /etc/libcwait.so
    chmod 444 /etc/ld.so.preload
    echo "Done."

    echo "Patch successfully applied"
Создается разделяемая библиотека /etc/libсwait.so и добавляется строка к /etc/ld.so.preload :
    /etc/libсwait.so

Вопрос: что нового в работе Артемия Капитулы ?

К сожалению, Артемиий Капитула разместил на Opennet.ru статью, содержащую совершенно тривиальные и давно известные вещи (Oracle9iR2 Installation on FC2 http://www.opennet.ru/opennews/art.shtml?num=4407). В полемике этот момент упущен.

Слова : "Артемий Капитула опубликовал несколько статей, описывающих тонкости установки Oracle под Fedora Core Linux: "

На мой взгляд не вполне удачны, в контексте реального положения вещей , т.е. статуса http://www.otn.oracle.com (OTN) на момент публикации.


Дополнение: в ходе дискуссии между автором данной статьи и Артемием Капитулой возникло следующее дополнение, которое мы разместили по просьбе автора

Проблема с Intelligent Agent в версии Oracle9R2 (9.2.0.4) при установке на RH FC2 
 

В настоящиий момент текст Артемия Капитулы на http://www.surw.ru/~dalth/orafedora2.html отличается от оригинала на 24.09.2004 года.
Добавлена новая функция и библиотека (цитата из Артемия Капитулы ) :-

Третья проблема, возникашая как следствие некоторого изменения схемы локализации (вместо некоторых переменных в новой версии glibc используются функции) также обходится путем создания библиотеки-заглушки. Для сборки этой третьей библиотеки напишем еще один файл, называемый libctype.so:

#include <stdlib.h>
#include <type.h>

unsigned short int * __ctype_b;
unsigned short int * __ctype_tolower;
unsigned short int * __ctype_toupper;

void __attribute__((constructor)) my_init() {
__ctype_b = * __ctype_b_loc();
__ctype_tolower = * __ctype_tolower_loc();
__ctype_toupper = * __ctype_toupper_loc();
}

void __attribute__((destructod)) my_clean() {
}
Скомпилируем эту библиотеку и установим ее аналогично libstat.so:

# gcc -O2 -shared -o libctype.so libctype.c
# cp libctype.so /lib/libcwait
# ln -s /lib/libcwait/libctype.so /lib/libctype.so
Все, подготовка закончена

Когда было выполнено добавление ? смотрим дискуссию на Opennet.ru:
http://www.opennet.ru/opennews/art.shtml?num=4407 и находим:-

15. "Установка Oracle на Fedora Core Linux"
Сообщение от Аноним on 28-Сен-04, 14:16 (MSK)

P.S.: а проблему со сборкой oemagent я все-таки решил, достаточно было посмотреть include'ы glibc-2.1

Предложенное решение следует внимательно сравнить с тем , что делает стандартный патч p3238244_9204_LINUX.zip для успешой линковки "dbsnmp" .

Отметим что, описание проблемы было приведено существенно раньше чем 28.09.2004
в статье Werner Puschitz :-

http://www.puschitz.com/InstallingOracle9i.shtml

Смотри начиная с

1.) glibc-2.3.2-5.i686.rpm This glibc version exports __ctype_b():
$ rpm -ql glibc-2.3.2-5 | grep libc.so
/lib/i686/libc.so.6
/lib/libc.so.6
/lib/tls/libc.so.6
$ nm -a /lib/i686/libc.so.6 | grep __ctype_b
001315f8 D __ctype_b
00022340 T __ctype_b_loc
$ nm -a /lib/libc.so.6 | grep __ctype_b
00133c58 D __ctype_b
000223a0 T __ctype_b_loc

2.)glibc-2.3.2-11.9.i686.rpm . This glibc version does not export __ctype_b().

$ rpm -ql glibc-2.3.2-11.9 | grep libc.so
/lib/i686/libc.so.6
/lib/libc.so.6
/lib/tls/libc.so.6
$ nm -a /lib/i686/libc.so.6 | grep __ctype_b
00131718 D __ctype_b@GLIBC_2.0
000223a0 T __ctype_b_loc
$ nm -a /lib/libc.so.6 | grep __ctype_b
00133d58 D __ctype_b@GLIBC_2.0
000223f0 T __ctype_b_loc

Werner Puschitz предлагает далее решение основанное на downgrade glibc
на время фазы линкования,работающее в пределах одного и того же релиза
glibc.

При установке версии 9.2.0.4 действия, предложенные Артемием Капитулой, никаким
образом не влияют на успешную сборку неработоспособной версии "dbsnmp"
Собрать работоспособный "dbsnmp" можно только после установки патчей
p2617419_220_GENERIC.zip , p3238244_9204_LINUX.zip.
Смотри статус $ORACLE_HOME/lib/stubs до и после установки патчей , а также
файл $ORACLE_HOME/network/lib/ins_oemagent.mk.


Статья взята с сайта OpenNet

[ опубликовано 30/12/2004 ]

Dmitry Bystrov d_bystrov at yahoo.com - Установка патча для Oracle9i в среде RHEL AS/ES 3, Fedora Core 2   Версия для печати