Установка Oracle8i 8.1.7.4 на FreeBSD шаг за шагомВячеслав Иванченко
1<[email protected]>
2
3$FreeBSD: doc/ru_RU.KOI8-R/articles/oracle/article.sgml,v 1.36 2003/07/14 03:12:47 ivi Exp $
4
5
6Чтобы сделать этот документ максимально информативным и правильным, присылайте свои комментарии и пожелания мне на электронный адрес [email protected].
7
8Отдельно благодарю Стаса Корниенко за его труд, так как львиная доля этой статьи основана на его материале.
91\. Введение
10Эта статья содержит описание пошаговой установки Oracle8i для Linux (8.1.7.4) на FreeBSD. Перед тем, как написать эту статью, я внимательно перечитал материал Стаса Корниенко "Установка Oracle 8.1.x на FreeBSD 4.x". И все меня вроде устраивало в статье Стаса, да только не давала спокойно спать мысль - почему же установщик Oracle8i (Oracle Universal Installer) на последней стадии своей работы зависает, из-за чего заканчивать установку приходилось вручную. Поэтому я поставил перед собой цель - произвести установку Oracle8i так, чтобы все неприятные ситуации, связанные с зависанием не возникали при установке.
11
12Тщательно проанализировав различную документацию по установке Oracle8i на различных дистрибутивах Linux и проведя различные эксперименты над установкой Oracle8i, как на FreeBSD, так и на Linux, я пришел к выводу, что Oracle8i все же можно установить на FreeBSD так, чтобы он не зависал во время установки. Также на FreeBSD возможно использование GUI-утилит, которые будут доступны после установки. У меня это получилось, чего желаю и Вам! :-)
13
14Предполагается, что установлена FreeBSD-4.x или FreeBSD-5.x на базе i686 вместе с настроенной и готовой к работе XFree86 / X Window System.
15
16Предполагается, что если у Вас нет неразмеченного места на дисках Вашей машины, не меньше 2 ГБ, то в файловой системе примонтированной в директорию /usr имеется 3,5 ГБ свободного места. Также необходимо, чтобы общий размер своп-разделов был равен 1 ГБ, если общий размер своп-разделов не удовлетворяет указанным требованиям и у Вас отсутствует дополнительное неразмеченное место для создания еще одного своп-раздела, то Вам понадобится еще 1 ГБ сводного места, в любой имеющейся на дисках Вашей машины файловой системе UFS. Конфигурация машины, на которую устанавливается Oracle8i, должна удовлетворять следующим параметрам CPU PIII-500 МГц и выше, RAM 256 МБ и более.
17
18Предполагается, что в качестве командного интерпретатора у суперпользователя установлен csh, и суперпользователь находится в группе wheel, GID которой равен 0.
19
20Предполагается, что все команды начинающиеся с символа # выполняются от имени суперпользователя, а с символа % - от имени пользователя oracle, которого Вам еще предстоит создать в соответствии с рекомендациями из этой статьи. Будьте внимательны, выполнять команды необходимо именно с тем UID, который рекомендуется в статье! Не стоит выполнять команды, которые должен выполнять пользователь oracle, от имени суперпользователя, в большинстве случаев это приведет к различным проблемам при инсталляции Oracle8i.
21
22Предполагается, что исходные тексты системы доступны в директории /usr/src, а коллекция портов находится в директории /usr/ports.
23
24Предполагается, что будет использоваться обновленная с помощью cvsup коллекция портов, в связи с тем, что старые версии FreeBSD, содержат в портах emulators/linux_base-6 и devel/linux_devtools-6 ссылки на уязвимые версии пакетов. Об обновлении коллекции портов при помощи cvsup можно прочесть в "FreeBSD Handbook".
25
26Предполагается, что в системе установлены bzip2 и unzip. Если у Вас одна из последних версий FreeBSD-4.x, или FreeBSD-5.x, то bzip2 уже есть в системе, если нет, то необходимо установить его из коллекции портов, выполнив следующее:
27
28# cd /usr/ports/archivers/bzip2 && make install clean && rehash
29
30Для установки unzip выполните следующие команды:
31
32# cd /usr/ports/archivers/unzip && make install clean && rehash
33
34Предполагается, что в корневой директории существует символическая ссылка /compat, указывающая на директорию /usr/compat. Проверьте это командой,
35
36# ls -l /compat
37
38Если выдается что-то вроде
39
40lrwxr-xr-x 1 root wheel 11 6 Dec 13:18 /compat -> /usr/compat
41значит, все нормально, если команда выдала
42``ls: /compat: No such file or directory''
43то создайте ссылку, следующим образом,
44# ln -s /usr/compat /compat
45
46
472\. Закачаем все необходимые файлы для установки Oracle8i
48Закачаем все необходимые файлы для установки Oracle8i и положим их в директорию /usr/oinstall, которую необходимо создать.
49
50# mkdir /usr/oinstall
51
52# cd /usr/oinstall
53
54Итак, нужны следующие файлы:
55
56linux81701.tar (549867520 Б) - дистрибутив Oracle8i Enterprise Edition Release 3 (8.1.7.0.1) for Linux (Intel). http://otn.oracle.com/software/products/oracle8i/content.html
57
58procps-2.0.4-2.i386.rpm (134767 Б) - содержит некоторые системные утилиты необходимые Oracle8i. ftp://ftp.redhat.com/pub/redhat/linux/6.1/en/os/i386/RedHat/RPMS/procps-2.0.4-2.i386.rpm
59
60jre118_v3-glibc-2.1.3.tar.bz2 (7156122 Б) - дистрибутив JRE версии 1.1.8 от blackdown.org. Список FTP-серверов, откуда можно закачать дистрибутив, находится на http://blackdown.org/
61
62p2376472_8174_LINUX.zip (134488247 Б) - кумулятивный патч, устраняющий довольно большое количество различных ошибок в Oracle8i (8.1.7.0) и поднимающий Oracle8i до версии 8.1.7.4. На текущий момент это патч доступен http://metalink.oracle.com/, доступ на этот ресурс является платным. Но при желании найти этот файл в Internet не составит труда. Ведь у Вас "карты в руках" - имя файла. ;-) В крайнем случае, можно поднять Oracle8i до версии 8.1.7.3, этот кумулятивный патч доступен на официальном FTP-сервере Oracle Corporation и на текущий момент бесплатный. Файл p2189751_8173_LINUX.zip (121801951 Б) можно загрузить по ссылке на директорию с FTP-сервера ftp://oracle-ftp.oracle.com/server/patchsets/unix/LINUX/817patchsets/. О выходе новых кумулятивных патчей всегда можно узнать на странице http://otn.oracle.com/support/patches.htm
633\. Устанавливаем своп размером в 1 ГБ
64Если своп равен 1 ГБ или больше, то не выполняйте этот пункт.
65
66Если же размер свопа меньше 1 ГБ и на дисках Вашей машины нет неразмеченного места для его создания, то с помощью команды df определите, в какой файловой системе у Вас есть 1 ГБ свободного места, и создайте файл swap. Например, для размещения файла swap в директории /usr, выполним следующие команды:
67
68# cd /dev
69
70# sh ./MAKEDEV vn0
71
72# dd if=/dev/zero of=/usr/swap bs=1024k count=1024
73
74# chmod 0600 /usr/swap
75
76# echo 'swapfile="/usr/swap"' >> /etc/rc.conf
77
78Примечание: Если Вы производите установку на FreeBSD-5.x, то команды cd /dev и sh ./MAKEDEV vn0 выполнять не надо.
79
80Реально для работы лучше делать своп не в файле, а так, как это положено - выделить для этого раздел на диске. Поэтому в будущем решите этот вопрос, но до момента, когда у Вас появится дополнительный диск, можно использовать и этот вариант.
814\. Инсталлируем emulators/linux_base-6 и devel/linux_devtools-6
82Порты emulators/linux_base-6 и devel/linux_devtools-6 должны установить пакеты от дистрибутива Linux Red Hat 6.1 и частично от 6.2.
83
84# cd /usr/ports/emulators/linux_base-6
85
86# make install clean && rehash
87
88# cd /usr/ports/devel/linux_devtools-6
89
90# make install clean && rehash
91
92Будьте внимательны! В коллекции портов имеются порты, устанавливающие пакеты от Linux Red Hat 7.1 emulators/linux_base и devel/linux_devtool-7 - эти пакеты не подойдут! Oracle8i для Linux собран с glibc-2.1.3, именно эта версия glibc имеется в портах на момент написания этой статьи.
93
94$FreeBSD: ports/emulators/linux_base-6/Makefile,v 1.70 2003/04/08 21:47:06 trevor Exp $
95
96$FreeBSD: ports/devel/linux_devtools-6/Makefile,v 1.34 2003/02/20 17:06:51 knu Exp $
975\. Дополнительно устанавливаем пакет procps-2.0.4-2.i386.rpm
98Дополнительно к эмуляции Linux устанавливаем пакет procps-2.0.4-2.i386.rpm. Без него у Вас на FreeBSD, установщик Oracle8i не сможет нормально завершить свою работу - он попросту зависнет при попытке создания базы данных. А происходит это из-за того, что во время инсталляции вызывается утилита dbassist, которая без пакета procps-2.0.4-2.i386.rpm на FreeBSD работать не хочет. Вот чтобы этого не произошло, Вы и установите пакет procps-2.0.4-2.i386.rpm, который до этого должны были положить в директорию /usr/oinstall.
99
100# cd /usr/oinstall
101
102# rpm -U --ignoreos --root /compat/linux --dbpath /var/lib/rpm --nodeps --replacepkgs procps-2.0.4-2.i386.rpm
1036\. Включаем поддержку совместимости с Linux.
104Включаем поддержку совместимости с Linux. В файле /etc/rc.conf нужно добавить строку linux_enable="YES"
105
106# echo 'linux_enable="YES"' >> /etc/rc.conf
1077\. Создаем символическую ссылку /compat/linux/etc/mtab
108Создаем символическую ссылку, которая будет необходима Oracle8i для получения информации о Вашем (-их) диске (-ах).
109
110# ln -s /etc/fstab /compat/linux/etc/mtab
1118\. Вносим изменения в /etc/fstab
112В файле /etc/fstab после строки, где описывается proc, добавьте в текстовом редакторе строку
113
114linproc /compat/linux/proc linprocfs rw 0 0
115
116и сохраните файл.
1179\. Создаем утилиту arch
118Создаем утилиту arch, которая в Linux используется для вывода информации об архитектуре машины.
119
120# echo 'echo i686' > /compat/linux/bin/arch
121
122# chown root:wheel /compat/linux/bin/arch
123
124# chmod 0755 /compat/linux/bin/arch
12510\. Устанавливаем JRE от blackdown.org
126Устанавливаем JRE от blackdown.org в /compat/linux/usr/local
127
128# cd /compat/linux/usr
129
130# mkdir local
131
132# cd local
133
134# tar --bzip2 -xvf /usr/oinstall/jre118_v3-glibc-2.1.3.tar.bz2
135
136# cd jre118_v3
137
138# ln -s . linux
139
140# cd bin
141
142# ln -s i686 linux
143
144# cd ../lib
145
146# ln -s i686 linux
147
148Такое количество символических ссылок объясняется тем, что некоторые утилиты Oracle8i используют эти пути, а раз используют, значит, они должны быть для того, чтобы обеспечить нормальную работу этих утилит.
14911\. Устанавливаем JDK 1.2.2 от Sun Microsystems, Inc.
150Устанавливаем JDK 1.2.2 для Linux от Sun Microsystems, Inc. Дистрибутив JDK придется загрузить самостоятельно и положить в директорию /usr/ports/distfiles. Чтобы узнать, откуда его можно загрузить, зайдите в директорию порта java/linux-sun-jdk12 и выполните команду make с целью fetch, в ответ Вы получите сообщение, разъясняющее, откуда можно загрузить дистрибутив. После загрузки установка происходит обычным для коллекции портов способом.
151
152# cd /usr/ports/java/linux-sun-jdk12 && make install clean && rehash
153
154Oracle8i будет видеть JDK как /usr/local/java, но мы устанавливаем дистрибутив Oracle8i под Linux, поэтому необходимо создать путь /compat/linux/usr/local/java
155
156# cd /compat/linux/usr/local
157
158# ln -s /usr/local/linux-sun-jdk1.2.2 java
15912\. Распаковываем дистрибутив Oracle8i
160Распаковываем дистрибутив Oracle8i и проводим над ним небольшие манипуляции.
161
162# cd /usr/oinstall
163
164# tar -xfv linux81701.tar
165
166# cd Disk1
167
168# mv * /usr/oinstall
169
170# cd ..
171
172# rm -rf Disk1
173
174В результате данных действий получили распакованный дистрибутив Oracle8i в директории /usr/oinstall/Disk1, а чтобы в будущем нажимать меньше клавиш, содержимое Disk1 перенесли прямо в /usr/oinstall, а директорию Disk1 удалили.
17513\. Вносим изменения в дистрибутив Oracle8i
176Вносим в дистрибутив Oracle8i исправления, при этом делая копию оригинальных файлов.
177
178Необходимо, чтобы в файле /usr/oinstall/runInstaller переменной THREADS_FLAG было присвоено значение green, а не native.
179
180# cd /usr/oinstall
181
182# sed -i .orig -e "s|THREADS_FLAG=native|THREADS_FLAG=green|g" runInstaller
183
184Теперь отредактируем файл /usr/oinstall/install/oraparam.ini, заменив строку JRE_LOCATION=../stage/Components/oracle.swd.jre/1.1.8/1/DataFiles/Expanded/linux на JRE_LOCATION=/usr/local/jre118_v3/linux
185
186# cd install
187
188# sed -i .orig -e "s|\\.\\./stage/Components/oracle\\.swd\\.jre/1\\.1\\.8/1/DataFiles/Expanded/linux|/usr/local/jre118_v3/linux|g" oraparam.ini
189
190Конечно, не обязательно применять для изменения строк sed, Вы можете исправить файлы в любом удобном для Вас текстовом редакторе.
19114\. Распаковываем кумулятивный патч
192Распаковываем в директорию /usr/oinstall/patch, которая появилась после распаковки дистрибутива Oracle8i, кумулятивный патч, находящийся в файле p2376472_8174_LINUX.zip. Файл zip-архива содержит в себе два файла: lnx32_8174_patchset.tar и README.html.
193
194# cd /usr/oinstall
195
196# unzip p2376472_8174_LINUX.zip
197
198# cd patch
199
200# tar -xvf ../lnx32_8174_patchset.tar
201
202# rm ../lnx32_8174_patchset.tar
203
204Прочтите файл README.html, чтобы быть в курсе того, что исправляет данный патч.
20515\. Создаем группы dba и oinstall
206Создаем группы dba c GID 94 и oinstall c GID 95.
207
208# pw groupadd -n dba -g 94
209
210# pw groupadd -n oinstall -g 95
21116\. Создаем пользователя oracle и назначаем ему пароль
212Создаем пользователя oracle c UID 94 и помещаем его в группы dba, oinstall и wheel, а командный интерпретатор дадим /compat/linux/bin/bash.
213
214# pw useradd -n oracle -u 94 -c "Oracle Daemon" -d /usr/oracle -s /compat/linux/bin/bash -g dba -G oinstall,wheel
215
216В группу wheel мы помещаем пользователя oracle, чтобы обеспечить небольшой комфорт при инсталляции. Во время установки будут периодически требоваться права суперпользователя, поэтому надо разрешить пользователю oracle выполнять команду su для получения прав суперпользователя. Получать права суперпользователя с помощью команды su, могут только члены группы wheel, поэтому нам и необходимо сделать на время инсталляции, пользователя oracle членом этой группы.
217
218Можно конечно выполнять команды, требующие прав суперпользователя, непосредственно войдя в систему суперпользователем с другой консоли, но на мой взгляд, команда su выполненная в окне xterm более комфортна, так как все на одном экране в X Window System и все под рукой, а это значит меньше шансов сделать неверные действия. :-)
219
220Когда установка будет закончена, мы уберем пользователя oracle из группы wheel. А пока назначаем пароль для пользователя oracle. Не стоит пренебрегать мерами безопасности, поэтому не надо вводить пустой или легко подбираемый пароль пользователю oracle.
221
222# passwd oracle
22317\. Создаем директорию для установки Oracle8i.
224Мы будем устанавливать Oracle8i в соответствии с рекомендациями Optimal Flexible Architecture (OFA). Я думаю не стоит игнорировать эти рекомендации, практика эксплуатации продуктов Oracle показывает, что в будущем это позволит эффективно использовать и обновлять их, а также гибко управлять постоянно растущими объемами информации. Если Вы еще не знаете, что такое OFA, то документация, идущая вместе с дистрибутивом Oracle8i, поможет Вам в этом разобраться.
225
226Согласно рекомендации желательно, чтобы установка производилась на отдельную файловую систему, к тому же желательно, чтобы эта файловая система была расположена на отдельном диске и примонтирована в точку монтирования, расположенную в корне. Вот мы сейчас и создадим эту точку монтирования.
227
228# mkdir /m01
229
230# chmod 0775 /m01
231
232# chown oracle:oinstall /m01
233
234Дальше в этом пункте статьи пути тех, у кого есть возможность создания отдельной файловой системы и тех, у кого такой возможности пока нет, на время разойдутся.
235
236Если у Вас есть неразмеченное место, то создайте новую файловую систему UFS, размером не меньше 2 ГБ. Описание процесса создания новой файловой системы выходит за рамки этой статьи, Вы должны выполнить это самостоятельно. После создания файловой системы запишем информацию о новой файловой системе в файл /etc/fstab, с точкой монтирования /m01.
237
238# echo "/dev/device /m01 ufs rw 2 2" >> /etc/fstab
239
240На место /dev/device, Вы должны подставить файл устройства партиции новой файловой системы!
241
242Теперь надо примонтировать новую файловую систему и создать в ней директорию app.
243
244# mount /m01
245
246# mkdir /m01/app
247
248# chmod 0775 /m01/app
249
250# chown oracle:oinstall /m01/app
251
252Вот и все, можете переходить к следующему пункту статьи, дальше будут рекомендации для тех, у кого нет возможности создания дополнительной файловой системы.
253
254Если возможности для создания новой файловой системы нет, в связи с отсутствием неразмеченного места на дисках, то придется пойти другим путем, смонтируем директорию /compat/linux/m01 в директорию /m01, в этом нам поможет замечательная команда mount_null на FreeBSD-4.x или команда mount_nullfs на FreeBSD-5.x.
255
256На FreeBSD-4.x выполняем:
257
258# echo "/compat/linux/m01 /m01 null rw 0 0" >> /etc/fstab
259
260На FreeBSD-5.x выполняем:
261
262# echo "/compat/linux/m01 /m01 nullfs rw 0 0" >> /etc/fstab
263
264Остальные команды будут одинаковы, как для FreeBSD-4.x, так и для FreeBSD-5.x.
265
266# mkdir /compat/linux/m01 /compat/linux/m01/app
267
268# chmod -R 0775 /compat/linux/m01
269
270# chown -R oracle:oinstall /compat/linux/m01
271
272# mount /m01
273
274Сделайте именно так, как рекомендовано, смонтируйте директорию /compat/linux/m01 в директорию /m01. Не делайте /m01 символической ссылкой на директорию /compat/linux/m01. Если Вас интересует почему, то рекомендую почитать, как и почему работают Linux-приложения на FreeBSD, а потом посмотреть, какой размер корневой файловой системы у Вашей FreeBSD. Вероятно, если Вы устанавливали FreeBSD в здравом уме, то это 192 МБ? Ну максимум 256 МБ? Этого очень мало для установки Oracle8i. :-) Установщик Oracle8i получит именно эту информацию, о файловой системе в которой расположена директория /m01, и откажется устанавливать туда что-либо. Поэтому мы и смонтировали директорию в директорию. Теперь для Вашей системы в директории /m01 отдельная файловая система.
275
276Потом, когда Вы обзаведетесь дополнительным диском и создадите на нем отдельную файловую систему, будет достаточно соответствующе отредактировать /etc/fstab, смонтировать эту файловую систему в /m01 и перенести содержимое /compat/linux/m01 в /m01, а директорию /compat/linux/m01 удалить. Возможно, при этом Вы первый раз испытаете преимущество OFA. ;-)
27718\. Создаем домашнюю директорию для пользователя oracle
278Создаем домашнюю директорию для пользователя oracle.
279
280# mkdir /usr/oracle
281
282# cd /usr/oracle
283
284В любом текстовом редакторе наберите БЕЗ ОШИБОК текстовый файл с содержимым приведенным ниже, и сохраните этот файл как /usr/oracle/.profile
285
286ORACLE_BASE=/m01/appORACLE_HOME=$ORACLE_BASE/product/oracle/8.1.7ORACLE_DOC=$ORACLE_HOME/docORACLE_SID=OSIDexport ORACLE_HOME ORACLE_BASE ORACLE_SID ORACLE_DOCNLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1#NLS_LANG=AMERICAN_CIS.UTF8#NLS_LANG=AMERICAN_CIS.CL8ISO8859P5#NLS_LANG=AMERICAN_CIS.CL8MACCYRILLIC#NLS_LANG=AMERICAN_CIS.CL8MSWIN1251#NLS_LANG=AMERICAN_CIS.CL8KOI8RORA_NLS32=$ORACLE_HOME/ocommon/nls/admin/dataORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/dataLD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/precomp/libexport NLS_LANG ORA_NLS32 ORA_NLS33 LD_LIBRARY_PATHJRE_LOCATION=/usr/local/jre118_v3PERL5LIB=$ORACLE_HOME/Apache/perl/lib/5.00503TMPDIR=/var/tmpPATH=$PATH:$ORACLE_HOME/binexport JRE_LOCATION PERL5LIB TMPDIR PATHumask 022unset LANGunset LC_ALL
287
288Если Вы собираетесь использовать систему управления реляционной базой данных (СУРБД) Oracle8i на территории России, то трудность в понимании этого файла, видимо, вызовет только значение $NLS_LANG. Уж в чем "повезло" русским, так это с количеством различных наборов символов. :-) Поэтому маленькое разъяснение не помешает.
289
290Переменная окружения $NLS_LANG принимает значения LANGUAGE_TERRITORY.CHARACTERSET, где LANGUAGE - указывает на язык сообщений; TERRITORY - указывает, как нужно представлять даты, разделители и т. п., а также определяет сортировку по умолчанию; CHARACTERSET - указывает язык, в котором работает клиент и желает видеть и вводить данные.
291
292Для того чтобы СУРБД Oracle8i выдавала сообщения на русском языке можно определить значение LANGUAGE равным RUSSIAN.
293
294Значение TERRITORY для стран СНГ равно CIS. Сортировку по умолчанию можно переопределить, с помощью переменной окружения $NLS_SORT.
295
296Значение CHARACTERSET для русских кодировок может принимать значения: CL8ISO8859P5, RU8PC866, RU8BESTA, RU8PC855, CL8MACCYRILLIC, CL8MACCYRILLICS, CL8MSWIN1251, CL8KOI8R, UTF8.
297
298Примечание: В случае если Вы собираетесь использовать Oracle Internet Directory (OID), то Ваш выбор должен обязательно остановиться на UTF8.
29919\. Создаем файл /usr/oracle/root
300В текстовом редакторе наберите текст, приведенный ниже, и сохраните его как файл /usr/oracle/root.
301
302#!/bin/sh# Переходим в директорию $ORACLE_HOME и делаем копию файла root.shcd $ORACLE_HOMEcp root.sh root.sh.orig# Вносим исправления в файл root.shsed -e 's|/bin/chown|/usr/sbin/chown|g' root.sh.orig \| sed -e 's|/usr/bin/test|/bin/test|g' \| sed -e 's|/bin/awk|/usr/bin/awk|g' \| sed -e 's|/bin/grep|/usr/bin/grep|g' \| sed -e 's|/usr/local/bin/sed|/usr/bin/sed|g' \| sed -e 's|RMF=/bin/rm -f|RMF="/bin/rm -f"|g' \| sed -e "s|) '{print \$1}\\`|) '{print \$1}'\\`|g" > root.sh# Удаляем файл root.sh.origrm root.sh.orig# Переходим в $ORACLE_HOME/bin и вносим изменения в netasst и в netcacd $ORACLE_HOME/bincp -p netasst netasst.origcp -p netca netca.origsed -e 's|\$JRE -classpath|\$JRE -native -classpath|g' netasst.orig > netasstsed -e 's|\$JRE -classpath|\$JRE -native -classpath|g' netca.orig > netca# Вносим исправления во все файлы сообщений СУРБД Oracle8i отвечающих за сообщения на русском языкеecho 'echo $1cp -p $1 $1.origprintf "[内容]343137330400[内容]0[内容]0[内容]0[内容]0" > $1dd if=$1.orig of=$1 bs=16 seek=1 skip=1' > /tmp/$$.ru.msb.shfind $ORACLE_HOME -follow -name "*ru.msb" -exec /bin/sh /tmp/$$.ru.msb.sh {} ";"rm /tmp/$$.ru.msb.sh
303
304Этот файл, как и пакет procps-2.0.4-2.i386.rpm, очень сильно повлияет на установщик Oracle8i, чтобы обеспечить его нормальную работу.
305
306Во время установки Oracle Universal Installer будет просить Вас запустить файл $ORACLE_HOME/root.sh, который содержит неправильные пути к командам с точки зрения FreeBSD, и две синтаксические ошибки с точки зрения командного интерпретатора sh. Вот перед запуском $ORACLE_HOME/root.sh, Вы и запустите /usr/oinstall/root, который исправит все эти ошибки.
307
308Не путайте скрипт $ORACLE_HOME/orainstRoot.sh, который Вам тоже еще предстоит запускать, и скрипт $ORACLE_HOME/root.sh, это два разных файла!
309
310Изменения в netasst и в netca, которые также вносит /usr/oracle/root, делаются для того, чтобы обеспечить нормальную работу Net8 Configuration Assistant на FreeBSD. Скрипты netasst и netca во время установки, запуская JRE без ключа -native, приводят к неверной работе Net8 Configuration Assistant, что влечет за собой зависание установщика Oracle8i. Следовательно, необходимо позаботиться, чтобы этого не произошло, что и сделает /usr/oinstall/root.
311
312В файлах с расширением *.msb сохранены сообщения от различных компонентов СУРБД Oracle8i, которые будут выдаваться во время работы с СУРБД. Изменения в файлы *ru.msb вносятся для того, чтобы сообщения на русском языке, выдаваемые СУРБД Oracle8i во время ее работы, правильно перекодировались на стороне клиента. То есть, если Вы решите назначить переменную окружения $NLS_LANG c LANGUAGE равной RUSSIAN, то СУРБД будет разговаривать на русском языке, но без изменения файлов *ru.msb, эти сообщения будут в неверной кодировке. СУРБД Oracle8i может разговаривать на самых различных языках, достигается это за счет того, что СУРБД в зависимости от значения LANGUAGE в переменной окружения $NLS_LANG использует для сообщений те msb-файлы, которые предназначены для этого языка. Если на какой-то компонент СУРБД Oracle8i отсутствуют msb-файлы с требуемым языком, то СУРБД игнорирует значение LANGUAGE в переменной окружения $NLS_LANG и использует для выдачи сообщений msb-файлы для английского языка. Первые 16 байт каждого msb-файла несут информацию о кодировке в которой сохранены сообщения в самом msb-файле, и файлы *ru.msb отвечающие за сообщения на русском языке, здесь не исключение. Да вот беда, набор символов в России не один, и даже не два... :-) И вот с русскими msb-файлами, приключилась неприятная история в недрах корпорации Oracle. В файлах, *ru.msb первые 16 байт, должны иметь следующую последовательность:
313
314для CP1251
315
31603 0C 23 0D 13 17 09 0E 1C 1D 20 1C 00 00 00 00
317
318для ISO8859-5
319
32003 0C 23 09 13 0F 23 23 20 24 10 20 00 00 00 00
321
322для CP866
323
32412 15 23 10 03 23 21 21 00 00 00 00 00 00 00 00
325
326Сообщения перекодируются из кодировки msb-файла в кодировку, указанную в части CHARACTERSET, переменной окружения $NLS_LANG, и если заголовок msb-файла неверный, то вместо нужного текста идет "китайская грамота". Именно это и произошло с файлами *ru.msb, сообщения в этих файлах сохранены в кодировке ISO8859-5, а первые 16 байт говорят, что сообщения в CP1251. Поэтому скрипт /usr/oracle/root и предусматривает изменение в файлах *ru.msb первых 16 байт, записывая в начало каждого русского msb-файла правильную последовательность байт, которые информируют СУРБД Oracle8i, что исходные сообщения в кодировке ISO8859-5. Даже если Вы не собираетесь устанавливать поддержку русского языка, то как минимум один msb-файл для каждого языка все равно будет установлен в директорию $ORACLE_HOME/oracore/mesg, в том числе и один неправильный msb-файл русских сообщений.
327
328Однако до момента, когда будет нужно запустить /usr/oinstall/root, придется еще поработать, поэтому пока забудем про этот файл.
32920\. Передадим директорию /usr/oracle пользователю oracle
330Передаем директорию /usr/oracle и все ее содержимое в распоряжение пользователю oracle.
331
332# chmod 0755 /usr/oracle
333
334# chmod 0644 /usr/oracle/.profile
335
336# chmod 0644 /usr/oracle/root
337
338# chown -R oracle:dba /usr/oracle
33921\. Создаем конфигурацию нового ядра
340Создаем конфигурацию нового ядра с поддержкой System V. Необходимо, чтобы в новой конфигурации обязательно присутствовали следующие параметры:
341
342maxusers 512options NBUF=2048options MAXDSIZ="(1024*1024*1024)"options MAXSSIZ="(1024*1024*1024)"options DFLDSIZ="(1024*1024*1024)"# System V shared memory and tunable parametersoptions SYSVSHM # include support for shared memoryoptions SHMMAXPGS=65536 # max amount of shared memory pages (4k on i386)options SHMMIN=2 # min shared memory segment size (bytes)options SHMMNI=256 # max number of shared memory identifiersoptions SHMSEG=256 # max shared memory segments per process# System V semaphores and tunable parametersoptions SYSVSEM # include support for semaphoresoptions SEMMAP=512 # amount of entries in semaphore mapoptions SEMMNI=512 # number of semaphore identifiers in the systemoptions SEMUME=512 # max number of undo entries per processoptions SEMMNS=1024 # number of semaphores in the systemoptions SEMMNU=512 # number of undo structures in the systemoptions SEMMSL=256 # max number of semaphores per idoptions SEMOPM=256 # max number of operations per semop call# System V message queues and tunable parametersoptions SYSVMSG # include support for message queuesoptions MSGMNB=8192 # max characters per message queueoptions MSGMNI=256 # max number of message queue identifiersoptions MSGSEG=8192 # max number of message segments in the systemoptions MSGSSZ=16 # size of a message segment MUST be power of 2options MSGTQL=128 # max amount of messages in the system
343
344Примечание: На FreeBSD-5.x опциям MAXDSIZ, MAXSSIZ и DFLDSIZ необходимо присвоить значения следующим образом:
345
346options MAXDSIZ=(1024UL*1024*1024)options MAXSSIZ=(1024UL*1024*1024)options DFLDSIZ=(1024UL*1024*1024)
347
348Для названия конфигурации ядра выберем букву "K", от слова "kernel", и текущую дату в формате год, месяц, день (YYYYMMDD):
349
350# cd /usr/src/sys/i386/conf
351
352# cp GENERIC K20021204
353
354Правим конфигурацию /usr/src/sys/i386/conf/K20021204 в любом удобном для Вас редакторе, добавляя нужное и удаляя все не нужное. Но опции, приведенные выше, должны присутствовать обязательно!
355
356СУРБД Oracle требовательна к количеству разделяемой системной памяти, значение которой задается опцией ядра SHMMAX. Совокупность процессов СУРБД Oracle и структур данных, размещенных в разделяемой системной области, называется экземпляром. Согласно рекомендациям по использованию СУРБД Oracle8i, в ядре необходимо выставить опцию ядра SHMMAX в байтах в размере общего объема физической оперативной памяти, умноженной на коэффициент, равный 0.5. Если значение SHMMAX будет не достаточно, то экземпляр Oracle8i просто не будет создан! Но в ядре FreeBSD данная опция ядра зависит от опции SHMMAXPGS по формуле:
357
358SHMMAX = SHMMAXPGS * PAGE_SIZE + 1
359
360
361
362Где PAGE_SIZE равно 4096 Б для i386, поэтому, чтобы сделать как рекомендовано в документации по Oracle8i, необходимо значение SHMMAXPGS вычислить по формуле,
363
364SHMMAXPGS = k * RAM * 1024 / PAGE_SIZE
365
366Где RAM - физическая оперативная память в МБ; k - коэффициент, равный 0.5; PAGE_SIZE - размер одной страницы в КБ, PAGE_SIZE = 4 КБ для i386.
367
368Например, для машины с памятью 512 МБ, SHMMAXPGS = 0.5 * 512 * 1024 / 4 = 65536.
369
370В случае, если предполагается, что СУРБД Oracle, будет работать на специально выделенном для этого сервере, и кроме нее никаких других серьезных сервисов запущено не будет, то коэффициент k, можно увеличивать до 0.75, это 3/4 от физической оперативной памяти.
371
372Для того, чтобы понять какое влияние оказывают некоторые значения опций ядра на работу СУРБД Oracle, обязательно ознакомьтесь с документацией, которая идет вместе с дистрибутивом Oracle8i.
37322\. Компилируем ядро с новой конфигурацией
374Компилируем ядро с новой конфигурацией (K20021204). Если что-то не пойдет при сборке ядра, внимательно изучите файл /usr/src/buildkernel.log и после этого ищите ошибки в Вашей конфигурации ядра.
375
376# cd /usr/src
377
378# make buildkernel KERNCONF=K20021204 |& tee buildkernel.log
37923\. Устанавливаем новое ядро
380Устанавливаем новое ядро. Результат установки будет сохранен в файле /usr/src/installkernel.log
381
382# cd /usr/src
383
384# make installkernel KERNCONF=K20021204 |& tee installkernel.log
38524\. Удаляем файлы buildkernel.log и installkernel.log
386Если компиляция и установка ядра выполнены успешно, то файлы buildkernel.log и installkernel.log можно удалить.
387
388# rm /usr/src/buildkernel.log
389
390# rm /usr/src/installkernel.log
39125\. Директории /tmp, /usr/tmp, /var/tmp
392Сделаем так, чтобы /tmp и /usr/tmp указывали на /var/tmp. Перед тем, как начать манипуляции с директорией /tmp, завершите все процессы в системе, которые создали в ней свои временные файлы. То же самое касается и /usr/tmp. Как правило, /tmp это отдельная файловая система с весьма ограниченным размером, если у Вас именно так, то размонтируйте ее, удалите директорию /tmp и закомментируйте файловую систему /tmp в файле /etc/fstab или укажите другую точку монтирования для освободившейся файловой системы. ОБЯЗАТЕЛЬНО ОТРЕДАКТИРУЙТЕ /etc/fstab! Если у Вас это обычная директория, то команду umount выполнять не надо и править /etc/fstab, естественно вам не придется.
393
394# umount /tmp
395
396Удаляем /tmp и /usr/tmp
397
398# rm -rf /tmp
399
400# rm -rf /usr/tmp
401
402Создаем символические ссылки на /var/tmp
403
404# ln -s /var/tmp /tmp
405
406# ln -s /var/tmp /usr/tmp
407
408Гарантируем права 0777 на директорию /var/tmp, а владельцем этой директории назначим суперпользователя и группу wheel.
409
410# chmod 0777 /var/tmp
411
412# chown root:wheel /var/tmp
41326\. Перезагрузка системы
414Итак, Вы подготовили систему для установки Oracle8i - установили все необходимые программы и подготовили дистрибутив Oracle8i, внесли изменения в некоторые конфигурационные файлы системы, установили новое ядро, следовательно, необходимо перегрузиться.
415
416# reboot
417
418В случае, если Ваше новое ядро откажется загружаться, обратитесь к "FreeBSD Handbook", чтобы выяснить как восстановить и загрузить старое ядро, там это подробно расписано. Затем ищите ошибки в своей конфигурации ядра, исправляйте их и собирайте ядро заново (см. п. 21, п. 22 и п. 23).
419
420Если Ваша система загрузилась с новым ядром, то можете поздравить себя - половину пути Вы уже прошли.
421
422Новые опции ядра можно посмотреть, используя команду sysctl.
423
424# sysctl -a | grep kern.ipc | more
42527\. Останавливаем веб-сервер Apache
426Если у Вас установлен и запущен веб-сервер Apache, лучше его пока остановить!
427
428# [ -r /var/run/httpd.pid ] && /usr/local/sbin/apachectl stop
429
430Возможно, Ваш apachectl находится в другой директории, а файл процесса находится в другом месте, выясните это сами и остановите Apache.
431
432Сразу оговорюсь, если Вы в дальнейшем собираетесь использовать веб-сервер поставляемый с Oracle8i, то тот Apache которой у Вас уже есть в системе лучше не запускать, когда работает веб-сервер Oracle8i. Или убирайте из своей системы Ваш Apache вообще, или сделайте так, чтобы он не мог стартовать автоматически при перезагрузке системы. То же самое относится и к OpenLDAP в случае использования Oracle Internet Directory (OID).
43328\. Запускаем X Window System
434Теперь необходимо войти в X Window System под пользователем oracle. В качестве оконного менеджера для пользователя oracle сойдет twm. К тому же, twm потребляет очень мало системных ресурсов, которые очень сильно пригодятся при установке Oracle8i.
435
436В своей системе я использую xdm для входа в X Window System на 8-ой виртуальной консоли, поэтому мне было достаточно нажать Alt+F9, а затем ввести логин и пароль пользователя oracle.
43729\. Читаем переменные окружения пользователя oracle
438Запустите xterm, если он не запустился у Вас автоматически, и выполните в нем команду bash с ключем -login.
439
440% bash -login
441
442После выполнения данной команды приглашение в командной строке должно смениться, показывая пользователя oracle, имя хоста и текущую директорию. Чтобы удостовериться, что все переменные окружения прочитаны из файла /usr/oracle/.profile, выполните в этом же окне xterm команду set и убедитесь, что все корректно.
443
444% set | more
44530\. Откроем окно xterm для суперпользователя
446Запускаем еще одно окно xterm, из того, где мы выполняли bash -login. Запуск именно из этого окна необходим для того, чтобы суперпользователю достались все переменные окружения пользователя oracle. Наличие этих переменных в окружении суперпользователя, в свою очередь избавит Вас от утомительного набирания путей к командам, выполнение которых будет требовать установщик Oracle8i. :-)
447
448% xterm &
449
450Теперь в новом окне xterm выполним команду su. Вам будет предложено ввести пароль суперпользователя, после ввода которого Вы получите командный интерпретатор на правах суперпользователя.
451
452% su
453
454Мы создали этот сеанс суперпользователя вовсе не из праздных целей, он нам еще очень сильно пригодится во время установки Oracle8i. Теперь на время забудем про это окно xterm и переключимся обратно в окно xterm пользователя oracle.
45531\. Запускаем установщик Oracle8i
456% cd /usr/oinstall
457
458% ./runInstaller
459
460Запуск установщика Oracle8i на FreeBSD сравним, пожалуй, с запуском двигателя машины, когда температура окружающей среды минус 30 градусов по Цельсию и ниже. С первого раза может и не завестись. ;-) Даже если все рекомендации, предложенные выше, выполнены правильно, то иногда, хотя и очень редко, установщик Oracle8i может зависнуть при прорисовке заставки. Это проявляется в виде прямоугольника серого цвета, появляющегося на экране, с надписью "Loading...", после чего можно подождать, и если заставка так и не прорисовывается, то вернитесь в окно xterm, с помощью команды ps выясните номера процессов runInstaller и jre, и завершите их при помощи команды kill.
461
462% ps | grep "jre\|runInstaller"
463
464% kill PID PID
465
466Затем удалите в директории /tmp все файлы и директории, которые успел создать установщик Oracle8i. Имена файлов и директорий, которые необходимо удалить, можно выяснить по владельцу этих файлов. Они будут принадлежать пользователю oracle. Для удаления Вы можете выполнить следующее:
467
468% cd /tmp && find -d . -user oracle \\( -type f -or -type d \\) -delete -print
469
470Затем снова перейдите в директорию /usr/oinstall и запустите скрипт runInstaller. Со второго раза установщик, как правило, запускается. В крайнем случае, повторите это в третий раз. Логического объяснения этому явлению я пока найти не могу, однако и не считаю это мистикой, хотя очень на то похоже. Эта проблема встречается не только на FreeBSD, на некоторых дистрибутивах Linux полностью аналогичная ситуация. Условия для запуска в первый и второй раз абсолютно равные, но такая вот чертовщина, иногда случается.
471
472Если ни со второго, ни с третьего раза, установщик Oracle8i так и не запустился, то видимо проблема не в "запуске двигателя при сильном морозе", возвращайтесь к началу статьи и последовательно проверяйте, где Вы ошиблись.
473
474Ну а если Вы увидели сначала заставку Oracle Universal Installer, а затем первый экран с приветствием, значит все замечательно. Господа из Oracle Corporation, видимо предчувствовали, что любой системный администратор будет добираться до этого экрана очень долго, поэтому и решили для начала поздороваться с Вами, чтобы разрядить напряженную обстановку и немного расслабить Вас. ;-)
475
476Рис. 1. Первый экран, до которого мы так долго добирались! :-)
477
478
479
480Однако, не будем здесь задерживаться очень долго, поэтому щелкаем мышью по кнопке Next.
48132\. Отвечаем на вопросы Oracle Universal Installer
482На втором экране Вас попросят вести пути (File Locations). Пути к тому, что Вы собираетесь устанавливать (Source) и куда (Destination). Эти пути уже заполнены, значение того, что мы собираемся устанавливать взято из переменной $SOURCE назначенной в файле /usr/oinstall/install/oraparam.ini, а значение куда устанавливать, взято из переменной окружения $ORACLE_HOME, пользователя oracle. Так как в полях стоят нужные для нас значения, то переходим к следующему экрану, с помощью кнопки Next.
483
484Далее Вас попросят ввести группу пользователей (UNIX Group Name) на Вашей машине, которые будут иметь право обновлять продукты Oracle. Введем группу oinstall и щелкнем мышью по кнопке Next.
485
486После этого Oracle Universal Installer понадобятся права суперпользователя для запуска скрипта orainstRoot.sh в директории, на которую указывает $ORACLE_HOME. Запуск этого скрипта необходим, чтобы создать файл /etc/oraInst.loc. В этом файле будет сохранена информация о группе, которая имеет право обновлять продукты Oracle на Вашей системе, и путь к директории, где будет храниться информация об установленных продуктах Oracle.
487
488Рис. 2. Oracle Universal Installer просит Вас запустить orainstRoot.sh
489
490
491
492Переключимся в окно xterm, где у нас запущен командный интерпретатор с правами суперпользователя, и выполним следующее:
493
494# $ORACLE_HOME/orainstRoot.sh
495
496# ln -s /etc/oraInst.loc /compat/linux/etc/oraInst.loc
497
498Теперь вернемся к установщику Oracle8i и нажмем кнопку Retry для продолжения инсталляции.
499
500Далее установщик спросит Вас, какой продукт Вы будете устанавливать. Выбираем Oracle8i Enterprise Edition 8.1.7.0.1 и продолжаем с помощью кнопки Next.
501
502Следующий вопрос коснется типа установки. Если Вам не нужна различная языковая поддержка для компонентов СУРБД Oracle8i, то отметим пункт типичной установки - Typical (837 MB) и нажмем Next.
503
504Если же Вам необходимо, чтобы компоненты СУРБД умели выдавать сообщения на различных языках, но Вы не желаете разбираться с выборочной установкой - Custom, то можно договориться с установщиком Oracle8i на счет языков и при типичной установке. Для этого используем выборочную установку, отмечаем - Custom и нажимаем Next, в результате чего будет предложено выбрать различные компоненты и языки. Нажимаем на кнопку Product Languages... и добавляем необходимые языки. После окончания выбора языков нужно вернуться с помощью кнопки Previous в предыдущий экран. Теперь отметим пункт типичной установки - Typical (837 MB) и нажмем Next.
505
506Если Вы точно знаете и понимаете, что Вам надо от СУРБД, то можете произвести выборочную установку Custom или минимальную Minimal (677 MB), но дальше в статье рассматривается типичная установка.
507
508После небольшой по времени сборки сведений об устанавливаемых компонентах, Oracle Universal Installer попросит Вас ввести путь к JDK. По умолчанию он предложит путь /usr/local/java, согласитесь с предложенным путем сразу, нажав Next. Помните, в п. 11 мы делали символическую ссылку /compat/linux/usr/local/java, вот именно эту ссылку мы сейчас и указали установщику Oracle8i, ведь Linux-приложениям, будет казаться, что ди</[email protected]>