---
title: Глава 11. Двоичная совместимость с Linux
part: Часть II. Общие задачи
prev: books/handbook/printing
next: books/handbook/partiii
showBookMenu: true
weight: 14
params:
  path: "/books/handbook/linuxemu/"
---

[[linuxemu]]
= Двоичная совместимость с Linux
:doctype: book
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
:sectnumoffset: 11
:partnums:
:source-highlighter: rouge
:experimental:
:images-path: books/handbook/linuxemu/

ifdef::env-beastie[]
ifdef::backend-html5[]
:imagesdir: ../../../../images/{images-path}
endif::[]
ifndef::book[]
include::shared/authors.adoc[]
include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
include::shared/attributes/attributes-{{% lang %}}.adoc[]
include::shared/{{% lang %}}/teams.adoc[]
include::shared/{{% lang %}}/mailing-lists.adoc[]
include::shared/{{% lang %}}/urls.adoc[]
toc::[]
endif::[]
ifdef::backend-pdf,backend-epub3[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]
endif::[]

ifndef::env-beastie[]
toc::[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]

[[linuxemu-synopsis]]
== Краткий обзор

FreeBSD предоставляет двоичную совместимость с несколькими другими UNIX(R)-подобными операционными системами, включая Linux. Возможно, вы спрашиваете себя, зачем FreeBSD нужно уметь работать с приложениями, написанными для Linux? Ответ на этот вопрос достаточно прост: многие компании и разработчики производят программное обеспечение только для Linux, так как эта операционная система очень быстро завоевала огромную популярность в компьютерном мире. Пользователям же FreeBSD приходится обращаться к этим компаниям и разработчикам с просьбами выпустить версии своих программ специально для FreeBSD. Проблема в том, что большинство производителей программного обеспечения не осознают, насколько бы увеличился их рынок сбыта, выпускай они также FreeBSD-версии, и продолжают разрабатывать только под Linux. Что же делать пользователям FreeBSD? В этой ситуации на помощь приходит двоичная совместимость FreeBSD с Linux.

Вкратце, эта совместимость позволяет пользователям FreeBSD работать с 90% приложений для Linux без каких-либо модификаций последних. Среди этих приложений: StarOffice(TM), Linux-версия man:getenv[3], Adobe(R) Acrobat(R), RealPlayer, VMware, Oracle(R), WordPerfect, Doom, Quake, и многие другие. Есть сведения, что в некоторых ситуациях эти Linux-программы показывали более высокую производительность при работе под FreeBSD, чем под Linux.

Конечно, существуют некоторые особенности Linux, которые не поддерживаются в полной мере под FreeBSD. Например, не будут работать приложения Linux, использующие специфичные вызовы i386(TM), такие как переключение в виртуальный режим 8086.

При чтении этой главы вы узнаете:

* Как включить двоичную совместимость с Linux в вашей системе.
* Как установить дополнительные совместно используемые (shared) библиотеки Linux.
* Как установить приложения Linux в систему FreeBSD.
* Детали реализации совместимости с Linux в ОС FreeBSD.

Перед прочтением этой главы вам потребуется:

* Узнать как устанавливать дополнительное программное обеспечение сторонних разработчиков (crossref:ports[ports, Установка приложений. порты и пакеты]).

[[linuxemu-lbc-install]]
== Установка

Двоичная совместимость с Linux не включена по умолчанию. Простейший способ включения этой функциональности заключается в загрузке KLD-объекта `linux` ("Kernel LoaDable object"). Вы можете загрузить этот модуль, набрав следующее, как пользователь `root`:

[source,shell]
....
# kldload linux
....

Если вы хотите, чтобы совместимость с Linux была включена постоянно, необходимо добавить в [.filename]#/etc/rc.conf# следующую строку:

[.programlisting]
....
linux_enable="YES"
....

Для проверки того, загружен ли модуль, может быть использована команда man:kldstat[8]:

[source,shell]
....
% kldstat
Id Refs Address    Size     Name
 1    2 0xc0100000 16bdb8   kernel
 7    1 0xc24db000 d000     linux.ko
....

Если по какой-либо причине вы не хотите или не можете загрузить KLD, вы можете статически включить поддержку Linux в ядро, добавив опцию `options COMPAT_LINUX` в файл конфигурации ядра. Затем соберите и установите новое ядро, следуя описанию в crossref:kernelconfig[kernelconfig, Настройка ядра FreeBSD].

=== Установка необходимых библиотек Linux

Установить все требуемые библиотеки можно двумя путями: либо используя порт <<linuxemu-libs-port,linux_base>>, либо установив их <<linuxemu-libs-manually,вручную>>.

[[linuxemu-libs-port]]
==== Установка с помощью порта linux_base

Этот метод является самым простым, и мы рекомендуем воспользоваться именно им. Процесс аналогичен установке любого другого порта из link:file://localhost/usr/ports/[Коллекции Портов]. Просто выполните следующие команды:

[source,shell]
....
# cd /usr/ports/emulators/linux_base-fc4
# make install distclean
....

Теперь вы можете работать с приложениями для Linux. Некоторые программы, возможно, будут сообщать о несоответствии подверсий некоторых системных библиотек. Однако обычно это не вызывает каких-либо неудобств.

[NOTE]
====
Возможно наличие нескольких версий порта package:emulators/linux_base[], соответствующих различным версиям разных дистрибутивов Linux. Вы должны установить порт, наиболее близко соответствующий требованиям приложений Linux, которые будут установлены.
====

[[linuxemu-libs-manually]]
==== Установка библиотек вручную

Если у вас не установлена коллекция портов, можно установить требуемые библиотеки вручную. Вам понадобятся совместно используемые библиотеки для Linux, которые нужны программам, и runtime-компоновщик. Вам также потребуется создать "теневой корневой каталог", [.filename]#/compat/linux#, где будут расположены Linux-библиотеки. Если Linux-программе нужно загрузить какую-либо совместно используемую библиотеку, FreeBSD сперва будет пытаться найти ее в этом дереве. Так, если программа загружает, например, [.filename]#/lib/libc.so#, FreeBSD попытается открыть [.filename]#/compat/linux/lib/libc.so#, и если такого файла не существует, будет пытаться открыть [.filename]#/lib/libc.so#. Разделяемые библиотеки должны находиться в теневом дереве, а не в каталогах, выдаваемых загрузчиком Linux `ld.so`.

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

==== Как установить дополнительные совместно используемые библиотеки

Что, если при установленном [.filename]#linux_base# порте ваше приложение все равно сообщает об отсутствии необходимой библиотеки? Как узнать, какая именно нужна библиотека и где ее взять? В принципе, есть два способа. Вам необходимо иметь привилегии пользователя `root` для их осуществления.

Если у вас есть доступ к машине, на которой установлен Linux, узнайте, какие библиотеки использует Linux-приложение, и просто скопируйте из на свою машину. Рассмотрим следующий пример:

Допустим, вы скачали по FTP Linux-версию Doom и установили ее на Linux-машине. Вы можете узнать, какие совместно используемые библиотеки нужны Doom, с помощью команды `ldd linuxdoom`:

[source,shell]
....
% ldd linuxdoom
libXt.so.3 (DLL Jump 3.1) => /usr/X11/lib/libXt.so.3.1.0
libX11.so.3 (DLL Jump 3.1) => /usr/X11/lib/libX11.so.3.1.0
libc.so.4 (DLL Jump 4.5pl26) => /lib/libc.so.4.6.29
....

Вам потребуются все файлы, перечисленные в последнем столбце. Скопируйте их в дерево [.filename]#/compat/linux# на вашей системе, а также создайте символические ссылки на эти файлы с именами из первого столбца, соответственно. В итоге, у вас в системе FreeBSD должны быть следующие файлы:

[source,shell]
....
/compat/linux/usr/X11/lib/libXt.so.3.1.0
/compat/linux/usr/X11/lib/libXt.so.3 -> libXt.so.3.1.0
/compat/linux/usr/X11/lib/libX11.so.3.1.0
/compat/linux/usr/X11/lib/libX11.so.3 -> libX11.so.3.1.0
/compat/linux/lib/libc.so.4.6.29
/compat/linux/lib/libc.so.4 -> libc.so.4.6.29
....

[NOTE]
====
Учтите, что если у вас уже есть совместно используемая библиотека Linux с соответствующим первому столбцу результатов `ldd` основным номером версии, вам не обязательно копировать файл, указанный в последнем столбце, в вашу систему. Уже существующий файл должен подойти. Рекомендуется, однако, все равно скопировать совместно используемую библиотеку, если ее версия новее. Предыдущую версию библиотеки можно удалить, если вы создали символическую ссылку на новую. Итак, если у вас в системе есть следующие библиотеки:

[source,shell]
....
/compat/linux/lib/libc.so.4.6.27
/compat/linux/lib/libc.so.4 -> libc.so.4.6.27
....

и какое-либо приложение требует библиотеку более поздней версии, судя по результатам команды `ldd`:

[source,shell]
....
libc.so.4 (DLL Jump 4.5pl26) -> libc.so.4.6.29
....

Если версии немного отличаются в последней цифре, копировать [.filename]#/lib/libc.so.4.6.29# необязательно, так как программа, скорее всего, будет нормально работать и с немного устаревшей версией. Тем не менее, вы можете заменить [.filename]#libc.so#:

[source,shell]
....
/compat/linux/lib/libc.so.4.6.29
/compat/linux/lib/libc.so.4 -> libc.so.4.6.29
....
====

[NOTE]
====
Символические ссылки важны _только_ для Linux-программ. Runtime-компоновщик FreeBSD самостоятельно подберет правильные номера версий библиотек, и вам не нужно об этом беспокоиться.
====

=== Установка двоичных файлов Linux ELF

Для ELF-файлов иногда требуется сделать так называемый "branding" (маркировать его). Если попытаться запустить не маркированный ELF-файл, вы получите следующее сообщение об ошибке:

[source,shell]
....
% ./моя-linux-elf-программа
ELF binary type not known
Abort
....

Чтобы помочь ядру FreeBSD отличить ELF-файл FreeBSD от двоичного файла Linux, используется утилита man:brandelf[1]:

[source,shell]
....
% brandelf -t Linux моя-linux-elf-программа
....

В настоящее время набор инструментальных средств GNU (GNU toolchain) помещает необходимую маркировочную информацию в двоичные ELF-файлы автоматически, поэтому необходимость в этом действии возникает всё реже.

=== Конфигурирование распознавания имен хостов

Если DNS не работает или вы получаете это сообщение:

[source,shell]
....
resolv+: "bind" is an invalid keyword resolv+:
"hosts" is an invalid keyword
....

то вам нужно создать (изменить) файл [.filename]#/compat/linux/etc/host.conf#, содержащий:

[.programlisting]
....
order hosts, bind
multi on
....

Таким образом, вы указываете, то сначала производится поиск в файле [.filename]#/etc/hosts#, а только затем запрашивается DNS. Когда файл [.filename]#/compat/linux/etc/host.conf# отсутствует, Linux-приложения находят файл [.filename]#/etc/host.conf# для FreeBSD и сообщают о несовместимом синтаксисе. Если вы не настраивали сервер имен с помощью файла [.filename]#/etc/resolv.conf#, уберите `bind` из файла [.filename]#/compat/linux/etc/host.conf#.

[[linuxemu-mathematica]]
== Установка Mathematica(R)

Ниже описано, как установить Linux-версию пакета Mathematica(R) 5.X на систему FreeBSD.

Linux версия Mathematica(R) или Mathematica(R) for Students можно заказать непосредственно в компании Wolfram по адресу http://www.wolfram.com/[http://www.wolfram.com/].

=== Использование установщика Mathematica(R)

Сначала вы должны указать FreeBSD, что Linux бинарники от Mathematica(R) используют Linux ABI. Самый простой путь сделать это-установить марку ELF Linux по умолчанию для всех немаркированных двоичных файлов с помощью команды:

[source,shell]
....
# sysctl kern.fallback_elf_brand=3
....

FreeBSD будет считать, что все немаркированные двоичные ELF-файлы используют Linux ABI, и вы сможете запустить MathInstaller прямо с CDROM.

Теперь, скопируйте файл [.filename]#MathInstaller# на ваш жёсткий диск:

[source,shell]
....
# mount /cdrom
# cp /cdrom/Unix/Installers/Linux/MathInstaller /localdir/
....

и в этом файле замените `/bin/sh` в в первой строке на `/compat/linux/bin/sh`. Этим мы убедимся, что установщик будет выполняться Linux версией man:sh[1]. Дальше, замените все вхождения `Linux)` на `FreeBSD)` с помощью текстового редактора или с помощью скрипта, представленного ниже, в следующей главе. Это укажет установщику Mathematica(R), вызывающему `uname -s` для определения операционной системы, относиться к FreeBSD, как к Linux подобной операционной системе. Теперь, запуск `MathInstaller` установит Mathematica(R).

=== Modifying the Mathematica(R) Executables

Скрипты командной оболочки, которые Mathematica(R) создала во время установки, должны быть изменены перед тем, как вы сможете использовать их. Если вы выбрали [.filename]#/usr/local/bin# в качестве директории для помещения исполняемых файлов Mathematica(R), то вы обнаружите в этом каталоге ссылки на файлы [.filename]#math#, [.filename]#mathematica#, [.filename]#Mathematica#, и [.filename]#MathKernel#. В каждом из них замените `Linux)` на `FreeBSD)` с помощью текстового редактора или с помощью следующего скрипта командной оболочки:

[.programlisting]
....
#!/bin/sh
cd /usr/local/bin
for i in math mathematica Mathematica MathKernel
  do sed 's/Linux)/FreeBSD)/g' $i > $i.tmp
  sed 's/\/bin\/sh/\/compat\/linux\/bin\/sh/g' $i.tmp > $i
  rm $i.tmp
  chmod a+x $i
done
....

=== Получение пароля к пакету Mathematica(R)

Когда вы запустите Mathematica(R) в первый раз, у вас будет запрошен пароль. Если вы еще не получили пароль от Wolfram, запустите программу `mathinfo` в директории установки для получения вашего "machine ID". Этот machine ID основан исключительно на MAC адресе вашей первичной Ethernet карты, так что, вы не сможете использовать вашу копию Mathematica(R) на разных машинах.

При регистрации по электронной почте, по телефону или по факсу вы сообщаете "machine ID", а в ответ получаете пароль, состоящий из нескольких групп чисел.

=== Использование интерфейса Mathematica(R) по сети

Mathematica(R) использует специальные шрифты для отображения некоторых символов, которые отсутствуют в стандартных шрифтах (символы интегралов, сумм, греческий алфавит и другие). Протокол X требует, чтобы эти шрифты были установлены _локально_. Это означает, что вы должны скопировать эти шрифты с компакт-диска или хоста, на котором установлена Mathematica(R), на вашу машину. Обычно эти шрифты находятся в каталоге [.filename]#/cdrom/Unix/Files/SystemFiles/Fonts# компакт-диска или в каталоге [.filename]#/usr/local/mathematica/SystemFiles/Fonts# на диске. Собственно файлы со шрифтами находятся в подкаталогах [.filename]#Type1# и [.filename]#X#. О том, как их использовать, читайте ниже.

Можно просто скопировать их в один из существующих каталогов шрифтов в каталоге [.filename]#/usr/X11R6/lib/X11/fonts#. В этом случае придётся отредактировать файл [.filename]#fonts.dir#, добавив в него названия шрифтов и изменив число шрифтов в первой строке. Можно также запустить программу man:mkfontdir[1], находясь в том каталоге, куда вы скопировали шрифты.

Есть альтернативный способ: скопировать каталоги в [.filename]#/usr/X11R6/lib/X11/fonts#:

[source,shell]
....
# cd /usr/X11R6/lib/X11/fonts
# mkdir X
# mkdir MathType1
# cd /cdrom/Unix/Files/SystemFiles/Fonts
# cp X/* /usr/X11R6/lib/X11/fonts/X
# cp Type1/* /usr/X11R6/lib/X11/fonts/MathType1
# cd /usr/X11R6/lib/X11/fonts/X
# mkfontdir
# cd ../MathType1
# mkfontdir
....

Теперь добавьте каталоги с новыми шрифтами в путь к шрифтам:

[source,shell]
....
# xset fp+ /usr/X11R6/lib/X11/fonts/X
# xset fp+ /usr/X11R6/lib/X11/fonts/MathType1
# xset fp rehash
....

Если вы используете сервер Xorg, то можно просто прописать эти каталоги в файле [.filename]#xorg.conf#.

[NOTE]
====
Для сервера XFree86(TM), файл конфигурации [.filename]#XF86Config#.
====

Если на вашем компьютере _нет_ каталога [.filename]#/usr/X11R6/lib/X11/fonts/Type1#, замените [.filename]#MathType1# на [.filename]#Type1# в предыдущем примере.

[[linuxemu-maple]]
== Установка Maple(TM)

Maple(TM) - коммерческая математическая программа, аналогичная Mathematica(R). Это программное обеспечение надо купить у http://www.maplesoft.com/[http://www.maplesoft.com/], а потом зарегистрироваться там для получения файла лицензии. Для установки этого программного обеспечения в ОС FreeBSD используется следующая последовательность простых шагов.

[.procedure]
====

. Выполните скрипт командного интерпретатора [.filename]#INSTALL# из дистрибутива. Выберите опцию "RedHat", когда будет предложено программой установки. Обычно установка выполняется в каталог [.filename]#/usr/local/maple#.
. Если вы этого ещё не сделали, купите лицензию на Maple(TM) в компании Maple Waterloo Software (http://register.maplesoft.com/[http://register.maplesoft.com/]) и скопируйте ее в файл [.filename]#/usr/local/maple/license/license.dat#.
. Установите диспетчер лицензий FLEXlm, выполнив скрипт установки [.filename]#INSTALL_LIC#, входящий в состав Maple(TM). Укажите основное имя хоста вашей машины для сервера лицензий.
. Исправьте файл [.filename]#/usr/local/maple/bin/maple.system.type# с помощью следующего патча:
+
[.programlisting]
....
   ----- snip ------------------
*** maple.system.type.orig      Sun Jul  8 16:35:33 2001
--- maple.system.type   Sun Jul  8 16:35:51 2001
***************
*** 72,77 ****
--- 72,78 ----
          # the IBM RS/6000 AIX case
          MAPLE_BIN="bin.IBM_RISC_UNIX"
          ;;
+     "FreeBSD"|\
      "Linux")
          # the Linux/x86 case
        # We have two Linux implementations, one for Red Hat and
   ----- snip end of patch -----
....
+ 
Учтите, что после `"FreeBSD"|\` не должно быть никаких пробелов.
+ 
Этот патч заставляет Maple(TM) распознавать "FreeBSD" как тип Linux-системы. Скрипт командного интерпретатора [.filename]#bin/maple# вызывает скрипт [.filename]#bin/maple.system.type#, который, в свою очередь, вызывает `uname -a` для получения имени операционной системы. В зависимости от имени ОС он определяет, какие двоичные модули использовать.
. Запустите сервер лицензий.
+ 
Следующий скрипт, установленный в файл [.filename]#/usr/local/etc/rc.d/lmgrd.sh#, обеспечивает удобный способ запуска `lmgrd`:
+
[.programlisting]
....
   ----- snip ------------

#! /bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin
PATH=${PATH}:/usr/local/maple/bin:/usr/local/maple/FLEXlm/UNIX/LINUX
export PATH

LICENSE_FILE=/usr/local/maple/license/license.dat
LOG=/var/log/lmgrd.log

case "$1" in
start)
        lmgrd -c ${LICENSE_FILE} 2>> ${LOG} 1>&2
        echo -n " lmgrd"
        ;;
stop)
        lmgrd -c ${LICENSE_FILE} -x lmdown 2>> ${LOG} 1>&2
        ;;
*)
        echo "Usage: `basename $0` {start|stop}" 1>&2
        exit 64
        ;;
esac

exit 0
   ----- snip ------------
....
+
. Выполните тестовый запуск Maple(TM):
+
[source,shell]
....
% cd /usr/local/maple/bin
% ./xmaple
....
+ 
Программа должна запуститься и работать. Не забудьте написать в Maplesoft и сообщить, что хотели бы видеть версию специально для FreeBSD!
====

=== Типичные проблемы

* Работать с диспетчером лицензий FLEXlm может быть непросто. Дополнительную документацию по нему можно найти на сайте http://www.globetrotter.com/[http://www.globetrotter.com/].
* `lmgrd` очень требователен к файлу лицензии и выдает дамп памяти при выявлении любых проблем. Правильный файл лицензии должен иметь следующий вид:
+
[.programlisting]
....
# =======================================================
# License File for UNIX Installations ("Pointer File")
# =======================================================
SERVER chillig ANY
#USE_SERVER
VENDOR maplelmg

FEATURE Maple maplelmg 2000.0831 permanent 1 XXXXXXXXXXXX \
         PLATFORMS=i86_r ISSUER="Waterloo Maple Inc." \
         ISSUED=11-may-2000 NOTICE=" Technische Universitat Wien" \
         SN=XXXXXXXXX
....
+
[NOTE]
====
Серийный номер и ключ забиты символами 'X'. `chillig` - имя хоста.
====
+ 
Редактирование файла лицензий возможно, если только не трогать строку "FEATURE" (которая защищена лицензионным ключом).

[[linuxemu-matlab]]
== Установка MATLAB(R)

Этот документ описывает процесс установки Linux-версии MATLAB(R) версии 6.5 на систему FreeBSD. Эта программа работает вполне нормально, за исключением Java Virtual Machine(TM) (см. <<matlab-jre>>).

Linux-версию MATLAB(R) можно приобрести непосредственно в компании The MathWorks на сайте http://www.mathworks.com[http://www.mathworks.com]. Не забудьте получить файл лицензии или инструкции по его созданию. По ходу дела дайте знать производителю, что хотели бы увидеть версию их ПО специально для FreeBSD.

=== Процесс установки MATLAB(R)

Для установки MATLAB(R) выполните следующие шаги:

[.procedure]
====

. Вставьте инсталляционный CD и смонтируйте его. Станьте пользователем `root`, как рекомендует скрипт установки. Для запуска скрипта установки наберите:
+
[source,shell]
....
# /compat/linux/bin/sh /cdrom/install
....
+
[TIP]
======

Запускается графический инсталлятор. Если вы получаете сообщения о невозможности открыть дисплей, наберите `setenv HOME ~_USER_`, где _USER_ - пользователь, от имени которого выполнена команда man:su[1].
======
+
. При запросе корневого каталога MATLAB(R), наберите: `/compat/linux/usr/local/matlab`.
+
[TIP]
======

Чтобы упростить набор остальных команд в ходе установки, выполните в командном интерпретаторе следующую команду: `set MATLAB=/compat/linux/usr/local/matlab`
======
+
. Отредактируйте файл лицензии в соответствии с инструкциями в полученной лицензии MATLAB(R).
+
[TIP]
======

Этот файл можно подготовить заранее с помощью любого текстового редактора и скопировать его в [.filename]#$MATLAB/license.dat# до того, как инсталлятор попросит его отредактировать.
======
+
. Завершите процесс установки.
====

В этот момент ваша установка MATLAB(R) завершена. Следующие шаги позволяют "связать" эту программу с вашей системой FreeBSD.

=== Запуск диспетчера лицензий

[.procedure]
====

. Создайте символические ссылки для скриптов диспетчера лицензий:
+
[source,shell]
....
# ln -s $MATLAB/etc/lmboot /usr/local/etc/lmboot_TMW
# ln -s $MATLAB/etc/lmdown /usr/local/etc/lmdown_TMW
....
+
. Создайте файл запуска [.filename]#/usr/local/etc/rc.d/flexlm.sh#. Представленный ниже пример - измененная версия входящего в дистрибутив файла [.filename]#$MATLAB/etc/rc.lm.glnx86#. Изменены местонахождения файлов и диспетчер лицензий запускается под эмулятором Linux.
+
[.programlisting]
....
#!/bin/sh
case "$1" in
  start)
        if [ -f /usr/local/etc/lmboot_TMW ]; then
              /compat/linux/bin/sh /usr/local/etc/lmboot_TMW -u username && echo 'MATLAB_lmgrd'
        fi
        ;;
  stop)
        if [ -f /usr/local/etc/lmdown_TMW ]; then
            /compat/linux/bin/sh /usr/local/etc/lmdown_TMW  > /dev/null 2>&1
        fi
        ;;
  *)
        echo "Usage: $0 {start|stop}"
        exit 1
        ;;
esac

exit 0
....
+
[IMPORTANT]
======
Этот файл надо сделать выполняемым:

[source,shell]
....
# chmod +x /usr/local/etc/rc.d/flexlm.sh
....

Вы также должны заменить _username_ именем пользователя в вашей системе (но не `root`).
======
+
. Запустите диспетчер лицензий с помощью команды:
+
[source,shell]
....
# /usr/local/etc/rc.d/flexlm.sh start
....
====

[[matlab-jre]]
=== Связь с Java(TM) Runtime Environment

Измените ссылку Java(TM) Runtime Environment (JRE) так, чтобы он ссылалась на версию, работающую в FreeBSD:

[source,shell]
....
# cd $MATLAB/sys/java/jre/glnx86/
# unlink jre; ln -s ./jre1.1.8 ./jre
....

=== Создание скрипта запуска MATLAB(R)

[.procedure]
====

. Поместите следующий скрипт запуска в файл [.filename]#/usr/local/bin/matlab#: 
+
[.programlisting]
....
#!/bin/sh
/compat/linux/bin/sh /compat/linux/usr/local/matlab/bin/matlab "$@"
....
+
. Затем выполните команду `chmod +x /usr/local/bin/matlab`.
====

[TIP]
====

В зависимости от версии package:emulators/linux_base[], при выполнении этого скрипта могут быть выданы сообщения об ошибках. Чтобы избежать этого, отредактируйте файл [.filename]#/compat/linux/usr/local/matlab/bin/matlab# и измените строку вида:

[.programlisting]
....
if [ `expr "$lscmd" : '.*->.*'` -ne 0 ]; then
....

(в версии 13.0.1 это строка 410) на следующую строку:

[.programlisting]
....
if test -L $newbase; then
....

====

=== Создание скрипта остановки MATLAB(R)

Следующие действия необходимы для решения проблемы с некорректным завершением работы MATLAB(R).

[.procedure]
====

. Создайте файл [.filename]#$MATLAB/toolbox/local/finish.m# и поместите в него одну строку:
+
[.programlisting]
....
! $MATLAB/bin/finish.sh
....
+
[NOTE]
======
`$MATLAB` - литерал.
======
+
[TIP]
======

В том же каталоге находятся файлы [.filename]#finishsav.m# и [.filename]#finishdlg.m#, которые позволяют сохранять рабочее пространство перед выходом. Если вы используете любой из них, вставьте представленную выше строку сразу после команды `save`.
======
+
. Создайте файл [.filename]#$MATLAB/bin/finish.sh#, который будет содержать следующий скрипт:
+
[.programlisting]
....
#!/usr/compat/linux/bin/sh
(sleep 5; killall -1 matlab_helper) &
exit 0
....
+
. Сделайте этот файл выполняемым:
+
[source,shell]
....
# chmod +x $MATLAB/bin/finish.sh
....
====

[[matlab-using]]
=== Использование MATLAB(R)

В этот момент все готово для выполнения команды `matlab` и начала использования этой программы.

[[linuxemu-oracle]]
== Установка Oracle(R)

=== Введение

Ниже описан процесс установки Oracle(R) 8.0.5 и Oracle(R) 8.0.5.1 Enterprise Edition для Linux на систему FreeBSD.

=== Установка Linux-среды

Удостоверьтесь, что порты package:emulators/linux_base[] и package:devel/linux_devtools[] установлены на вашей системе. Если у вас возникнут трудности с этими портами, воспользуйтесь пакетами или более ранними их версиями из Коллекции Портов.

Если вы хотите использовать интеллектуальный агент (intelligent agent), придется также установить пакет TCL от Red Hat: [.filename]#tcl-8.0.3-20.i386.rpm#. Универсальная команда для установки пакетов с помощью официального порта RPM (package:archivers/rpm[]):

[source,shell]
....
# rpm -i --ignoreos --root /compat/linux --dbpath /var/lib/rpm пакет
....

Установка этого _пакета_ должна пройти без каких-либо ошибок.

=== Создание среды Oracle(R)

Прежде чем вы сможете установить Oracle(R), необходимо настроить соответствующую среду. В этом документе описано, что _специально_ нужно сделать, чтобы запустить Oracle(R) для Linux под FreeBSD - это не пересказ официального руководства по установке Oracle(R).

[[linuxemu-kernel-tuning]]
==== Настройка ядра

Как описано в руководстве по установке Oracle(R), необходимо установить максимальный размер совместно используемой (shared) памяти. Не используйте `SHMMAX` под FreeBSD. `SHMMAX` просто вычисляется, исходя из `SHMMAXPGS` и `PGSIZE`. Следовательно, нужно задавать `SHMMAXPGS`. За информацией о прочих опциях обратитесь к официальному руководству. Пример настроек:

[.programlisting]
....
options SHMMAXPGS=10000
options SHMMNI=100
options SHMSEG=10
options SEMMNS=200
options SEMMNI=70
options SEMMSL=61
....

Установите эти опции в зависимости от того, как и для чего вы будете использовать Oracle(R).

Не забудьте добавить следующие строки в файл конфигурации ядра:

[.programlisting]
....
options SYSVSHM # совместно используемая память SysV
options SYSVSEM # семафоры SysV
options SYSVMSG # межпроцессное взаимодействие SysV
....

[[linuxemu-oracle-account]]
==== Учетная запись Oracle(R)

Создайте специальную учетную запись `oracle`, как и любую другую учетную запись. Единственное отличие в том, что для `oracle` необходимо указать командный интерпретатор Linux. Добавьте [.filename]#/compat/linux/bin/bash# в [.filename]#/etc/shells# и установите для `oracle` командный интерпретатор [.filename]#/compat/linux/bin/bash#.

[[linuxemu-environment]]
==== Переменные среды

Кроме стандартных переменных среды Oracle(R), таких как `ORACLE_HOME` и `ORACLE_SID`, вам нужно будет установить следующие переменные среды:

[.informaltable]
[cols="1,1", frame="none", options="header"]
|===
| Переменная
| Значение

|`LD_LIBRARY_PATH`
|`$ORACLE_HOME/lib`

|`CLASSPATH`
|`$ORACLE_HOME/jdbc/lib/classes111.zip`

|`PATH`
|`/compat/linux/bin /compat/linux/sbin /compat/linux/usr/bin /compat/linux/usr/sbin /bin /sbin /usr/bin /usr/sbin /usr/local/bin $ORACLE_HOME/bin`
|===

Желательно устанавливать все переменные среды в файле [.filename]#.profile#. Вот реальный пример:

[.programlisting]
....
ORACLE_BASE=/oracle; export ORACLE_BASE
ORACLE_HOME=/oracle; export ORACLE_HOME
LD_LIBRARY_PATH=$ORACLE_HOME/lib
export LD_LIBRARY_PATH
ORACLE_SID=ORCL; export ORACLE_SID
ORACLE_TERM=386x; export ORACLE_TERM
CLASSPATH=$ORACLE_HOME/jdbc/lib/classes111.zip
export CLASSPATH
PATH=/compat/linux/bin:/compat/linux/sbin:/compat/linux/usr/bin
PATH=$PATH:/compat/linux/usr/sbin:/bin:/sbin:/usr/bin:/usr/sbin
PATH=$PATH:/usr/local/bin:$ORACLE_HOME/bin
export PATH
....

=== Установка Oracle(R)

Из-за небольшой несовместимости с Linux-эмулятором, вам нужно будет создать подкаталог [.filename]#.oracle# в каталоге [.filename]#/var/tmp# прежде, чем можно будет начать установку. Сделайте ее владельцем пользователя `oracle`. Если вы все сделали правильно, то установка Oracle(R) должна пройти без проблем. Если какие-либо трудности все же возникли, проверьте еще раз все конфигурационные файлы и/или целостность дистрибутива Oracle(R). После окончания установки Oracle(R) примените патчи, описанные в следующих двух подразделах.

Одна из часто возникающих проблем - неправильно установленный адаптер TCP-протокола. В результате, невозможно запустить процессы прослушивания TCP. Вот решение проблемы:

[source,shell]
....
# cd $ORACLE_HOME/network/lib
# make -f ins_network.mk ntcontab.o
# cd $ORACLE_HOME/lib
# ar r libnetwork.a ntcontab.o
# cd $ORACLE_HOME/network/lib
# make -f ins_network.mk install
....

Не забудьте повторно запустить [.filename]#root.sh#!

[[linuxemu-patch-root]]
==== Изменение root.sh

При установке Oracle(R) необходимо выполнить некоторые действия от имени пользователя `root`. Они записаны в скрипте командного интерпретатора [.filename]#root.sh#, который находится в каталоге [.filename]#orainst#. Перед запуском, примените к нему следующий патч (исправляет местонахождение утилиты chown), либо запускайте его в командном интерпретаторе Linux.

[.programlisting]
....
*** orainst/root.sh.orig Tue Oct 6 21:57:33 1998
--- orainst/root.sh Mon Dec 28 15:58:53 1998
***************
*** 31,37 ****
# This is the default value for CHOWN
# It will redefined later in this script for those ports
# which have it conditionally defined in ss_install.h
! CHOWN=/bin/chown
#
# Define variables to be used in this script
--- 31,37 ----
# This is the default value for CHOWN
# It will redefined later in this script for those ports
# which have it conditionally defined in ss_install.h
! CHOWN=/usr/sbin/chown
#
# Define variables to be used in this script
....

Если вы устанавливаете Oracle(R) не с компакт-диска, можно изменить исходный файл [.filename]#root.sh#. Он называется [.filename]#rthd.sh# и находится в каталоге [.filename]#orainst#.

[[linuxemu-patch-tcl]]
==== Изменение genclntsh

Скрипт `genclntsh` используется для того, чтобы создать единую совместно используемую клиентскую библиотеку, которая используется для создания демонстраций. Примените следующий патч, чтобы закомментировать определение переменной `PATH`:

[.programlisting]
....
*** bin/genclntsh.orig Wed Sep 30 07:37:19 1998
--- bin/genclntsh Tue Dec 22 15:36:49 1998
***************
*** 32,38 ****
#
# Explicit path to ensure that we're using the correct commands
#PATH=/usr/bin:/usr/ccs/bin export PATH
! PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin export PATH
#
# each product MUST provide a $PRODUCT/admin/shrept.lst
--- 32,38 ----
#
# Explicit path to ensure that we're using the correct commands
#PATH=/usr/bin:/usr/ccs/bin export PATH
! #PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin export PATH
#
# each product MUST provide a $PRODUCT/admin/shrept.lst
....

=== Запуск Oracle(R)

Теперь, если вы все сделали правильно, то можете использовать Oracle(R) так же, как и в системе Linux.

[[sapr3]]
== Установка SAP(R) R/3(R)

Инсталляции систем SAP(R) на базе FreeBSD не будут поддерживаться службой поддержки SAP(R) - они предоставляют поддержку только на сертифицированных платформах.

[[preface]]
=== Предисловие

Этот документ описывает возможный способ установки системы SAP(R) R/3(R) с СУБД Oracle(R) Database на машине с ОС FreeBSD, включая установку FreeBSD и Oracle(R). Будут описаны две разные конфигурации:

* SAP(R) R/3(R) 4.6B (IDES) с Oracle(R) 8.0.5 на FreeBSD 4.3-STABLE
* SAP(R) R/3(R) 4.6C с Oracle(R) 8.1.7 на FreeBSD 4.5-STABLE

Хотя в этом документе мы пытаемся подробно описать все важные шаги, он не заменяет руководства по установке Oracle(R) и SAP(R) R/3(R).

По специфическим вопросам SAP(R) и Oracle(R) обратитесь к документации, поставляемой в составе SAP(R) R/3(R) Linux edition, а также к другим источникам информации об Oracle(R) и SAP(R) OSS.

[[software]]
=== Программное обеспечение

Для установки SAP(R) были использованы следующие диски CD-ROM:

[[software-46b]]
==== SAP(R) R/3(R) 4.6B, Oracle(R) 8.0.5

[.informaltable]
[cols="1,1,1", frame="none", options="header"]
|===
| Имя
| Номер
| Описание

|KERNEL
|51009113
|SAP Kernel Oracle / Installation / AIX, Linux, Solaris

|RDBMS
|51007558
|Oracle / RDBMS 8.0.5.X / Linux

|EXPORT1
|51010208
|IDES / DB-Export / Диск 1 из 6

|EXPORT2
|51010209
|IDES / DB-Export / Диск 2 из 6

|EXPORT3
|51010210
|IDES / DB-Export / Диск 3 из 6

|EXPORT4
|51010211
|IDES / DB-Export / Диск 4 из 6

|EXPORT5
|51010212
|IDES / DB-Export / Диск 5 из 6

|EXPORT6
|51010213
|IDES / DB-Export / Диск 6 из 6
|===

Кроме того, мы использовали CD Oracle(R) 8 Server (Опытная версия 8.0.5 для Linux, ядро версии 2.0.33), который не обязательно понадобится, и FreeBSD 4.3-STABLE (она вышла всего через несколько дней после 4.3 RELEASE).

[[software-46c]]
==== SAP(R) R/3(R) 4.6C SR2, Oracle(R) 8.1.7

[.informaltable]
[cols="1,1,1", frame="none", options="header"]
|===
| Имя
| Номер
| Описание

|KERNEL
|51014004
|SAP Kernel Oracle / SAP Kernel Version 4.6D / DEC, Linux

|RDBMS
|51012930
|Oracle 8.1.7/ RDBMS / Linux

|EXPORT1
|51013953
|Release 4.6C SR2 / Export / Диск 1 из 4

|EXPORT1
|51013953
|Release 4.6C SR2 / Export / Диск 2 из 4

|EXPORT1
|51013953
|Release 4.6C SR2 / Export / Диск 3 bp 4

|EXPORT1
|51013953
|Release 4.6C SR2 / Export / Диск 4 из 4

|LANG1
|51013954
|Release 4.6C SR2 / Language / DE, EN, FR / Диск 1 из 3
|===

В зависимости от языков, которые необходимо установить, могут потребоваться дополнительные CD. Здесь мы использовали только немецкий и английский языки, поэтому потребовался только первый языковой CD. Обратите внимание, что номера всех EXPORT CD идентичны. Все три языковых CD тоже имеют один номер (это отличается от нумерации CD в версии 4.6B IDES). На момент написания этого раздела (20.03.2002) установленное ПО работало на FreeBSD 4.5-STABLE.

[[sap-notes]]
=== Примечания по SAP(R)

Прочитайте следующие документы перед установкой SAP(R) R/3(R) - они пригодятся в ходе установки:

[[sap-notes-46b]]
==== SAP(R) R/3(R) 4.6B, Oracle(R) 8.0.5

[.informaltable]
[cols="1,1", frame="none", options="header"]
|===
| Номер
| Название

|0171356
|SAP Software on Linux: Essential Comments

|0201147
|INST: 4.6C R/3 Inst. on UNIX - Oracle

|0373203
|Update / Migration Oracle 8.0.5 --> 8.0.6/8.1.6 LINUX

|0072984
|Release of Digital UNIX 4.0B for Oracle

|0130581
|R3SETUP step DIPGNTAB terminates

|0144978
|Your system has not been installed correctly

|0162266
|Questions and tips for R3SETUP on Windows NT / W2K
|===

[[sap-notes-46c]]
==== SAP(R) R/3(R) 4.6C, Oracle(R) 8.1.7

[.informaltable]
[cols="1,1", frame="none", options="header"]
|===
| Номер
| Название

|0015023
|Initializing table TCPDB (RSXP0004) (EBCDIC)

|0045619
|R/3 with several languages or typefaces

|0171356
|SAP Software on Linux: Essential Comments

|0195603
|RedHat 6.1 Enterprise version: Known problems

|0212876
|The new archiving tool SAPCAR

|0300900
|Linux: Released DELL Hardware

|0377187
|RedHat 6.2: important remarks

|0387074
|INST: R/3 4.6C SR2 Installation on UNIX

|0387077
|INST: R/3 4.6C SR2 Inst. on UNIX - Oracle

|0387078
|SAP Software on UNIX: OS Dependencies 4.6C SR2
|===

[[hardware-requirements]]
=== Требования к аппаратному обеспечению

Следующего оборудования достаточно для установки SAP(R) R/3(R) System. Для производственного использования необходима более точная оценка параметров:

[.informaltable]
[cols="1,1,1", frame="none", options="header"]
|===
| Компонент
| 4.6B
| 4.6C

|Процессор
|2 x 800MHz Pentium(R) III
|2 x 800MHz Pentium(R) III

|Память
|1GB ECC
|2GB ECC

|Объем дисков
|50-60GB (IDES)
|50-60GB (IDES)
|===

Для производственного использования рекомендуются процессоры Xeon(TM) с большим кешем, высокоскоростной доступ к дискам (SCSI, аппаратный RAID-контроллер), USV и ECC-RAM. Большой объем дискового пространства связан с заранее сконфигурированной системой IDES, которая создает 27 Гбайт файлов базы данных по ходу установки. Этого пространства также достаточно для исходных производственных систем и прикладных данных.

[[hardware-46b]]
==== SAP(R) R/3(R) 4.6B, Oracle(R) 8.0.5

Было использовано следующее стандартное оборудование: двухпроцессорная материнская плата с двумя процессорами Pentium(R) III 800 MHz, SCSI-контроллером Adaptec(R) 29160 Ultra160 (для работы с 40/80 Гбайт стримером DLT и приводом CDROM), Mylex(R) AcceleRAID(TM) (2 канала, firmware 6.00-1-00 с 32 Мбайт RAM). К RAID-контроллеру Mylex(R) подключены два диска по 17 Гбайт (зеркалированы) и четыре диска по 36 Гбайт (RAID уровня 5).

[[hardware-46c]]
==== SAP(R) R/3(R) 4.6C, Oracle(R) 8.1.7

Для этой установки был использован Dell(TM) PowerEdge(TM) 2500: двухпроцессорная плата с двумя процессорами Pentium(R) III 1000 MHz (256 Кбайт кэш), 2 Гбайта PC133 ECC SDRAM, PERC/3 DC PCI RAID-контроллер со 128 Мбайтами и приводом EIDE DVD-ROM. К RAID-контроллеру подключены два диска по 18 Гбайт (зеркалированы) и четыре диска по 36 Гбайт (RAID уровня 5).

[[installation]]
=== Установка FreeBSD

Сначала надо установить FreeBSD. Есть несколько способов сделать это; подробнее см. crossref:install[install-diff-media,Подготовка собственного источника установки].

[[disk-layout]]
==== Компоновка дисков

Для простоты диски при установке SAP(R) R/3(R) 46B и SAP(R) R/3(R) 46C SR2 использовались одинаково. Изменились только имена устройств, поскольку установка выполнялась на разное оборудование ([.filename]#/dev/da# и [.filename]#/dev/amr#, соответственно, так что при использовании AMI MegaRAID(R) будут задействованы устройства [.filename]#/dev/amr0s1a# вместо [.filename]#/dev/da0s1a#):

[.informaltable]
[cols="1,1,1,1", frame="none", options="header"]
|===
| Файловая система
| Размер (в блока по 1 Кбайту)
| Размер (Гбайт)
| Смонтирована в

|[.filename]#/dev/da0s1a#
|1.016.303
|1
|[.filename]#/#

|[.filename]#/dev/da0s1b#
|
|6
|swap

|[.filename]#/dev/da0s1e#
|2.032.623
|2
|[.filename]#/var#

|[.filename]#/dev/da0s1f#
|8.205.339
|8
|[.filename]#/usr#

|[.filename]#/dev/da1s1e#
|45.734.361
|45
|[.filename]#/compat/linux/oracle#

|[.filename]#/dev/da1s1f#
|2.032.623
|2
|[.filename]#/compat/linux/sapmnt#

|[.filename]#/dev/da1s1g#
|2.032.623
|2
|[.filename]#/compat/linux/usr/sap#
|===

Конфигурируем и инициализируем заранее два логических диска с помощью ПО RAID Mylex(R) или PERC/3. Программы конфигурирования можно запустить в ходе загрузки BIOS.

Обратите внимание, что использованная компоновка дисков немного отличается от рекомендованной SAP(R), поскольку SAP(R) рекомендует монтировать подкаталоги Oracle(R) (и некоторые другие) отдельно - мы решили просто создать подкаталоги.

[[makeworldandnewkernel]]
==== `make world` и новое ядро

Загрузите последние исходные коды ветки -STABLE. Пересоздайте систему и ваше специализированное ядро после необходимых изменений в файле конфигурации ядра. В него надо включить <<kerneltuning,параметры ядра>>, требуемые для SAP(R) R/3(R) и Oracle(R).

[[installingthelinuxenviornment]]
=== Установка среды Linux

[[installinglinuxbase-system]]
==== Установка базовой системы Linux

Сначала необходимо установить порт <<linuxemu-libs-port,linux_base>> (от имени пользователя `root`):

[source,shell]
....
# cd /usr/ports/emulators/linux_base
# make install distclean
....

[[installinglinuxdevelopment]]
==== Установка среды разработки Linux

Среда разработки Linux необходима, если вы хотите установить Oracle(R) в ОС FreeBSD, как описано в <<linuxemu-oracle>>:

[source,shell]
....
# cd /usr/ports/devel/linux_devtools
# make install distclean
....

Среда разработки Linux была установлена только для SAP(R) R/3(R) 46B IDES. Она не нужна, если сервер Oracle(R) не перекомпоновывается в системе FreeBSD. Именно так и происходит, если вы используете tar-архив (tarball) Oracle(R) с Linux-системы.

[[installingnecessaryrpms]]
==== Установка необходимых пакетов RPM

Для запуска программы `R3SETUP` необходима поддержка модулей PAM. В ходе первой установки SAP(R) на ОС FreeBSD 4.3-STABLE мы попытались установить PAM со всеми необходимыми пакетами и, в конце концов, принудительно установили пакет PAM, что и сработало. Для SAP(R) R/3(R) 4.6C SR2 мы сразу принудительно установили PAM RPM, что тоже сработало, так что похоже, что пакеты, от которых декларирована зависимость, не нужны:

[source,shell]
....
# rpm -i --ignoreos --nodeps --root /compat/linux --dbpath /var/lib/rpm \
pam-0.68-7.i386.rpm
....

Чтобы Oracle(R) 8.0.5 мог запустить интеллектуального агента, нам также пришлось установить пакет RedHat Tcl [.filename]#tcl-8.0.5-30.i386.rpm# (иначе перекомпоновка в ходе установки Oracle(R) не выполнится). Есть и другие проблемы с перекомпоновкой Oracle(R), но это проблема Oracle(R) на Linux, не связанная с особенностями FreeBSD.

[[linuxprocandfallbackelfbrand]]
==== Дополнительные советы

Может также иметь смысл добавить `linprocfs` в [.filename]#/etc/fstab#; подробнее об этом см. на странице справочника man:linprocfs[5]. Еще можно установить параметр `kern.fallback_elf_brand=3` в файле [.filename]#/etc/sysctl.conf#.

[[creatingsapr3env]]
=== Создание среды SAP(R) R/3(R)

[[filesystemsandmountpoints]]
==== Создание необходимых файловых систем и точек монтирования

Для простой установки достаточно создать следующие файловые системы:

[.informaltable]
[cols="1,1", frame="none", options="header"]
|===
| точка монтирования
| размер в Гбайтах

|[.filename]#/compat/linux/oracle#
|45 GB

|[.filename]#/compat/linux/sapmnt#
|2 GB

|[.filename]#/compat/linux/usr/sap#
|2 GB
|===

Также необходимо создать несколько ссылок. В противном случае, инсталлятор SAP(R) будет выдавать сообщения об ошибках, поскольку он проверяет созданные ссылки:

[source,shell]
....
# ln -s /compat/linux/oracle /oracle
# ln -s /compat/linux/sapmnt /sapmnt
# ln -s /compat/linux/usr/sap /usr/sap
....

Возможные сообщения об ошибках в ходе установки (в данном случае, для установки System _PRD_ и SAP(R) R/3(R) 4.6C SR2):

[source,shell]
....
INFO 2002-03-19 16:45:36 R3LINKS_IND_IND SyLinkCreate:200
    Checking existence of symbolic link /usr/sap/PRD/SYS/exe/dbg to
    /sapmnt/PRD/exe. Creating if it does not exist...

WARNING 2002-03-19 16:45:36 R3LINKS_IND_IND SyLinkCreate:400
    Link /usr/sap/PRD/SYS/exe/dbg exists but it points to file
    /compat/linux/sapmnt/PRD/exe instead of /sapmnt/PRD/exe. The
    program cannot go on as long as this link exists at this
    location. Move the link to another location.

ERROR 2002-03-19 16:45:36 R3LINKS_IND_IND Ins_SetupLinks:0
    can not setup link '/usr/sap/PRD/SYS/exe/dbg' with content
    '/sapmnt/PRD/exe'
....

[[creatingusersanddirectories]]
==== Создание пользователей и каталогов

Для системы SAP(R) R/3(R) необходимы два пользователя и три группы. Имена пользователей зависят от идентификатора системы SAP(R) (SID), который состоит из трех букв. Некоторые из этих идентификаторов зарезервированы SAP(R) (например, `SAP` и `NIX`. Полный список см. в документации SAP(R)). Для установки IDES мы использовали `IDS`, а для установки 4.6C SR2 - `PRD`, поскольку эта система предназначалась для промышленного использования. Поэтому нам понадобились следующие группы (идентификаторы групп могут отличаться, мы просто указали наши значения, использованные при установке):

[.informaltable]
[cols="1,1,1", frame="none", options="header"]
|===
| идентификатор группы
| имя группы
| описание

|100
|dba
|Администратор базы данных

|101
|sapsys
|Система SAP(R)

|102
|oper
|Оператор базы данных
|===

Для стандартной установки Oracle(R) используется только группа `dba`. В качестве группы `oper` используется та же группа `dba` (подробнее об этом см. в документации Oracle(R) и SAP(R)).

Нам также нужны следующие пользователи:

[.informaltable]
[cols="1,1,1,1,1,1", frame="none", options="header"]
|===
| идентификатор пользователя
| имя пользователя
| общий вид имени
| группа
| дополнительные группы
| описание

|1000
|idsadm/prdadm
|_sid_adm
|sapsys
|oper
|Администратор SAP(R)

|1002
|oraids/oraprd
|ora_sid_
|dba
|oper
|Администратор Oracle(R)
|===

Добавление пользователей с помощью man:adduser[8] требует следующих параметров для "Администратора SAP(R)" (обратите внимание на командный интерпретатор и начальный каталог):

[.programlisting]
....
Name: sidadm
Password: ******
Fullname: SAP Administrator SID
Uid: 1000
Gid: 101 (sapsys)
Class:
Groups: sapsys dba
HOME: /home/sidadm
Shell: bash  (/compat/linux/bin/bash)
....

а для "Администратора Oracle(R)":

[.programlisting]
....
Name: orasid
Password: ******
Fullname: Oracle Administrator SID
Uid: 1002
Gid: 100 (dba)
Class:
Groups: dba
HOME: /oracle/sid
Shell: bash  (/compat/linux/bin/bash)
....

Для него также надо указать группу `oper`, если вы используете обе группы, `dba` и `oper`.

[[creatingdirectories]]
==== Создание каталогов

Эти каталоги обычно создаются в отдельных файловых системах. Впрочем, все зависит от ваших требований. Мы решили создавать их как обычные каталоги, поскольку в любом случае они находятся на одном массиве RAID 5:

Сначала мы установим владельцев и права для ряда каталогов (от имени пользователя `root`):

[source,shell]
....
# chmod 775 /oracle
# chmod 777 /sapmnt
# chown root:dba /oracle
# chown sidadm:sapsys /compat/linux/usr/sap
# chmod 775 /compat/linux/usr/sap
....

Затем, мы создадим каталоги от имени пользователя `ora_sid_`. Все они будут размещены в каталоге [.filename]#/oracle/SID#:

[source,shell]
....
# su - orasid
# cd /oracle/SID
# mkdir mirrlogA mirrlogB origlogA origlogB
# mkdir sapdata1 sapdata2 sapdata3 sapdata4 sapdata5 sapdata6
# mkdir saparch sapreorg
# exit
....

Для установки Oracle(R) 8.1.7 потребуется несколько дополнительных каталогов:

[source,shell]
....
# su - orasid
# cd /oracle
# mkdir 805_32
# mkdir client stage
# mkdir client/80x_32
# mkdir stage/817_32
# cd /oracle/SID
# mkdir 817_32
....

[NOTE]
====
Каталог [.filename]#client/80x_32# должен иметь точно такое имя. Не заменяйте _x_ числом или другим символом.
====

На третьем шаге мы создаем каталоги от имени пользователя `_sid_adm`:

[source,shell]
....
# su - sidadm
# cd /usr/sap
# mkdir SID
# mkdir trans
# exit
....

[[entriesinslashetcslashservices]]
==== Записи в файле [.filename]#/etc/services#

Для системы SAP(R) R/3(R) необходим ряд записей в файле [.filename]#/etc/services#, которые не будут правильно созданы при установке под FreeBSD. Пожалуйста, добавьте следующие записи (потребуются, по крайней мере, записи, соответствующие номеру экземпляра - в данном случае, `00`. Не повредит добавить все записи, от `00` до `99`, для `dp`, `gw`, `sp` и `ms`). Если вы собираетесь использовать SAProuter или вам необходим доступ к SAP(R) OSS, потребуется также запись для `99`, поскольку порт 3299 обычно используется для процесса SAProuter в целевой системе:

[.programlisting]
....

sapdp00  3200/tcp # SAP Dispatcher.      3200 + Instance-Number
sapgw00  3300/tcp # SAP Gateway.         3300 + Instance-Number
sapsp00  3400/tcp #                      3400 + Instance-Number
sapms00  3500/tcp #                      3500 + Instance-Number
sapmsSID 3600/tcp # SAP Message Server.  3600 + Instance-Number
sapgw00s   4800/tcp # SAP Secure Gateway   4800 + Instance-Number
....

[[necessarylocales]]
==== Необходимые локали

Системе SAP(R) нужны, по крайней мере, две локали, не входящие в стандартную установку RedHat. SAP(R) предлагает необходимые пакеты RPM для загрузки со своего FTP-сервера (который доступен только для клиентов с доступом к OSS). См. список необходимых пакетов RPM в заметке 0171356.

Можно также просто создать соответствующие ссылки (например, с _de_DE_ и _en_US_), но мы не рекомендуем это для производственной системы (хотя это и сработало для системы IDES безо всяких проблем). Необходимы следующие локали:

[.programlisting]
....
de_DE.ISO-8859-1
en_US.ISO-8859-1
....

Создайте ссылки следующим образом:

[source,shell]
....
# cd /compat/linux/usr/shared/locale
# ln -s de_DE de_DE.ISO-8859-1
# ln -s en_US en_US.ISO-8859-1
....

Если их не будет, в ходе установки возникнет ряд проблем. Если их просто проигнорировать (установив `STATUS` для соответствующих шагов равным `OK` в файле [.filename]#CENTRDB.R3S#), нельзя будет зарегистрироваться в системе SAP(R) без дополнительных усилий.

[[kerneltuning]]
==== Настройка ядра

Системам SAP(R) R/3(R) надо много ресурсов. Поэтому мы добавили следующие параметры в файл конфигурации ядра:

[.programlisting]
....
# Для пожирателей памяти (SAP и Oracle):
options MAXDSIZ="(1024*1024*1024)"
options DFLDSIZ="(1024*1024*1024)"
# Необходимые опции System V.
options SYSVSHM #совместно используемая память в стиле SYSV
options SHMMAXPGS=262144 #макс. количество страниц совместно используемой
#options SHMMAXPGS=393216 #use this for the 46C inst.parameters
options SHMMNI=256 #макс. количество идентификаторов совместно используемой
options SHMSEG=100 #макс. количество сегментов разд. памяти на процесс
options SYSVMSG #очереди сообщений в стиле SYSV
options MSGSEG=32767 #макс. количество сегментов сообщений в системе
options MSGSSZ=32 #размер сегмента сообщений. ДОЛЖЕН быть степенью 2
options MSGMNB=65535 #макс. символов на очередь сообщений
options MSGTQL=2046 #макс. количество сообщений в системе
options SYSVSEM #семафоры в стиле SYSV
options SEMMNU=256 #количество структур UNDO семафоров
options SEMMNS=1024 #количество семафоров в системе
options SEMMNI=520 #количество идентификаторов семафоров
options SEMUME=100       #количество ключей UNDO
....

Минимальные значения указаны в документации, поставляемой вместе с SAP(R). Поскольку описания для Linux нет, дополнительную информацию см. в разделе HP-UX (32-bit). Поскольку в системе, на которую устанавливалась версия 4.6C SR2, оперативной памяти больше, сегменты совместно используемой можно сделать больше как для SAP(R), так и для Oracle(R), поэтому задайте большее количество страниц совместно используемой памяти.

[NOTE]
====
При стандартной установке FreeBSD на i386(TM), задайте значения `MAXDSIZ` и `DFLDSIZ` не более 1 Гбайта. В противном случае могут выдаваться странные ошибки вроде `ORA-27102: out of memory` и `Linux Error: 12: Cannot allocate memory`.
====

[[installingsapr3]]
=== Установка SAP(R) R/3(R)

[[preparingsapcdroms]]
==== Подготовка дисков CDROM SAP(R)

В ходе установки придется монтировать и демонтировать много дисков CDROM. При наличии достаточного количества приводов CDROM, можно смонтировать их все. Мы же решили скопировать содержимое дисков CDROM в соответствующие каталоги:

[.programlisting]
....
/oracle/SID/sapreorg/имя_cd
....

где _имя_cd_ - одно из следующих [.filename]#KERNEL#, [.filename]#RDBMS#, [.filename]#EXPORT1#, [.filename]#EXPORT2#, [.filename]#EXPORT3#, [.filename]#EXPORT4#, [.filename]#EXPORT5# и [.filename]#EXPORT6# для установки 4.6B/IDES, и [.filename]#KERNEL#, [.filename]#RDBMS#, [.filename]#DISK1#, [.filename]#DISK2#, [.filename]#DISK3#, [.filename]#DISK4# и [.filename]#LANG# для установки 4.6C SR2. Все имена файлов на смонтированных дисках должны быть в верхнем регистре, в противном случае, используйте при монтировании опцию `-g`. Поэтому используйте следующие команды:

[source,shell]
....
# mount_cd9660 -g /dev/cd0a /mnt
# cp -R /mnt/* /oracle/SID/sapreorg/имя_cd
# umount /mnt
....

[[runningtheinstall-script]]
==== Запуск скрипта установки

Сначала надо подготовить каталог [.filename]#install#:

[source,shell]
....
# cd /oracle/SID/sapreorg
# mkdir install
# cd install
....

Затем запускается скрипт установки, который скопирует почти все необходимые файлы в каталог [.filename]#install#:

[source,shell]
....
# /oracle/SID/sapreorg/KERNEL/UNIX/INSTTOOL.SH
....

Дистрибутив IDES (4.6B) включает полностью настроенную демонстрационную систему SAP(R) R/3(R), поэтому он включает шесть дисков EXPORT CD, а не три. В этот момент шаблон установки [.filename]#CENTRDB.R3S# предназначен для установки стандартного центрального экземпляра (R/3(R) и базы данных), а не для установки центрального экземпляра IDES, поэтому необходимо скопировать соответствующий файл [.filename]#CENTRDB.R3S# из каталога [.filename]#EXPORT1#, иначе команда `R3SETUP` запросит только три диска EXPORT CDs.

Более новый релиз SAP(R) 4.6C SR2 включает четыре диска EXPORT CD. Шаги установки определяет файл параметров [.filename]#CENTRAL.R3S#. В отличие от прежних релизов, больше нет отдельных шаблонов установки для центрального экземпляра с базой данных или без нее. SAP(R) использует отдельный шаблон для установки базы данных. Для перезапуска установки в дальнейшем, однако, достаточно перезапустить исходный файл.

В ходе установки и после нее SAP(R) требует, чтобы команда `hostname` возвращала только имя компьютера, не уточнённое именем домена. Поэтому либо задайте имя хоста в соответствии с этим требованием, либо настройте псевдоним с помощью команды `alias hostname='hostname -s'` для пользователей `ora_sid_` и `_sid_adm` (и для пользователя `root`, про крайней мере, в ходе шагов по установке, выполняемых от имени `root`). Можно также изменить файлы [.filename]#.profile# и [.filename]#.login# для обоих пользователей, которые создаются в ходе установки SAP(R).

[[startr3setup-46B]]
==== Запуск `R3SETUP` 4.6B

Проверьте, что переменная среды `LD_LIBRARY_PATH` установлена правильно:

[source,shell]
....
# export LD_LIBRARY_PATH=/oracle/IDS/lib:/sapmnt/IDS/exe:/oracle/805_32/lib
....

Выполните команду `R3SETUP` от имени пользователя `root` из каталога установки:

[source,shell]
....
# cd /oracle/IDS/sapreorg/install
# ./R3SETUP -f CENTRDB.R3S
....

Скрипт затем задает ряд вопросов (стандартные ответы даны в скобках, а затем представлены реальные ответы):

[.informaltable]
[cols="1,1,1", frame="none", options="header"]
|===
| Вопрос
| Стандартное значение
| Ответ

|Enter SAP System ID
|[C11]
|IDSkbd:[Enter]

|Enter SAP Instance Number
|[00]
|kbd:[Enter]

|Enter SAPMOUNT Directory
|[/sapmnt]
|kbd:[Enter]

|Enter name of SAP central host
|[troubadix.domain.de]
|kbd:[Enter]

|Enter name of SAP db host
|[troubadix]
|kbd:[Enter]

|Select character set
|[1] (WE8DEC)
|kbd:[Enter]

|Enter Oracle server version (1) Oracle 8.0.5, (2) Oracle 8.0.6, (3) Oracle 8.1.5, (4) Oracle 8.1.6
|
|1kbd:[Enter]

|Extract Oracle Client archive
|[1] (Yes, extract)
|kbd:[Enter]

|Enter path to KERNEL CD
|[/sapcd]
|/oracle/IDS/sapreorg/KERNEL

|Enter path to RDBMS CD
|[/sapcd]
|/oracle/IDS/sapreorg/RDBMS

|Enter path to EXPORT1 CD
|[/sapcd]
|/oracle/IDS/sapreorg/EXPORT1

|Directory to copy EXPORT1 CD
|[/oracle/IDS/sapreorg/CD4_DIR]
|kbd:[Enter]

|Enter path to EXPORT2 CD
|[/sapcd]
|/oracle/IDS/sapreorg/EXPORT2

|Directory to copy EXPORT2 CD
|[/oracle/IDS/sapreorg/CD5_DIR]
|kbd:[Enter]

|Enter path to EXPORT3 CD
|[/sapcd]
|/oracle/IDS/sapreorg/EXPORT3

|Directory to copy EXPORT3 CD
|[/oracle/IDS/sapreorg/CD6_DIR]
|kbd:[Enter]

|Enter path to EXPORT4 CD
|[/sapcd]
|/oracle/IDS/sapreorg/EXPORT4

|Directory to copy EXPORT4 CD
|[/oracle/IDS/sapreorg/CD7_DIR]
|kbd:[Enter]

|Enter path to EXPORT5 CD
|[/sapcd]
|/oracle/IDS/sapreorg/EXPORT5

|Directory to copy EXPORT5 CD
|[/oracle/IDS/sapreorg/CD8_DIR]
|kbd:[Enter]

|Enter path to EXPORT6 CD
|[/sapcd]
|/oracle/IDS/sapreorg/EXPORT6

|Directory to copy EXPORT6 CD
|[/oracle/IDS/sapreorg/CD9_DIR]
|kbd:[Enter]

|Enter amount of RAM for SAP + DB
|
|850kbd:[Enter] (in Megabytes)

|Service Entry Message Server
|[3600]
|kbd:[Enter]

|Enter Group-ID of sapsys
|[101]
|kbd:[Enter]

|Enter Group-ID of oper
|[102]
|kbd:[Enter]

|Enter Group-ID of dba
|[100]
|kbd:[Enter]

|Enter User-ID of _sid_adm
|[1000]
|kbd:[Enter]

|Enter User-ID of ora_sid_
|[1002]
|kbd:[Enter]

|Number of parallel procs
|[2]
|kbd:[Enter]
|===

Если вы не скопировали диски в разные каталоги, инсталлятор SAP(R) не сможет найти необходимые CD (идентифицируемые файлом [.filename]#LABEL.ASC# на диске) и попросит затем вставить и смонтировать CD, и подтвердить или ввести точку его монтирования.

Файл [.filename]#CENTRDB.R3S# может содержать ошибки. В нашем случае, он снова запросил EXPORT4 CD, но указал корректный ключ (6_LOCATION, затем 7_LOCATION и т.д.), так что, можно просто продолжать вводить корректные значения.

За исключением нескольких упомянутых ниже проблем, все должно идти нормально до момента, когда придется устанавливать программное обеспечение для работы с базой данных Oracle(R).

[[startr3setup-46C]]
==== Запуск `R3SETUP` 4.6C SR2

Проверьте, что переменная среды `LD_LIBRARY_PATH` установлена правильно. Это значение отличается от использованного при установке версии 4.6B с Oracle(R) 8.0.5:

[source,shell]
....
# export LD_LIBRARY_PATH=/sapmnt/PRD/exe:/oracle/PRD/817_32/lib
....

Выполните команду `R3SETUP` от имени пользователя `root` из каталога установки:

[source,shell]
....
# cd /oracle/PRD/sapreorg/install
# ./R3SETUP -f CENTRAL.R3S
....

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

[.informaltable]
[cols="1,1,1", frame="none", options="header"]
|===
| Вопрос
| Стандартное значение
| Ответ

|Enter SAP System ID
|[C11]
|PRDkbd:[Enter]

|Enter SAP Instance Number
|[00]
|kbd:[Enter]

|Enter SAPMOUNT Directory
|[/sapmnt]
|kbd:[Enter]

|Enter name of SAP central host
|[majestix]
|kbd:[Enter]

|Enter Database System ID
|[PRD]
|PRDkbd:[Enter]

|Enter name of SAP db host
|[majestix]
|kbd:[Enter]

|Select character set
|[1] (WE8DEC)
|kbd:[Enter]

|Enter Oracle server version (2) Oracle 8.1.7
|
|2kbd:[Enter]

|Extract Oracle Client archive
|[1] (Yes, extract)
|kbd:[Enter]

|Enter path to KERNEL CD
|[/sapcd]
|/oracle/PRD/sapreorg/KERNEL

|Enter amount of RAM for SAP + DB
|2044
|1800kbd:[Enter] (in Megabytes)

|Service Entry Message Server
|[3600]
|kbd:[Enter]

|Enter Group-ID of sapsys
|[100]
|kbd:[Enter]

|Enter Group-ID of oper
|[101]
|kbd:[Enter]

|Enter Group-ID of dba
|[102]
|kbd:[Enter]

|Enter User-ID of `oraprd`
|[1002]
|kbd:[Enter]

|Enter User-ID of `prdadm`
|[1000]
|kbd:[Enter]

|LDAP support
|
|3kbd:[Enter] (no support)

|Installation step completed
|[1] (continue)
|kbd:[Enter]

|Choose installation service
|[1] (DB inst,file)
|kbd:[Enter]
|===

Пока создание пользователей дает сообщение об ошибке при установке на стадиях OSUSERDBSID_IND_ORA (создание пользователя `ora_sid_`) и OSUSERSIDADM_IND_ORA (создание пользователя `_sid_adm`).

За исключением некоторых упомянутых далее проблем, все должно идти нормально до момента, когда придется устанавливать программное обеспечение для работы с базой данных Oracle(R).

[[installingoracle805]]
=== Установка Oracle(R) 8.0.5

Описания возможных проблем с Linux и Сервером Oracle(R) см. в соответствующих файлах SAP(R) Notes и Oracle(R) [.filename]#Readme#. Большинство, если не все проблемы, связаны с несовместимыми библиотеками.

Подробнее об установке Oracle(R) см. в разделе <<linuxemu-oracle,Установка Oracle(R)>>.

[[installingtheoracle805withorainst]]
==== Установка Oracle(R) 8.0.5 с помощью `orainst`

Если надо использовать Oracle(R) 8.0.5, для успешной перекомпоновки понадобится несколько дополнительных библиотек, поскольку Oracle(R) 8.0.5 был скомпонован со старой версией glibc (RedHat 6.0), но уже RedHat 6.1 использует новую библиотеку glibc. Так что, для успешной перекомпоновки нужно установить следующие дополнительные пакеты:

[.filename]#compat-libs-5.2-2.i386.rpm#

[.filename]#compat-glibc-5.2-2.0.7.2.i386.rpm#

[.filename]#compat-egcs-5.2-1.0.3a.1.i386.rpm#

[.filename]#compat-egcs-c++-5.2-1.0.3a.1.i386.rpm#

[.filename]#compat-binutils-5.2-2.9.1.0.23.1.i386.rpm#

Дополнительную информацию см. в файлах SAP(R) Notes или Oracle(R) [.filename]#Readme#. Если установить эти пакеты не представляется возможным (на момент установки у нас не было времени, чтобы это проверить), можно использовать исходные двоичные модули или перекомпонованные двоичные модули с исходной системы RedHat.

Для компиляции интеллектуального агента должен быть установлен пакет RedHat Tcl. Если вы не можете найти пакет [.filename]#tcl-8.0.3-20.i386.rpm#, подойдет и более новый, вроде [.filename]#tcl-8.0.5-30.i386.rpm# для RedHat 6.1.

За исключением перекомпоновки, установка выполняется просто:

[source,shell]
....
# su - oraids
# export TERM=xterm
# export ORACLE_TERM=xterm
# export ORACLE_HOME=/oracle/IDS
# cd $ORACLE_HOME/orainst_sap
# ./orainst
....

Нажимайте на всех экранах клавишу kbd:[Enter], пока программное обеспечение не будет установлено, убрав только пометку выбора с _Oracle(R) On-Line Text Viewer_, поскольку этого компонента для Linux сейчас нет. Oracle(R) затем захочет перекомпоновать модули с помощью `i386-glibc20-linux-gcc` вместо имеющихся `gcc`, `egcs` или `i386-redhat-linux-gcc`.

Из-за нехватки времени мы решили использовать двоичные модули из версии Oracle(R) 8.0.5 PreProduction после того, как первая попытка заставить работать версию с RDBMS CD провалилась, - попытки найти и загрузить требуемые пакеты RPM нам показались настоящим кошмаром.

[[installingtheoracle805preproduction]]
==== Установка Oracle(R) 8.0.5 Pre-production Release для Linux (ядро 2.0.33)

Эту установку выполнить очень легко. Монтируем CD, запускаем инсталлятор. Затем он запрашивает местонахождение начального каталога Oracle(R) и копирует туда двоичные модули. Мы, однако, не удаляли остатки прежних попыток установить RDBMS.

В конечном итоге, базу данных Oracle(R) удалось запустить без проблем.

[[installingoracle817]]
=== Установка tar-архива Oracle(R) 8.1.7 для Linux

Создайте tar-архив [.filename]#oracle81732.tgz# каталога установки на Linux-системе и разархивируйте его в каталог [.filename]#/oracle/SID/817_32/#.

[[continuewithsapr4installation]]
=== Продолжение установки SAP(R) R/3(R)

Сначала проверьте настройку среды для пользователей `idsamd` (_sid_adm) и `oraids` (ora_sid_). У них обоих должны теперь быть файлы [.filename]#.profile#, [.filename]#.login# и [.filename]#.cshrc#, использующие `hostname`. Если имя хоста в системе полностью уточнено, надо заменить `hostname` командой `hostname -s` во всех трех файлах.

[[databaseload]]
==== Загрузка базы данных

Потом команду `R3SETUP` можно либо перезапустить, либо продолжить (в зависимости от того, была ли завершена ее работа). `R3SETUP` затем создает табличные пространства и загружает данные (для 46B IDES - с дисков от EXPORT1 до EXPORT6, для 46C - с дисков от DISK1 до DISK4) в базу данных с помощью утилиты `R3load`.

После завершения загрузки базы данных (это может занять несколько часов), будет запрошено несколько паролей. Для тестовых установок можно использовать хорошо известные стандартные пароли (но если защита важна - используйте другие!):

[.informaltable]
[cols="1,1", frame="none", options="header"]
|===
| Вопрос
| Ответ

|Enter Password for sapr3
|sapkbd:[Enter]

|Confirum Password for sapr3
|sapkbd:[Enter]

|Enter Password for sys
|change_on_installkbd:[Enter]

|Confirm Password for sys
|change_on_installkbd:[Enter]

|Enter Password for system
|managerkbd:[Enter]

|Confirm Password for system
|managerkbd:[Enter]
|===

Мы столкнулись с несколькими проблемами с `dipgntab` при установке 4.6B.

[[listener]]
==== Процесс прослушивания

Запустите процесс прослушивания (Oracle(R) Listener) от имени пользователя `ora_sid_` следующим образом:

[source,shell]
....
% umask 0; lsnrctl start
....

В противном случае, вы можете получить сообщение об ошибке ORA-12546, поскольку у сокетов будут неправильные права доступа. См. SAP(R) Note 072984.

[[mnlstables]]
==== Обновление таблиц MNLS

Если вы планируете использовать в системе SAP(R) языки, для которых не подходит кодировка Latin-1, придется изменить таблицы Multi National Language Support. Эта процедура описана в SAP(R) OSS Notes 15023 и 45619. Если же нет, можете пропустить этот вопрос в ходе установки SAP(R).

[NOTE]
====
Если вам не нужна поддержка MNLS, все равно необходимо проверить таблицу TCPDB и инициализировать ее, если это еще не было сделано. Дополнительную информацию см. в SAP(R) Note 0015023 и 0045619.
====

[[postinstallationsteps]]
=== Шаги после установки

[[requestsapr3licensekey]]
==== Запрос лицензионного ключа SAP(R) R/3(R)

Вы должны запросить ваш лицензионный ключ SAP(R) R/3(R). Это необходимо, поскольку временная лицензия, использованная в ходе установки, действительна только четыре недели. Сначала получите ключ оборудования. Зарегистрируйтесь как пользователь `idsadm` и вызовите команду `saplicense`:

[source,shell]
....
# /sapmnt/IDS/exe/saplicense -get
....

При вызове команды `saplicense` без параметров будет выдан список опций. После получения лицензионного ключа, его можно установить с помощью команды:

[source,shell]
....
# /sapmnt/IDS/exe/saplicense -install
....

Затем вас попросят ввести следующие значения:

[.programlisting]
....
SAP SYSTEM ID   = SID, 3 символа
CUSTOMER KEY    = ключ оборудования, 11 символов
INSTALLATION NO = установка, 10 цифр
EXPIRATION DATE = yyyymmdd, обычно - "99991231"
LICENSE KEY     = лицензионный ключ, 24 символа
....

[[creatingusers]]
==== Создание пользователей

Создайте пользователя в клиенте 000 (некоторые задачи обязательно надо выполнять из клиента 000, от имени пользователя, отличающегося от `sap*` и `ddic`). В качестве имени пользователя мы обычно выбираем `wartung` (или `service`, по английски). Требуются профили `sap_new` и `sap_all`. Для дополнительной защиты надо изменить пароли стандартных пользователей на всех клиентах (в том числе, пользователей `sap*` и `ddic`).

[[configtranssysprofileopermodesetc]]
==== Конфигурирование системы передачи, профиля, режимов работы и т.п.

В клиенте 000, от имени пользователя, отличающегося от `ddic` и `sap*`, выполните, как минимум, следующее:

[.informaltable]
[cols="1,1", frame="none", options="header"]
|===
| Задача
| Транзакция

|Сконфигурируйте систему передачи, например, как _Stand-Alone Transport Domain Entity_
|STMS

|Создайте/Отредактируйте профиль для системы
|RZ10

|Сконфигурируйте режимы работы и экземпляры
|RZ04
|===

Эти и другие шаги, которые надо выполнить после установки, подробно описаны в руководствах по установке SAP(R).

[[editintsidsap]]
==== Редактирование [.filename]#initsid.sap# ([.filename]#initIDS.sap#)

Файл [.filename]#/oracle/IDS/dbs/initIDS.sap# содержит профиль резервного копирования SAP(R). Здесь надо задать размер используемой ленты, тип сжатия и т.д. Чтобы можно было использовать `sapdba` / `brbackup`, мы изменили следующие значения:

[.programlisting]
....
compress = hardware
archive_function = copy_delete_save
cpio_flags = "-ov --format=newc --block-size=128 --quiet"
cpio_in_flags = "-iuv --block-size=128 --quiet"
tape_size = 38000M
tape_address = /dev/nsa0
tape_address_rew = /dev/sa0
....

Объяснения:

`compress`: мы использовали ленту HP DLT1, которая поддерживает аппаратное сжатие.

`archive_function`: этот параметр задает стандартное поведение для сохранения архивных журналов Oracle(R): новые журнальные файлы сохраняются на ленту, уже сохраненные файлы журнала сохраняются еще раз, а затем удаляются. Это предотвращает многочисленные проблемы, если потребуется восстановить базу данных, а одна из архивных лент окажется сбойной.

`cpio_flags`: по умолчанию используется `-B`, что устанавливает размер блока 5120 байт. Для лент DLT компания HP рекомендует размер блока не меньше 32 Кбайт, поэтому мы использовали значение `--block-size=128` для задания размера блока 64 Кбайта. Опция `--format=newc` необходима, поскольку у нас есть индексные дескрипторы (inodes) с номерами больше 65535. Последняя опция, `--quiet` необходима потому, что иначе команда `brbackup` выдает сообщение об ошибке, как только команда `cpio` выдаст количество сохраненных блоков.

`cpio_in_flags`: флаги, необходимые для загрузки данных с ленты. Формат распознается автоматически.

`tape_size`: обычно этот параметр задает реальную ёмкость ленты. Из соображений надежности (мы используем аппаратное сжатие), задано значение несколько меньше фактического.

`tape_address`: устройство без перемотки для использования в команде `cpio`.

`tape_address_rew`: устройство с перемоткой для использования в команде `cpio`.

==== Проблемы конфигурирования после установки

Следующие параметры SAP(R) надо настроить после установки (примеры для IDES 46B, 1 Гбайт памяти):

[.informaltable]
[cols="1,1", frame="none", options="header"]
|===
| Имя
| Значение

|ztta/roll_extension
|250000000

|abap/heap_area_dia
|300000000

|abap/heap_area_nondia
|400000000

|em/initial_size_MB
|256

|em/blocksize_kB
|1024

|ipc/shm_psize_40
|70000000
|===

SAP(R) Note 0013026:

[.informaltable]
[cols="1,1", frame="none", options="header"]
|===
| Имя
| Значение

|ztta/dynpro_area
|2500000
|===

SAP(R) Note 0157246:

[.informaltable]
[cols="1,1", frame="none", options="header"]
|===
| Имя
| Значение

|rdisp/ROLL_MAXFS
|16000

|rdisp/PG_MAXFS
|30000
|===

[NOTE]
====
При указанных выше параметрах в системе с 1 Гбайт памяти можно обнаружить примерно следующее использование памяти:

[.programlisting]
....
Mem: 547M Active, 305M Inact, 109M Wired, 40M Cache, 112M Buf, 3492K Free
....

====

[[problemsduringinstallation]]
=== Проблемы в ходе установки

[[restartr3setup]]
==== Перезапуск `R3SETUP` после устранения проблемы

`R3SETUP` останавливается при выявлении ошибки. Если вы просмотрели соответствующие журнальные файлы и исправили ошибку, придется запускать `R3SETUP` снова, обычно выбирая REPEAT как опцию для последнего шага, на котором команда `R3SETUP` выдала сообщение об ошибке.

Для перезапуска команды `R3SETUP` просто запустите её с соответствующим файлом [.filename]#R3S#:

[source,shell]
....
# ./R3SETUP -f CENTRDB.R3S
....

для 4.6B или с файлом

[source,shell]
....
# ./R3SETUP -f CENTRAL.R3S
....

для 4.6C, независимо от того, произошла ли ошибка при работе с файлом [.filename]#CENTRAL.R3S# или [.filename]#DATABASE.R3S#.

[NOTE]
====
На некоторых стадиях команда `R3SETUP` предполагает, что запущены и работают процессы как сервера базы данных, так и SAP(R) (поскольку эти шаги уже выполнены). Если возникнут ошибки и, например, запустить сервер базы данных не получится, придется вручную запускать сервер базы данных и SAP(R) после исправления ошибок и до повторного запуска `R3SETUP`.

Не забудьте также снова запустить процесс прослушивания Oracle(R) (как пользователь `ora_sid_` с помощью команды `umask 0; lsnrctl start`), если он тоже был остановлен (например, из-за необходимой перезагрузки системы).
====

[[indoraduringduringr3setup]]
==== OSUSERSIDADM_IND_ORA в ходе `R3SETUP`

Если `R3SETUP` выдает сообщения об ошибках на этом этапе, отредактируйте используемый при этом файл шаблона `R3SETUP` ([.filename]#CENTRDB.R3S# (4.6B), либо [.filename]#CENTRAL.R3S# или [.filename]#DATABASE.R3S# (4.6C)). Найдите раздел `[OSUSERSIDADM_IND_ORA]` или поищите единственную запись `STATUS=ERROR` и отредактируйте следующие значения:

[.programlisting]
....
HOME=/home/sidadm (было пусто)
STATUS=OK (был статус ERROR)
....

Затем надо снова перезапустить `R3SETUP`.

[[indoraduringr3setup]]
==== OSUSERDBSID_IND_ORA в ходе `R3SETUP`

Возможно, команда `R3SETUP` также выдаст сообщения об ошибке на этой стадии. Ошибка здесь аналогична возникающей на стадии OSUSERSIDADM_IND_ORA. Просто отредактируйте используемый файл шаблона `R3SETUP` ([.filename]#CENTRDB.R3S# (4.6B), либо [.filename]#CENTRAL.R3S# или [.filename]#DATABASE.R3S# (4.6C)). Найдите раздел `[OSUSERDBSID_IND_ORA]` или поищите единственную запись `STATUS=ERROR` и отредактируйте следующее значение в этом разделе:

[.programlisting]
....
STATUS=OK
....

Затем перезапустите `R3SETUP`.

[[oraviewvrffilenotfound]]
==== `oraview.vrf FILE NOT FOUND` в ходе установки Oracle(R)

Вы не сняли выбор с _Oracle(R) On-Line Text Viewer_ перед началом установки. Он помечен для установки, хотя этот продукт и не доступен сейчас для Linux. Снимите пометку с этого продукта в меню установки Oracle(R) и перезапустите установку.

[[textenvincalid]]
==== `TEXTENV_INVALID` в ходе `R3SETUP`, RFC или запуска SAPgui

Если возникает эта ошибка, не найдена нужная локаль. SAP(R) Note 0171356 перечисляет необходимые пакеты RPM, которые надо установить (например, [.filename]#saplocales-1.0-3#, [.filename]#saposcheck-1.0-1# для RedHat 6.1). Если игнорировать все ошибки и менять `STATUS` соответствующих шагов с `ERROR` на `OK` (в файле [.filename]#CENTRDB.R3S#) каждый раз, когда `R3SETUP` сообщает об ошибке и просто перезапуск ать `R3SETUP`, система SAP(R) не будет правильно сконфигурирована, и вы затем не сможете подключиться к системе с помощью SAPgui, хотя запустить систему и получится. Попытка подключения с помощью старой Linux-версии SAPgui приведет к выдаче следующих сообщений:

[.programlisting]
....
Sat May 5 14:23:14 2001
*** ERROR => no valid userarea given [trgmsgo. 0401]
Sat May 5 14:23:22 2001
*** ERROR => ERROR NR 24 occured [trgmsgi. 0410]
*** ERROR => Error when generating text environment. [trgmsgi. 0435]
*** ERROR => function failed [trgmsgi. 0447]
*** ERROR => no socket operation allowed [trxio.c 3363]
Speicherzugriffsfehler
....

Это связано с тем, что система SAP(R) R/3(R) не может корректно назначить локаль и сама не была надлежащим образом сконфигурирована (не хватает записей в некоторых таблицах базы данных). Чтобы можно было подключиться к SAP(R), добавьте следующие записи в файл [.filename]#DEFAULT.PFL# (см. Note 0043288):

[.programlisting]
....
abap/set_etct_env_at_new_mode = 0
install/collate/active = 0
rscp/TCP0B = TCP0B
....

Перезапустите систему SAP(R). Теперь вы можете подключиться к системе, хотя специфические для страны языковые установки могут работать не так, как предполагалось. После исправления настроек страны (и добавления соответствующих локалей) эти записи можно удалить из файла [.filename]#DEFAULT.PFL# и перезапустить систему SAP(R).

[[ora-00001]]
==== ORA-00001

Эта ошибка возникает только с Oracle(R) 8.1.7 на FreeBSD. Причина в том, что сервер Oracle(R) не может правильно проинициализироваться и аварийно завершает работу, оставляя не освобожденными в системе семафоры и совместно используемую память. При следующей попытке запустить сервер базы данных выдается ошибка ORA-00001.

Найдите оставшиеся семафоры и сегменты памяти с помощью команды `ipcs -a` и удалите с помощью `ipcrm`.

[[ora-00445pmon]]
==== ORA-00445 (фоновый процесс PMON не запущен)

Эта ошибка произошла с Oracle(R) 8.1.7. Она выдается, если сервер был запущен с помощью обычного скрипта `startsap` (например, `startsap_majestix_00`) от имени пользователя `prdadm`.

Возможный способ обхода - запускать сервер базы данных от имени пользователя `oraprd` с помощью `svrmgrl`:

[source,shell]
....
% svrmgrl
SVRMGR> connect internal;
SVRMGR> startup;
SVRMGR> exit
....

[[ora-12546]]
==== ORA-12546 (запускайте процесс прослушивания с правильными правами)

Запускайте процесс прослушивания Oracle(R) от имени пользователя `oraids` следующими командами:

[source,shell]
....
# umask 0; lsnrctl start
....

В противном случае, вы можете получить сообщение об ошибке ORA-12546, поскольку сокеты не будут иметь нужных прав доступа. См. SAP(R) Note 0072984.

[[ora-27102]]
==== ORA-27102 (не хватает памяти)

Эта ошибка произошла при попытке использовать значения `MAXDSIZ` и `DFLDSIZ` больше 1 Гбайта (1024x1024x1024). Кроме того, мы получили `Linux Error 12: Cannot allocate memory`.

[[dipgntabindind]]
==== [DIPGNTAB_IND_IND] в ходе `R3SETUP`

В общем случае, см. SAP(R) Note 0130581 (прекращается работа `R3SETUP` на шаге `DIPGNTAB`). В ходе установки IDES-версии по каким-то причинам процесс установки использовал вместо правильного имени системы SAP(R), "IDS", пустую строку, `""`. Это приводит к небольшим проблемам при доступе к каталогам, поскольку пути генерируются динамически на базе _SID_ (в данном случае, IDS). Поэтому вместо обращения к:

[.programlisting]
....
/usr/sap/IDS/SYS/...
/usr/sap/IDS/DVMGS00
....

используются следующие пути:

[.programlisting]
....
/usr/sap//SYS/...
/usr/sap/D00
....

Чтобы продолжить установку мы создали ссылку и дополнительный каталог:

[source,shell]
....
# pwd
/compat/linux/usr/sap
# ls -l
total 4
drwxr-xr-x 3  idsadm sapsys 512 May 5 11:20 D00
drwxr-x--x 5  idsadm sapsys 512 May 5 11:35 IDS
lrwxr-xr-x 1  root   sapsys 7 May 5 11:35 SYS -> IDS/SYS
drwxrwxr-x 2  idsadm sapsys 512 May 5 13:00 tmp
drwxrwxr-x 11 idsadm sapsys 512 May 4 14:20 trans
....

Мы также нашли документы SAP(R) Notes (0029227 и 0008401), описывающие это поведение. Мы не столкнулись с подобными проблемами при установке SAP(R) 4.6C.

[[rfcrswboiniindind]]
==== [RFCRSWBOINI_IND_IND] в ходе `R3SETUP`

В ходе установки SAP(R) 4.6C, эта ошибка возникла в результате другой ошибки, произошедшей ранее по ходу установки. В данном случае придется просмотреть соответствующие журнальные файлы и устранить исходную проблему.

Если после просмотра журнальных файлов выявлена только эта ошибка (проверьте SAP(R) Notes), можно поменять `STATUS` соответствующего шага с `ERROR` на `OK` (в файле [.filename]#CENTRDB.R3S#) и перезапустить `R3SETUP`. После установки надо выполнить отчет `RSWBOINS` из транзакции SE38. Дополнительную информацию о стадиях `RFCRSWBOINI` и `RFCRADDBDIF` см. в SAP(R) Note 0162266.

[[rfcraddbdifindind]]
==== [RFCRADDBDIF_IND_IND] в ходе `R3SETUP`

Здесь применяются те же ограничения: проверьте путем просмотра журнальных файлов, что эта ошибка не вызвана какими-то предыдущими проблемами.

Если подтверждается, что применим документ SAP(R) Note 0162266, просто поменяйте `STATUS` соответствующего шага с `ERROR` на `OK` (в файле [.filename]#CENTRDB.R3S#) и перезапустите `R3SETUP`. После установки надо выполнить отчет `RADDBDIF` из транзакции SE38.

[[sigactionsig31]]
==== sigaction sig31: File size limit exceeded

Это сообщение об ошибке выдается в ходе запуска процессов SAP(R)_disp+work_. Если SAP(R) запускается скриптом `startsap`, запускаются отдельные подпроцессы, выполняющие грязную работу по запуску всех остальных процессов SAP(R). В результате, сам скрипт не получит уведомления, если что-то пойдет не так.

Чтобы проверить, нормально ли запустились процессы SAP(R), посмотрите на состояние процессов с помощью команды `ps ax | grep _SID_`, которая выдаст список всех процессов Oracle(R) и SAP(R). Если похоже, что некоторых процессов не хватает или вы не можете подключиться к системе SAP(R), просмотрите соответствующие журнальные файлы, которые можно найти в каталоге [.filename]#/usr/sap/SID/DVEBMGSnr/work/#. Надо просматривать файлы [.filename]#dev_ms# и [.filename]#dev_disp#.

Сигнал 31 выдается, если объем памяти, совместно используемой Oracle(R) и SAP(R), превосходит заданный в файле конфигурации ядра, и от него можно избавиться, указав большее значение:

[.programlisting]
....
# большее значение для производственных систем 46C:
options SHMMAXPGS=393216
# меньшее значение, достаточное для 46B:
#options SHMMAXPGS=262144
....

[[saposcolfails]]
==== Сбой при запуске `saposcol`

Есть ряд проблем с программой `saposcol` (версии 4.6D). Система SAP(R) использует `saposcol` для сбора данных о производительности системы. Эта программа не нужна для использования системы SAP(R), так что проблему можно отнести к несерьезным. Более старые версии (4.6B) работают, но собирают не все данные (многие вызовы просто возвращают 0, например, для использования процессора).

[[linuxemu-advanced]]
== Дополнительные сведения

Если вы интересуетесь, как обеспечивается двоичная совместимость с Linux, этот раздел для вас. Большинство материала взято из электронного письма, адресованного Terry Lambert mailto:tlambert@primenet.com[tlambert@primenet.com] в {freebsd-chat} (ID письма: `<199906020108.SAA07001@usr09.primenet.com>`).

=== Как все это устроено?

FreeBSD поддерживает абстракцию, называемую "загрузчик выполняемых классов". Фактически, он является первой стадией системного вызова man:execve[2].

На самом деле, FreeBSD имеет список загрузчиков вместо одного, завершающийся загрузчиком `#!` для запуска любых командных интерпретаторов и скриптов.

Исторически сложилось, что единственный загрузчик в UNIX(R) системах проверял "магическое число" (чаще всего первые 4 или 8 байт файла), чтобы определить, известен ли формат двоичного файла системе, и если да, то вызвал соответствующий загрузчик.

Если файл не опознавался системой как двоичный, системный вызов man:execve[2] возвращал ошибку, и текущий командный интерпретатор начинал выполнять файл как скрипт.

По умолчанию скрипт выполнялся "текущим командным интерпретатором".

Позднее, man:sh[1] был модифицирован, так, чтобы проверять первые два символа в файле, и если они оказывались `:\n`, то файл выполнялся как сценарий для man:csh[1] (утверждается, что SCO были первыми, кто сделал эту модификацию).

FreeBSD сейчас ведет себя по-другому: пробегает по списку загрузчиков,включающему специальный загрузчик `#!`, который вызывает нужный интерпретатор, указанный после этих символов до следующего пробела, или [.filename]##/bin/sh##, если не нашел подходящего.

Для поддержки Linux ABI FreeBSD ищет магическое число, соответствующее двоичному файлу ELF (на этой стадии не различаются FreeBSD, Solaris(TM), Linux или любая другая ОС поддерживающая формат ELF).

Далее, ELF-загрузчик определяет "марку" (brand) двоичного файла ELF (специальный комментарий в ELF-файле, отсутствующий в двоичных файлах ELF SVR4/Solaris(TM)).

Соответственно, Linux программы должны быть "маркированы" для `Linux` (например, с помощью утилиты man:brandelf[1]):

[source,shell]
....
# brandelf -t Linux file
....

Когда это сделано, загрузчик ELF выявит марку `Linux` в файле.

Когда ELF-загрузчик находит "марку" `Linux`, он заменяет соответствующий указатель в структуре `proc`. Все системные вызовы индексируются через этот указатель (в традиционной UNIX(R) системе это массив структур `sysent[]`, содержащий системные вызовы). Кроме того, процесс помечается для специальной обработки вектора обработчиков сигналов, а также ряда других (небольших) исправлений, которые осуществляются специальным модулем ядра для поддержки Linux.

Вектор системных вызовов Linux содержит, среди прочего, список записей `sysent[]`, адреса которых находятся в модуле ядра.

При выполнении системного вызова из двоичного файла Linux, код обработчика разыменовывает указатель на функцию системного вызова из структуры `proc`, и получает точки входа системных вызовов Linux, а не FreeBSD.

Плюс ко всему, в Linux-режиме динамически "изменяется корень" файловой системы при поиске файлов; фактически так же, как и параметр `union` при монтировании файловых систем (не путать с `unionfs`!). Сперва, файл ищется в каталоге [.filename]#/compat/linux/исходное_полное_имя# и только затем, в случае неудачи, в [.filename]#/исходное_полное_имя#. Это гарантирует, что программы, которым требуются другие программы, смогут работать (например, весь набор инструментальных средств Linux сможет работать в среде поддержки Linux ABI). Это также дает возможность Linux программам выполнять FreeBSD команды, если не найдется соответствующих Linux команд. Например, можно скопировать FreeBSD man:uname[1] в дерево каталогов [.filename]#/compat/linux#, и Linux-программы не смогут разобраться, что они работают не в Linux.

Фактически, имеется ядро Linux в ядре FreeBSD; различные базовые функции, реализующие все услуги ядра, идентичны как в записях таблицы системных вызовов FreeBSD, так и в записях таблицы системных вызовов Linux: операции с файловой системой, виртуальная память, средства доставки сигналов, System V IPC ... Единственное отличие в том, что FreeBSD-программы получают _интерфейсные_ функции FreeBSD, а Linux-программы получают _интерфейсные_ функции Linux (в большинстве более старых ОС есть только их собственные интерфейсные функции: функции берутся из статического глобального массива структур `sysent[]`, а не из массива, полученного разыменованием динамически проинициализированного указателя в структуре `proc` процесса, выполняющего вызов).

Какая же реализация ABI для FreeBSD "родная"? Это не имеет значения. Единственное различие (на данный момент, в будущем все может и, вероятно, изменится), пожалуй, в том, что функции системных вызовов FreeBSD зашиты в ядро, а для Linux они могут быть либо статически скомпонованы в ядро, либо получаться через модуль ядра.

Да, но можно ли назвать это эмуляцией? Нет. Это реализация ABI, а не эмуляция. Как таковой, эмулятор (или симулятор) отсутствует.

В таком случае, почему же иногда говорят об "эмуляции Linux"? Чтобы "насолить" FreeBSD! Фактически, причина в том, что на момент первой реализации не существовало слова, которое бы точнее описывало этот процесс. Нельзя было сказать, что FreeBSD запускает приложения Linux (без перекомпиляции или загрузки соответствующего модуля ядра это невозможно). Но надо было как-то описать, что загружается - отсюда и "эмулятор Linux".
