Установка Oracle8i на RHEL3
Итак, необходимо установить Oracle 8.1.7.4 на RHEL3.
Создаем группы для oracle. Действия выполняются под root:
root> groupadd oinstall
root> groupadd dba
root> groupadd oper
Далее создаем пользователя oracle. Действие выполняется под root:
root> useradd -g oinstall -G dba,oper oracle
root> passwd oracle
root> chown oracle:oinstall /u01 -R
root> chown oracle:oinstall /u02 -R
Далее предполагается, что программное обеспечение oracle будет устанавливаться в /u01, ORACLE_HOME=/u01/ora81.
Логинимся под пользователем oracle. Редактируем ~/.bash_profile. С самого начала он имеет следующий вид:
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH
unset USERNAME
Меняем на следующее:
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
export LD_ASSUME_KERNEL=2.2.5
export LANG="en_US.UTF-8"
export JAVA_HOME=/usr/local/java
export ORACLE_BASE=/u01
export ORACLE_HOME=/u01/ora81
export NLS_LANG="AMERICAN_CIS.CL8MSWIN1251"
export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
if [ "${LD_LIBRARY_PATH:-}" == "" ]; then
LD_LIBRARY_PATH=${ORACLE_HOME}/lib:/usr/lib:/usr/local/lib
else
LD_LIBRARY_PATH=${ORACLE_HOME}/lib:${LD_LIBRARY_PATH}
fi
export LD_LIBRARY_PATH
PATH=$ORACLE_HOME/bin:$PATH:$HOME/bin
export PATH
unset USERNAME
Далее опять логинимся под root. Необходимо установить корректные параметры ядра для нормальной работы oracle. В файл /etc/sysctl.conf добавляем следующее:
kernel.shmmax = 4096000000
kernel.shmmni = 100
kernel.sem = 600 32000 100 128
fs.file-max = 131072
Если там такие параметры уже были, то исправляем на указанные выше. Применяем измененные параметры:
root> sysctl -p
Проверяем, установлен ли пакет compat-gcc-7.3-2.96 (rpm -q compat-gcc). Если нет, устанавливаем, после чего делаем следующее:
root> mv /usr/bin/gcc /usr/bin/gcc323
root> ln –s /usr/bin/gcc296 /usr/bin/gcc
После этого заходим в KDE под пользователем oracle. Далее предполагается, что установочные файлы oracle 8.1.7 располагаются в папке /home/install/tmp/oracle.8.1.7, патчсет 8.1.7.4 находится в папке /home/install/tmp/patch.8.1.7.4, и у пользователя oracle есть полный доступ на /home/install. Если это не так, то в консоли от имени root делаем следующее:
> chown oracle:oinstall /home/install/tmp -R
После этого консоль root можно закрыть.
Далее от имени oracle даем права на запуск Installer-а. Как это не странно, но в дистрибутиве oracle на запуск инсталлера ни у кого прав нет...
oracle> chmod ug+x /home/install/tmp/oracle.8.1.7/runInstaller
oracle> chmod ug+x /home/install/tmp/oracle.8.1.7/install/linux/runInstaller/
Сразу скажу, что для успеха дальнейших действий по установке oracle необходимо иметь такую штуку, как glibc-2.1.3-stubs.tar.gz. Мне эту штуку подарил добрый парень Денисков Игорь, за что ему огромное спасибо, так же как и подарил набор патчей, о которых речь пойдет ниже.
Теперь нам необходим набор патчей, которые нам понадобятся при установке. Создаем их. Далее предполагается, что создаваемые нами патчи мы размещаем в каталоге /home/install/tmp/rhel3.
Создаем патч для root.sh. Называем его root.sh.patch (/home/install/tmp/rhel3/root.sh.patch)
--- /usr/local/oracle/product/8.1.7/root.sh 2005-10-18 16:39:48.000000000 +0300
+++ root.sh 2005-10-18 16:42:14.000000000 +0300
@@ -99,7 +99,7 @@
TEE=/usr/bin/tee
TMPORATB=/tmp/oratab$$
TEST=/usr/bin/test
-RMF=/bin/rm -f
+RMF="/bin/rm -f"
#
# If
#
@@ -153,7 +153,7 @@
$ECHO "ORACLE_SID is not set."| $TEE -a $
fi
-RUID=`/usr/bin/id|$AWK -F\( '{print $2}'|$AWK -F\) '{print $1}`
+RUID=`/usr/bin/id|$AWK -F\( '{print $2}'|$AWK -F\) '{print $1}'`
if [ ${RUID} != "root" ];then
$ECHO "You must be logged in as root to run root.sh."| $TEE -a $
$ECHO "
Создаем патч для загадочной штуки ins_oemagent.mk. Называем его ins_oemagent.mk.patch (/home/install/tmp/rhel3/ins_oemagent.mk.patch). Вот его содержимое:
--- ins_oemagent.mk.orig 2005-10-18 17:29:37.000000000 +0300
+++ ins_oemagent.mk 2005-10-18 17:31:11.000000000 +0300
@@ -17,7 +17,7 @@
RDBMSHOME = $(ORACLE_HOME)/rdbms/
RDBMSLIB = $(ORACLE_HOME)/rdbms/lib/
RDBMSBIN = $(ORACLE_HOME)/rdbms/bin/
-LDFLAGS = $(STDMODE) -L$(LIBHOME) -L$(ORACLE_HOME)/rdbms/lib -L$(ORACLE_HOME)/network/lib
+LDFLAGS = $(STDMODE) -L$(LIBHOME)/stubs -L$(LIBHOME) -L$(ORACLE_HOME)/rdbms/lib -L$(ORACLE_HOME)/network/lib
LDCCOM = $(LINK) $(LDFLAGS) $(EXOSFLAGS) -o $@
Создаем патч для загадочной штуки ins_net_server.mk. Называем его ins_net_server.mk.patch (/home/install/tmp/rhel3/ins_net_server.mk.patch). Вот его содержимое:
--- ins_net_server.mk.orig 2005-10-18 17:32:50.000000000 +0300
+++ ins_net_server.mk 2005-10-18 17:33:39.000000000 +0300
@@ -21,7 +21,7 @@
RDBMSBIN = $(ORACLE_HOME)/rdbms/bin/
MAKEFILE = $(ORACLE_HOME)/network/lib/ins_net_server.mk
-LDFLAGS = -L$(LIBHOME) -L$(RDBMSLIB) -L$(NETWORKLIB)
+LDFLAGS = -L$(LIBHOME)/stubs -L$(LIBHOME) -L$(RDBMSLIB) -L$(NETWORKLIB)
LDCCOM = $(LINK) -Wl,-rpath,$(ORACLE_HOME)/lib $(LDFLAGS) $(EXOSFLAGS) -o $@
ECHO = $(ORACLE_HOME)/bin/echodo
Создаем патч для загадочной штуки genagtsh. Называем его genagtsh.patch (/home/install/tmp/rhel3/genagtsh.patch). Вот его содержимое:
--- genagtsh.orig 2005-10-18 17:35:04.000000000 +0300
+++ genagtsh 2005-10-18 17:36:41.000000000 +0300
@@ -132,8 +132,7 @@
# Linker command and options
-LD="ld -G -L${ORACLE_HOME}/lib" # shared library link command
-LD_OPT="-h ${AGENT_LIBNAME}" # name inserted into library
+LD="gcc -shared -fpic -L${ORACLE_HOME}/lib/stubs -L${ORACLE_HOME}/lib" # shared library link command
LD_OUT="-o ${LIB_NAME}" # output specification
Все, необходимый набор патчей подготовили. Поехали дальше.
Собственно говоря, мы должны щас находится в KDE под oracle. Если нет, то нужно чтоб было так. Под пользователем oracle запускаем runInstaller:
oracle> /home/install/tmp/oracle.8.1.7/runInstaller
Ставим программное обеспечение oracle. В процессе установки будет предложено выполнить скрипт orainstRoot.sh. Выполняем. На ошибки компиляции внимания не обращаем, так и должно быть. Когда нас попросят выполнить скрипт root.sh – останавливаемся и делаем следующее:
oracle> patch /u01/ora81/root.sh /home/install/tmp/rhel3/root.sh.patch
После этого выполняем root.sh:
oracle> /u01/ora81/root.sh
Продолжаем процесс установки. Игнорируем все ошибки – мы их потом исправим.
Затем накатываем патч 8.1.7.4. Ждем первой ошибки связывания:
Error in invoking target relink of makefile /u01/ora81/precomp/lib/ins_precomp.mk
Покидаем наш любимый инсталлятор оракла, берем бубен и....
Разворачиваем glibc-2.1.3-stubs.tar.gz в /u01/ora81 и ставим:
oracle> /u01/ora81/setub_stubs.sh
И вот теперь пришло время воспользоваться всеми написанными ранее патчами, не считая root.sh.patch, который мы уже использовали:
oracle> patch /u01/ora81/network/lib/ins_oemagent.mk /home/install/tmp/rhel3/ins_oemagent.mk.patch
oracle> patch /u01/ora81/network/lib/ins_net_server.mk /home/install/tmp/rhel3/ins_net_server.mk.patch
oracle> patch /u01/ora81/bin/genagtsh /home/install/tmp/rhel3/genagtsh.patch
oracle> cd /u01/ora81/network/lib
oracle> make -f ins_oemagent.mk install
oracle> make -f ins_net_server.mk install
oracle> cd /u01/ora81/rdbms/lib
oracle> make -f ins_rdbms.mk iextproc
Теперь необходимо пересобрать libagtsh.so.1.0:
oracle> cd /u01/ora81/lib
oracle> genagtsh libagtsh.so.1.0
oracle> ln -sf libagtsh.so.1.0 libagtsh.so
Теперь возвращаемся к нашему инсталлеру, в котором у нас висит ошибка связывания, нажимаем там retry, и дальше все должно быть без проблем.
Читать далее