Ошибка при сборке клиента Oracle 11g R2 на RHEL 5.5

Вопрос или проблема

Мы пытаемся установить Oracle 11g R2 64 бит на машине Rhel 5.5 (64 бит). Версия ядра — 2.6.18-194.el5. При установке появляется следующая ошибка.

Ошибка в вызове цели 'mkldflags ntcontab.o nnfgt.o' makefile '/home/oracle/app/product/11.2.0/network/lib/ins_net_client.mk'.
Подробности смотрите в '/home/oracle/oraInventory/logs/installAction2013-09-03_04-52-05PM.log'.

Мы установили все необходимые библиотечные пакеты.

binutils-2.17.50.0.6-14.el5.x86_64
compat-libstdc++-33-3.2.3-61.x86_64
compat-libstdc++-33-3.2.3-61.i386
elfutils-libelf-0.137-3.el5.x86_64
elfutils-libelf-0.137-3.el5.i386
elfutils-libelf-devel-static-0.137-3.el5.x86_64
elfutils-libelf-devel-static-0.137-3.el5.i386 
elfutils-libelf-devel-0.137-3.el5.x86_64
elfutils-libelf-devel-0.137-3.el5.i386
gcc-4.1.2-48.el5.x86_64
gcc-c++-4.1.2-48.el5.x86_64
glibc-2.5-49.x86_64
glibc-2.5-49.i686
glibc-common-2.5-49.x86_64
glibc-devel-2.5-49.x86_64
glibc-devel-2.5-49.i386
glibc-headers-2.5-49.x86_64
ksh-20100202-1.el5.x86_64
libaio-0.3.106-5.x86_64
libaio-0.3.106-5.i386
libaio-devel-0.3.106-5.x86_64
libaio-devel-0.3.106-5.i386
libgcc-4.1.2-48.el5.x86_64
libgcc-4.1.2-48.el5.i386
libstdc++-4.1.2-48.el5.x86_64
libstdc++-4.1.2-48.el5.i386 
libstdc++44-devel-4.4.0-6.el5.x86_64
libstdc++44-devel-4.4.0-6.el5.i386
libstdc++-devel-4.1.2-48.el5.x86_64 
libstdc++-devel-4.1.2-48.el5.i386

make уже установлен:

make-3.81-3.el5.x86_64

Содержимое файла журнала:

INFO: Вызов файла запросов Query fileQueries10.1.0.3.0 существует

filename = /home/oracle/app/product/11.2.0/rdbms/lib/libknlopt.a
INFO: Запрос вернул: false
INFO: Вызов действия unixActions10.2.0.3.0 registerForMake
        installMakePath = /usr/bin/make
        installMakeFileName = /home/oracle/app/product/11.2.0/network/lib/ins_nau.mk
        installTarget = ioklist
        installArguments = ORACLE_HOME=/home/oracle/app/product/11.2.0
        undoMakeFileName = null
        undoTarget = null
        undoArguments = null
        logFile = /home/oracle/app/product/11.2.0/install/make.log
        progMsg = Linking Adapters

INFO: Вызов действия unixActions10.2.0.3.0 registerForMake
        installMakePath = /usr/bin/make
        installMakeFileName = /home/oracle/app/product/11.2.0/network/lib/ins_nau.mk
        installTarget = iokinit
        installArguments = ORACLE_HOME=/home/oracle/app/product/11.2.0
        undoMakeFileName = null
        undoTarget = null
        undoArguments = null
        logFile = /home/oracle/app/product/11.2.0/install/make.log
        progMsg = Linking Adapters

INFO: Вызов действия unixActions10.2.0.3.0 registerForMake
        installMakePath = /usr/bin/make
        installMakeFileName = /home/oracle/app/product/11.2.0/network/lib/ins_nau.mk
        installTarget = iokdstry
        installArguments = ORACLE_HOME=/home/oracle/app/product/11.2.0
        undoMakeFileName = null
        undoTarget = null
        undoArguments = null
        logFile = /home/oracle/app/product/11.2.0/install/make.log
        progMsg = Linking Adapters

INFO: Linking 'Oracle Database Utilities 11.2.0.3.0 '
INFO: Linking 'Oracle Database Utilities 11.2.0.3.0 '
INFO: 9/3/13 4:54:07 PM IST: Начало установки Link Phase компонента Oracle Database Utilities
INFO: Вызов действия unixActions10.2.0.3.0 registerForMake
        installMakePath = /usr/bin/make
        installMakeFileName = /home/oracle/app/product/11.2.0/rdbms/lib/ins_rdbms.mk
        installTarget = utilities
        installArguments = ORACLE_HOME=/home/oracle/app/product/11.2.0
        undoMakeFileName = null
        undoTarget = null
        undoArguments = null
        logFile = /home/oracle/app/product/11.2.0/install/make.log
        progMsg = Linking Utilities Executables

INFO: Linking 'SQL*Plus 11.2.0.3.0 '
INFO: Linking 'SQL*Plus 11.2.0.3.0 '
INFO: 9/3/13 4:54:07 PM IST: Начало установки Link Phase компонента SQL*Plus
INFO: Вызов действия unixActions10.2.0.3.0 registerForMake
        installMakePath = /usr/bin/make
        installMakeFileName = /home/oracle/app/product/11.2.0/sqlplus/lib/ins_sqlplus.mk
        installTarget = install
        installArguments = ORACLE_HOME=/home/oracle/app/product/11.2.0
        undoMakeFileName = null
        undoTarget = null
        undoArguments = null
        logFile = /home/oracle/app/product/11.2.0/install/make.log
        progMsg = Linking SQLPLUS Executables

INFO: Linking 'Oracle Programmer 11.2.0.3.0 '
INFO: Linking 'Oracle Programmer 11.2.0.3.0 '
INFO: 9/3/13 4:54:07 PM IST: Начало установки Link Phase компонента Oracle Programmer
INFO: Linking 'Oracle Internet Directory Client 11.2.0.3.0 '
INFO: Linking 'Oracle Internet Directory Client 11.2.0.3.0 '
INFO: 9/3/13 4:54:07 PM IST: Начало установки Link Phase компонента Oracle Internet Directory Client
INFO: Вызов действия unixActions10.2.0.3.0 registerForMake
        installMakePath = /usr/bin/make
        installMakeFileName = /home/oracle/app/product/11.2.0/ldap/lib/ins_ldap.mk
        installTarget = clientonlyinstall
        installArguments = ORACLE_HOME=/home/oracle/app/product/11.2.0
        undoMakeFileName = null
        undoTarget = clientonlyinstall
        undoArguments = ORACLE_HOME=/home/oracle/app/product/11.2.0
        logFile = /home/oracle/app/product/11.2.0/install/make.log
        progMsg = Linking OID Client

INFO: Вызов действия unixActions10.2.0.3.0 registerForMake
        installMakePath = /usr/bin/make
        installMakeFileName = /home/oracle/app/product/11.2.0/ldap/lib/ins_ldap.mk
        installTarget = clientonlyinstall
        installArguments = ORACLE_HOME=/home/oracle/app/product/11.2.0
        undoMakeFileName = /home/oracle/app/product/11.2.0/ldap/lib/ins_ldap.mk
        undoTarget = clientonlyinstall
        undoArguments = ORACLE_HOME=/home/oracle/app/product/11.2.0
        logFile = /home/oracle/app/product/11.2.0/install/make.log
        progMsg = Linking Client-only Install

INFO: Linking 'SQLJ Runtime 11.2.0.3.0 '
INFO: Linking 'SQLJ Runtime 11.2.0.3.0 '
INFO: 9/3/13 4:54:07 PM IST: Начало установки Link Phase компонента SQLJ Runtime
INFO: Linking 'Oracle SQLJ 11.2.0.3.0 '
INFO: Linking 'Oracle SQLJ 11.2.0.3.0 '
INFO: 9/3/13 4:54:07 PM IST: Начало установки Link Phase компонента Oracle SQLJ
INFO: Linking 'Oracle Client 11.2.0.3.0 '
INFO: Linking 'Oracle Client 11.2.0.3.0 '
INFO: 9/3/13 4:54:07 PM IST: Начало установки Link Phase компонента Oracle Client
INFO: Идет связывание
INFO: Идет связывание
INFO: Link Phase JRE files в Scratch :0
INFO: Вызов действия unixActions10.2.0.3.0 make
        registerOnly = false
        installMakePath = /usr/bin/make
        installMakeFileName = /home/oracle/app/product/11.2.0/network/lib/ins_net_client.mk
        installTarget = mkldflags ntcontab.o nnfgt.o
        undoMakeFileName =
        installArguments = ORACLE_HOME=/home/oracle/app/product/11.2.0
        logFile = /home/oracle/app/product/11.2.0/install/make.log
        undoTarget =
        progMsg = Linking ldflags Executables

INFO: Linking ldflags Executables
INFO: Linking ldflags Executables
INFO: Вывод этой операции make также доступен в: '/home/oracle/app/product/11.2.0/install/make.log'
INFO:

INFO: Начало вывода из запущенного процесса:
INFO: ----------------------------------
INFO:

INFO: rm -f ntcontab.*

INFO: (if [ "compile" = "compile" ] ; then \
          /home/oracle/app/product/11.2.0/bin/gennttab > ntcontab.c ;\
          /usr/bin/gcc -m32  -m32  -fPIC -c ntcontab.c ;\
          rm -f /home/oracle/app/product/11.2.0/lib/ntcontab.o ;\
          mv ntcontab.o /home/oracle/app/product/11.2.0/lib/ ;\
          /usr/bin/ar rv /home/oracle/app/product/11.2.0/lib/libn11.a /home/oracle/app/product/11.2.0/lib/ntcontab.o ; fi)

INFO: /bin/sh: line 2: /usr/bin/gcc: No such file or directory

INFO: mv: невозможно сделать стат 'ntcontab.o'
INFO: : No such file or directory

INFO: /usr/bin/ar: /home/oracle/app/product/11.2.0/lib/ntcontab.o: No such file or directory

INFO: make: *** [ntcontab.o] Ошибка 1

INFO: Конец вывода из запущенного процесса.
INFO: ----------------------------------
INFO: Исключение выброшено из действия: make
Exception Name: MakefileException
Exception String: Ошибка в вызове цели 'mkldflags ntcontab.o nnfgt.o' makefile '/home/oracle/app/product/11.2.0/network/lib/ins_net_client.mk'. Подробности смотрите в '/home/oracle/oraInventory/logs/installActions2013-09-03_04-52-05PM.log'.
Exception Severity: 1
INFO: Добавление ExitStatus STOP_INSTALL к набору выходных статусов
INFO: Поиск наиболее подходящего выходного статуса для текущего приложения
INFO: Exit Status is -4
INFO: Завершение работы установщика Oracle Client

Какое решение для этой ошибки?

Войдите в систему как root и выполните следующее:

  1. Переместите существующий файл /usr/bin/gcc в /usr/bin/gcc.orig с помощью команды mv:
    mv /usr/bin/gcc /usr/bin/gcc.orig
  2. С помощью текстового редактора, например vi, создайте новый файл под названием gcc41, содержащий следующее содержимое (строка, начинающаяся с exec, должна быть единой строкой):

     #!/bin/sh
     exec /usr/bin/gcc.orig -m32 -static-libgcc -B /usr/lib/gcc/x86_64-redhat-linux/4.4.7/32/ $*
    

Примечание:
Каталог usr/lib/gcc/x86_64-redhat-linux/4.1.2/32/ может немного отличаться
в зависимости от версии вашей операционной системы Linux. Найдите
соответствующий каталог 32-bit в /usr/lib/gcc в вашей операционной
системе Linux и используйте этот каталог в файле gcc41.

  1. Измените права на файл gcc41 с помощью следующей команды:

    chmod 755 /usr/bin/gcc41 
    chmod 755 /usr/bin/gcc
    
  2. Создайте символическую ссылку на /usr/bin/gcc с помощью следующей команды:
    ln -s -f /usr/bin/gcc41 /usr/bin/gcc
  3. Выйдите из системы как root

Ответ или решение

Установка Oracle 11g R2 на системы с операционной системой Red Hat Enterprise Linux (RHEL) может столкнуться с различными проблемами, особенно если система требует компиляции или связывания разных компонентов. В вашем случае возникла ошибка при выполнении цели ‘mkldflags ntcontab.o nnfgt.o’ в makefile. Давайте подробно разберем возможные причины этой проблемы и шаги по её устранению.

Теория

Основная проблема, с которой вы столкнулись, связана с отсутствием правильной копии компилятора GCC в ожидаемом месте, то есть /usr/bin/gcc. При установке Oracle требуется использование определенных архитектурных флагов, таких как -m32, которые указывают компилятору на использование 32-битной архитектуры. Ошибка также подтверждается в лог-файле, который указывает на попытку выполнения компиляции с определенными флагами, но не может найти нужную версию GCC.

Пример

Рассмотрим конкретный шаг вывода из вашего журнала, где выполняется команда:

/usr/bin/gcc -m32  -m32  -fPIC -c ntcontab.c

и система сообщает, что файл или каталог не существует /usr/bin/gcc: No such file or directory. Это указывает на то, что утилита make ожидает существование gcc по пути /usr/bin/, чего в данном случае нет.

Применение

Для решения этой проблемы вы можете следовать предложенному вами решению, а именно, создать обертку над компилятором GCC, которая обеспечит правильную маршрутизацию вызовов компиляции. Давайте подробно рассмотрим шаги:

  1. Перенесите существующий файл GCC:
    Используйте команду mv для перемещения текущей версии компилятора в другую директорию, чтобы избежать изменения оригинальных файлов прямой командой.

    mv /usr/bin/gcc /usr/bin/gcc.orig
  2. Создайте новый скрипт gcc41:
    Используйте текстовый редактор, например, vi, для создания нового файла скрипта, который будет направлять вызовы старого компилятора вместе с нужными флагами.

    vi /usr/bin/gcc41

    Введите внутри следующий код:

    #!/bin/sh
    exec /usr/bin/gcc.orig -m32 -static-libgcc -B /usr/lib/gcc/x86_64-redhat-linux/4.4.7/32/ $*

    Важно: Проверьте, что путь /usr/lib/gcc/x86_64-redhat-linux/4.4.7/32/ соответствует версии вашего компилятора GCC, которая установлена на вашей системе. Это может быть Path для другой версии GCC, если в вашей версии другое расположение.

  3. Измените разрешения файла:

    После создания скрипта убедитесь, что он обладает необходимыми правами на выполнение:

    chmod 755 /usr/bin/gcc41
    chmod 755 /usr/bin/gcc
  4. Создание символической ссылки:

    Обновите ссылку на GCC, чтобы она использовала ваш новый скрипт:

    ln -s -f /usr/bin/gcc41 /usr/bin/gcc
  5. Завершите работу в качестве суперпользователя:

    Просто выйдите из-под пользователя root, чтобы снизить риск случайного изменения критически важных системных настроек.

Безусловно, перед исполнением всех указанных выше шагов убедитесь, что у вас есть резервная копия всех изменяемых файлов, а также корректное понимание действий, так как изменения в системных файлах всегда могут нарушить работу других приложений. Эти шаги должны помочь устранить проблему компиляции и завершить установку Oracle 11g R2 на RHEL 5.5.

Оцените материал
Добавить комментарий

Капча загружается...