<!--
     The FreeBSD Documentation Project

     Original Revision: 1.123
     $FreeBSD$
-->

<chapter id="linuxemu">
  <chapterinfo>
    <authorgroup>
      <author>
	<firstname>Jim</firstname>
	<surname>Mock</surname>
	<contrib>Restructured and parts updated by </contrib>
      </author>
      <!-- 22 Mar 2000 -->
    </authorgroup>
    <authorgroup>
      <author>
	<firstname>Brian N.</firstname>
	<surname>Handy</surname>
	<contrib>Originally contributed by </contrib>
      </author>
      <author>
	<firstname>Rich</firstname>
	<surname>Murphey</surname>
      </author>
    </authorgroup>
  </chapterinfo>

<title>Linux二进制兼容模式</title>

  <sect1 id="linuxemu-synopsis">
    <title>概述</title>
    <indexterm><primary>Linux二进制兼容模式</primary></indexterm>
    <indexterm>
      <primary>二进制兼容模式</primary>
      <secondary>Linux</secondary>
    </indexterm>

    <para>FreeBSD 提供了与其他几种类
      &unix; 操作系统， 包括 Linux， 的兼容性。 现在您可能会问， 为什么
      FreeBSD 需要能够运行 Linux 的可执行文件？ 答案很简单。
      许多公司和开发人员只为 Linux 开发程序，
      因为这是目前计算机世界 <quote>最热门</quote> 的技术。
      这使得我们 FreeBSD 用户不得不去劝说这些公司和开发人员提供他们应用程序可以直接在
      FreeBSD 上运行的版本。 问题是， 许多这样的公司并不真的知道到底提供了
      FreeBSD 版本之后能带来多少用户， 因此许多仍然只开发 Linux
      的版本。 这时 FreeBSD 用户能做什么呢？ 答案就是使用 FreeBSD
      所提供的 Linux 二进制兼容性。</para>

    <para>简而言之， 这种兼容性能够让 FreeBSD 用户不加修改地直接运行大约 90%
      的 Linux 应用程序。 这包括类似 <application>&staroffice;</application>，
      Linux 版本的 <application>&netscape;</application>，
      <application>&adobe;&nbsp;&acrobat;</application>，
      <application><trademark class="registered">RealPlayer</trademark></application>，
      <application><trademark>VMware</trademark></application>，
      <application>&oracle;</application>，
      <application><trademark class="registered">WordPerfect</trademark></application>，
      <application>Doom</application>，
      <application>Quake</application>， 等等。 此外， 也有人说，
      某些情况下， 在 FreeBSD 上面运行的 Linux 程序的性能，
      甚至好于直接在 Linux 上面运行。</para>

    <para>然而， 仍然有一些只有 Linux 才有的操作系统特性在 FreeBSD 上并不被支持。
      如果 Linux 程序过分地使用只能在 &i386; 上使用的特性，
      例如启用虚拟 8086 模式， 则也有可能无法在 FreeBSD 上运行。</para>

    <para>读完这章，您将了解到：</para>
    <itemizedlist>
      <listitem>
         <para> 如何在您的系统中启用Linux兼容模式。</para>
      </listitem>

      <listitem>
	<para>如何安装额外的Linux共享库。</para>
	</listitem>

      <listitem>
        <para>如何在FreeBSD上安装Linux应用程序。</para>
      </listitem>

      <listitem>
	<para>在FreeBSD上，Linux兼容模式的执行细节。</para>
      </listitem>
    </itemizedlist>

    <para>阅读这章之前，您应该知道：</para>

    <itemizedlist>
      <listitem>
	<para>如何安装第三方软件（<xref linkend="ports">）。</para>
      </listitem>
    </itemizedlist>

  </sect1>

  <sect1 id="linuxemu-lbc-install">
    <title>安装</title>

    <indexterm><primary>KLD (kernel loadable object)</primary></indexterm>

    <para>默认的Linux兼容模式没有被打开。启用这个功能的最容易的方法是调用<literal>linux</literal>
    KLD对象（<quote>Kernel LoaDable object</quote>）。您可以在命令行通过健入<command>linux</command>来加载这个模块。
    </para>

    <para>如果您想让Linux二进制兼容性总是被启用，您可以在<filename>/etc/rc.conf</filename>加入下面这一行：</para>

    <programlisting>linux_enable="YES"</programlisting>

    <para>&man.kldstat.8;可以用来检查KLD模块是否加载：</para>

    <screen>&prompt.user; <userinput>kldstat</userinput>
Id Refs Address    Size     Name
 1    2 0xc0100000 16bdb8   kernel
 7    1 0xc24db000 d000     linux.ko</screen>
    <indexterm>
      <primary>内核选项</primary>
      <secondary>LINUX</secondary>
    </indexterm>

    <para>如果您不想或者无法将Linux KLD加载，您就需要在内核中静态链接进Linux二进制兼容模式。您必须在
      您的内核配置文件里面加入<literal>options COMPAT_LINUX</literal>，然后按照<xref linkend="kernelconfig">重新编译内核。
      </para>

    <sect2>
      <title>安装Linux运行时库</title>
      <indexterm>
	<primary>Linux</primary>
	<secondary>安装Linux运行时库</secondary>
      </indexterm>

      <para>有两种方法来安装Linux运行时库，要么使用<link linkend="linuxemu-libs-port">linux_base</link> port，
      要么<link linkend="linuxemu-libs-manually">手动</link>安装。</para>

      <sect3 id="linuxemu-libs-port">
	<title>通过使用 linux_base Port 来安装</title>
	<indexterm><primary>Ports Collection</primary></indexterm>

	<para>这是最容易的安装方法，只需要像安装其他port一样从
	<ulink type="html" url="file://localhost/usr/ports/">Ports Collection</ulink>来安装：</para>

	<screen>&prompt.root; <userinput>cd /usr/ports/emulators/linux_base</userinput>
&prompt.root; <userinput>make install distclean</userinput></screen>

	<para>
	您现在应当是工作在Linux兼容模式下了。一些程序可能会提示系统库的版本不正确。通常，这不是问题。</para>

	<note><para>有多个版本的<filename
	  role="package">emulators/linux_base</filename> port，针对不同的版本的Linux。
	  您应该选择最接近Linux应用程序需要的那个版本来安装。</para></note>

      </sect3>

      <sect3 id="linuxemu-libs-manually">
	<title>手动安装</title>

	<para>如果您没有安装 Ports Collection，您也可以通过手动来安装Linux运行时库。
          您将需要这些程序依赖的Linux共享库，而且您需要创建一个<quote>shadow root</quote>
	  目录<filename>/compat/linux</filename>，任何要被Linux程序打开的共享库都首先在这个目录里面查找。
	  所以，如果一个Linux程序加载了，例如，<filename>/lib/libc.so</filename>，FreeBSD 会首先尝试打开
	  <filename>/compat/linux/lib/libc.so</filename>，如果不存在，它将尝试打开<filename>/lib/libc.so</filename>。
	  共享库应该安装在<filename>/compat/linux/lib</filename>而不是Linux <command>ld.so</command>报告的其他路径。</para>

	<para>通常，您需要寻找Linux程序依赖的共享库。 此后，
	  你的系统上就会有一组 Linux 共享库，
	  这组共享库足以用来运行新安装的 Linux 二进制程序。</para>
      </sect3>

      <sect3>
	<title>如何安装额外的共享库</title>
	<indexterm><primary>共享库</primary></indexterm>

	<para>如果您安装了<filename>linux_base</filename> port，但是您的
	  您的应用程序仍会报告丢失共享库的信息？您如何知道Linux程序需要哪个共享库？
	  基本上，有两种可能性（接下来的指令需要<username>root</username>权限）：</para>

	<para>如果您有可以访问的Linux系统， 看看应用程序需要什么共享库，
	把它们拷贝到您的FreeBSD系统。看下面的例子：</para>

	<informalexample>
	  <para>我们假设您通过FTP得到Linux程序<application>Doom</application>，
	  并把它放在您能访问的Linux系统上。然后您可以通过<command>ldd linuxdoom</command>来检查需要哪些共享库，
	  就像这样：</para>

	  <screen>&prompt.user; <userinput>ldd linuxdoom</userinput>
libXt.so.3 (DLL Jump 3.1) =&gt; /usr/X11/lib/libXt.so.3.1.0
libX11.so.3 (DLL Jump 3.1) =&gt; /usr/X11/lib/libX11.so.3.1.0
libc.so.4 (DLL Jump 4.5pl26) =&gt; /lib/libc.so.4.6.29</screen>

	  <indexterm><primary>符号链接</primary></indexterm>
	  <para>您需要得到上面输出的右列的所有文件，并把他们拷贝到<filename>/compat/linux</filename>，
	    第一列的名字用符号连接指向它们。这样您的FreeBSD系统上就有了这些文件：</para>

	  <screen>/compat/linux/usr/X11/lib/libXt.so.3.1.0
/compat/linux/usr/X11/lib/libXt.so.3 -&gt; libXt.so.3.1.0
/compat/linux/usr/X11/lib/libX11.so.3.1.0
/compat/linux/usr/X11/lib/libX11.so.3 -&gt; libX11.so.3.1.0
/compat/linux/lib/libc.so.4.6.29
/compat/linux/lib/libc.so.4 -&gt; libc.so.4.6.29</screen>

	  <blockquote>
	    <note>
	      <para>如果您已经有了一个与<command>ldd</command> 输出的第一列的主修订号相匹配的Linux共享库，
	      您将不需要把右列命名的文件拷贝到您的系统，您已经完成了工作。
              如果有一个新的版本，那无论如何都要拷贝一个共享库。
	      您可以删掉旧的，您只要做一个符号连接到新的版本。
	      所以，如果有这些库在您的系统上：
	     </para>

	      <screen>/compat/linux/lib/libc.so.4.6.27
/compat/linux/lib/libc.so.4 -&gt; libc.so.4.6.27</screen>

	      <para>如果您根据<command>ldd</command>输出的发现需要一个更新版本的库：</para>

	      <screen>libc.so.4 (DLL Jump 4.5pl26) -&gt; libc.so.4.6.29</screen>

	      <para>如果结尾的数字只有一到两个版本过期，那也不要担心拷贝<filename>/lib/libc.so.4.6.29</filename>，
	      因为程序在稍微旧一些的版本上也能很好地工作。
	      然而，如果喜欢的话，您可以替换<filename>libc.so</filename>，变成这样：</para>

	      <screen>/compat/linux/lib/libc.so.4.6.29
/compat/linux/lib/libc.so.4 -&gt; libc.so.4.6.29</screen>
	    </note>
	  </blockquote>

	  <blockquote>
	    <note>
	      <para>符号链接机制<emphasis>仅仅是</emphasis>Linux程序需要的。
	      FreeBSD的运行时连接器会自己寻找匹配的主修订号，您不需要为此担心。</para>
	    </note>
	  </blockquote>
	</informalexample>
      </sect3>
    </sect2>

    <sect2>
      <title>安装Linux ELF程序</title>
      <indexterm>
	<primary>Linux</primary>
	<secondary>ELF程序</secondary>
      </indexterm>

      <para>ELF格式的程序需要一步额外的步骤<quote>标记</quote>。如果您尝试运行没有标记的ELF程序，
      您会得到像下面这样的错误信息：</para>

      <screen>&prompt.user; <userinput>./my-linux-elf-binary</userinput>
ELF binary type not known
Abort</screen>

      <para>为了帮助FreeBSD内核分辨FreeBSD ELF程序和Linux程序，要使用&man.brandelf.1;工具：</para>

      <screen>&prompt.user; <userinput>brandelf -t Linux my-linux-elf-binary</userinput></screen>

      <indexterm><primary>GNU工具</primary></indexterm>
      <para>GNU工具现在会自动把适当的标记信息放到ELF程序中，您以后遇到这个问题的机会越来越少。</para>
    </sect2>

    <sect2>
      <title>配置主机名解析器</title>

      <para>如果DNS不能正常工作或是您得到下列信息：</para>

      <screen>resolv+: "bind" is an invalid keyword resolv+:
"hosts" is an invalid keyword</screen>

      <para>您就需要配置<filename>/compat/linux/etc/host.conf</filename>文件，此文件包含：</para>

      <programlisting>order hosts, bind
multi on</programlisting>

      <para>order这一行指出<filename>/etc/hosts</filename>先被搜索再接着搜索DNS。
	如果<filename>/compat/linux/etc/host.conf</filename>没有被安装，Linux程序会读取FreeBSD的
	<filename>/etc/host.conf</filename>然后提示不兼容的FreeBSD语法。
	如果您没有使用<filename>/etc/resolv.conf</filename> 文件设置DNS，应该删除<literal>bind</literal>。
	</para>
    </sect2>
  </sect1>

  <sect1 id="linuxemu-mathematica">
    <sect1info>
      <authorgroup>
	<author>
	  <firstname>Murray</firstname>
	  <surname>Stokely</surname>
	  <contrib>Updated for Mathematica 4.X by </contrib>
	</author>
      </authorgroup>
      <authorgroup>
	<author>
	  <firstname>Bojan</firstname>
	  <surname>Bistrovic</surname>
	  <contrib>Merged with work by </contrib>
	</author>
      </authorgroup>
    </sect1info>
    <title>安装&mathematica;</title>

    <indexterm>
      <primary>applications</primary>
      <secondary><application>Mathematica</application></secondary>
    </indexterm>

    <para>这节描述在FreeBSD系统上安装Linux版的<application>&mathematica; 4.X</application>。
    </para>

    <para>Linux版<application>&mathematica;</application>在FreeBSD下运行的很好，但是
      由Wolfram打包的二进制程序需要标记才能让FreeBSD知道需要使用Linux ABI来执行它们。</para>

    <para>Linux版的<application>&mathematica;</application>
      或<application>&mathematica; for Students</application>
      可以从<ulink url="http://www.wolfram.com/"></ulink>直接定购。</para>

    <sect2>
      <title>标记Linux程序</title>
<para>
Linux程序可以在Wolfram发布的CDROM的<application>&mathematica; </application><filename>Unix</filename>目录中找到。
您必须将这个目录树拷贝到本地硬盘上，以便您能在运行安装程序之前用&man.brandelf.1; 来标记Linux程序：
</para>

      <screen>&prompt.root; <userinput>mount /cdrom</userinput>
&prompt.root; <userinput>cp -rp /cdrom/Unix/ /localdir/</userinput>
&prompt.root; <userinput>brandelf -t Linux /localdir/Files/SystemFiles/Kernel/Binaries/Linux/*</userinput>
&prompt.root; <userinput>brandelf -t Linux /localdir/Files/SystemFiles/FrontEnd/Binaries/Linux/*</userinput>
&prompt.root; <userinput>brandelf -t Linux /localdir/Files/SystemFiles/Installation/Binaries/Linux/*</userinput>
&prompt.root; <userinput>brandelf -t Linux /localdir/Files/SystemFiles/Graphics/Binaries/Linux/*</userinput>
&prompt.root; <userinput>brandelf -t Linux /localdir/Files/SystemFiles/Converters/Binaries/Linux/*</userinput>
&prompt.root; <userinput>brandelf -t Linux /localdir/Files/SystemFiles/LicenseManager/Binaries/Linux/mathlm</userinput>
&prompt.root; <userinput>cd /localdir/Installers/Linux/</userinput>
&prompt.root; <userinput>./MathInstaller</userinput></screen>

      <para>另外，您也可以简单地用下面的命令将默认的ELF标记成Linux:
      </para>
      <screen>&prompt.root; <userinput>sysctl kern.fallback_elf_brand=3</userinput></screen>
      <para>这将让FreeBSD知道没有标记的ELF程序使用Linux ABI，所以您将可以直接从CDROM来运行安装程序。 </para>
    </sect2>

    <sect2>
      <title>获得您的&mathematica; 密码</title>

      <para>在您运行<application>&mathematica;</application>之前，您必须从Wolfram获得对应您的<quote>机器ID</quote>的密码。
      </para>
      <indexterm>
	<primary>以太网</primary>
	<secondary>MAC地址</secondary>
      </indexterm>

      <para>一旦您安装了Linux运行时库，并把<application>&mathematica;</application>解包开了，
	您可以在安装目录通过运行<command>mathinfo</command>来获得您的<quote>机器ID</quote>。
	这个机器ID是以您的第一块以太网卡的MAC地址为基础的。</para>

      <screen>&prompt.root; <userinput>cd /localdir/Files/SystemFiles/Installation/Binaries/Linux</userinput>
&prompt.root; <userinput>mathinfo</userinput>
disco.example.com 7115-70839-20412</screen>

      <para>当您用email,电话或者传真向Wolfram注册时，给他们您的<quote>机器ID</quote>，就会返回一个包含一组数字的密码。
      当您第一次运行<application>&mathematica;</application>时就需要得到的密码。
      </para>
    </sect2>

    <sect2>
      <title>通过网络来运行&mathematica;</title>

      <para><application>&mathematica;</application> 使用一些特殊的字体来显示字符，
      与现在使用的标准字体不一样（integrals, sums, Greek letters,等等）。 X协议要求将这些字体安装在
      <emphasis>本地</emphasis>。
      这意味着您需要从<application>&mathematica;</application>的CDROM里面拷贝这些字体并安装到本地。
	这些字体一般在CDROM的<filename>/cdrom/Unix/Files/SystemFiles/Fonts</filename>里面，
	或本地硬盘的<filename>/usr/local/mathematica/SystemFiles/Fonts</filename>。
	实际的字体在<filename>Type1</filename>和<filename>X</filename>子目录。有很多种方法来使用它们。
	</para>

      <para>第一种方法是把字体拷贝到一个已存在的目录<filename>/usr/X11R6/lib/X11/fonts</filename>。
      这需要编辑<filename>fonts.dir</filename>文件。添加字体名字进去，并改变第一行的字体数目。
      另外，您也需要在拷贝字体的目录下执行&man.mkfontdir.1;。
      </para>

      <para>第二种方法是拷贝目录到<filename>/usr/X11R6/lib/X11/fonts</filename>：</para>

      <screen>&prompt.root; <userinput>cd /usr/X11R6/lib/X11/fonts</userinput>
&prompt.root; <userinput>mkdir X</userinput>
&prompt.root; <userinput>mkdir MathType1</userinput>
&prompt.root; <userinput>cd /cdrom/Unix/Files/SystemFiles/Fonts</userinput>
&prompt.root; <userinput>cp X/* /usr/X11R6/lib/X11/fonts/X</userinput>
&prompt.root; <userinput>cp Type1/* /usr/X11R6/lib/X11/fonts/MathType1</userinput>
&prompt.root; <userinput>cd /usr/X11R6/lib/X11/fonts/X</userinput>
&prompt.root; <userinput>mkfontdir</userinput>
&prompt.root; <userinput>cd ../MathType1</userinput>
&prompt.root; <userinput>mkfontdir</userinput></screen>

      <para>现在，添加新的字体目录到您的字体目录：</para>

      <screen>&prompt.root; <userinput>xset fp+ /usr/X11R6/lib/X11/fonts/X</userinput>
&prompt.root; <userinput>xset fp+ /usr/X11R6/lib/X11/fonts/MathType1</userinput>
&prompt.root; <userinput>xset fp rehash</userinput></screen>

      <para>如果您正使用 <application>&xorg;</application> 服务器， 则可以通过修改
	<filename>xorg.conf</filename> 文件来自动加载它们。</para>

      <note><para>对于 <application>&xfree86;</application> 服务器，
	配置文件的名字是 <filename>XF86Config</filename>。</para></note>
      <indexterm><primary>fonts</primary></indexterm>

      <para>如果您<emphasis>没有</emphasis>一个叫<filename>/usr/X11R6/lib/X11/fonts/Type1</filename>的目录，
      您可以把<filename>MathType1</filename>改成<filename>Type1</filename>。</para>
    </sect2>
  </sect1>

  <sect1 id="linuxemu-maple">
    <sect1info>
      <authorgroup>
	<author>
	  <firstname>Aaron</firstname>
	  <surname>Kaplan</surname>
<!--	  <address><email>aaron@lo-res.org</email></address>-->
	  <contrib>Contributed by </contrib>
	</author>
      </authorgroup>
      <authorgroup>
	<author>
	  <firstname>Robert</firstname>
	  <surname>Getschmann</surname>
<!--	  <address><email>rob@getschmann.org</email></address>-->
	  <contrib>Thanks to </contrib>
	</author>
      </authorgroup>
    </sect1info>
    <title>安装&maple;</title>

    <indexterm>
      <primary>应用程序</primary>
      <secondary><application>Maple</application></secondary>
    </indexterm>

    <para><application>&maple;</application>是一个类似于<application>&mathematica;</application>的商业数学软件。
    您可以从<ulink
      url="http://www.maplesoft.com/"></ulink>买到这个软件并注册得到一个使用许可。
     要在FreeBSD上安装这个软件，请按照下面的步骤：</para>

      <procedure>
	<step><para>从软件的发行包执行<filename>INSTALL</filename> shell脚本。当进入安装程序的提示符时，
	选择<quote>RedHat</quote> 选项。典型的安装目录是<filename
	  class="directory">/usr/local/maple</filename>。</para></step>

        <step><para>如果您不这样做，可以从Maple Waterloo Software （<ulink url="http://register.maplesoft.com/"></ulink>）
	为<application>&maple;</application>订购一个许可。
	然后拷贝到<filename>/usr/local/maple/license/license.dat</filename>。</para></step>

        <step><para>通过运行<application>&maple;</application>中的<filename>INSTALL_LIC</filename>安装shell脚本来
	  安装<application>FLEXlm</application>许可管理器。  指定许可服务器为您的机器名。</para></step>

        <step><para>像下面这样Patch您的<filename>/usr/local/maple/bin/maple.system.type</filename>
          文件：</para>
<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 -----</programlisting>

	<para>请注意<literal>"FreeBSD"|\</literal>后面没有空格。</para>

	<para>这个补丁指示<application>&maple;</application>把<quote>FreeBSD</quote>识别为一种Linux系统。
	 <filename>bin/maple</filename> shell脚本调用<filename>bin/maple.system.type</filename>
	 脚本执行<command>uname -a</command>来查找操作系统名，根据操作系统名，就知道该使用哪个程序。
	 </para></step>

      <step><para>启动许可服务器。</para>

	<para>下面的脚本，安装成<filename>/usr/local/etc/rc.d/lmgrd.sh</filename>，
	是很方便的启动<command>lmgrd</command>的方法：</para>

	<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 ------------</programlisting></step>


      <step><para>开始测试<application>&maple;</application>：</para>
	<screen>&prompt.user; <userinput>cd /usr/local/maple/bin</userinput>
&prompt.user; <userinput>./xmaple</userinput></screen>

<para>您应该成功启动起来了。记得写信告诉Maplesoft您想要一个本地FreeBSD版本！</para></step>
    </procedure>

    <sect2>
      <title>一些缺陷</title>

      <itemizedlist>
	<listitem><para><application>FLEXlm</application>许可管理器可能是一个使用比较困难的工具。
	关于它的额外的文档可以在<ulink
	  url="http://www.globetrotter.com/"></ulink>找到。</para></listitem>

	<listitem><para><command>lmgrd</command>对许可文件非常挑剔，有一点问题就会core dump。
	正确的许可文件看起来像下面这样：
	</para>

<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</programlisting>

	  <note><para>序列号被'X'代替了。 <hostid>chillig</hostid>是主机名。</para></note>

  	  <para>只要不修改<quote>FEATURE</quote>行，编辑后一般都能工作。</para></listitem>
      </itemizedlist>
    </sect2>
  </sect1>

  <sect1 id="linuxemu-matlab">
    <sect1info>
      <authorgroup>
	<author>
	  <firstname>Dan</firstname>
	  <surname>Pelleg</surname>
	  <contrib>Contributed by </contrib>
	</author>
	<!-- daniel+handbook@pelleg.org -->
      </authorgroup>
    </sect1info>
    <title>安装&matlab;</title>

    <indexterm>
      <primary>应用程序</primary>
      <secondary><application>MATLAB</application></secondary>
    </indexterm>

    <para>这一节描述在一个 &os; 上安装Linux版本的<application>&matlab; version 6.5</application>。
    它工作的很好，除了<application>&java.virtual.machine;</application>例外（参考
      <xref linkend="matlab-jre">）。</para>

    <para>Linux版本的<application>&matlab;</application>可以从MathWorks<ulink
      url="http://www.mathworks.com"></ulink>订购。请确定您也得到了许可文件或安装说明。
      等您成功后，让他们知道您想要一个本地&os;版本。</para>

    <sect2>
      <title>安装&matlab;</title>

      <para>请按照下面的步骤安装<application>&matlab;</application>：</para>

      <procedure>
	<step>
	  <para>以<username>root</username>身份插入安装CD并挂载上。
	  推荐使用安装脚本，为了启动安装脚本，键入：</para>

	  <screen>&prompt.root; <userinput>/compat/linux/bin/sh /cdrom/install</userinput></screen>

	  <tip>
	    <para>安装程序是图形的。如果您得到不能打开显示的错误，可以键入
	      <command>setenv HOME ~<replaceable>USER</replaceable></command>，
	      <replaceable>USER</replaceable>是您&man.su.1;成的用户。</para>
	  </tip>
	</step>

	<step>
	  <para>
	    当问<application>&matlab;</application>的根目录时，键入：
	    <userinput>/compat/linux/usr/local/matlab</userinput>。</para>

	  <tip>
	    <para>为了下面的安装过程更方便，在shell提示符下键入
	    <command>set MATLAB=/compat/linux/usr/local/matlab</command></para>
	  </tip>
	</step>

	<step>
	  <para>根据获得<application>&matlab;</application>许可时的指示来编辑许可文件。</para>

	  <tip>
	    <para>您可以用您喜欢的编辑器提前准备这个文件，并在安装程序要您编辑它之前拷贝到
	    <filename>$MATLAB/license.dat</filename>
	    </para>
	  </tip>
	</step>

	<step>
	  <para>完成安装过程</para>
	</step>
      </procedure>

      <para>到这里，您的<application>&matlab;</application>安装已经完成了。
      接下来的步骤是让它和您的&os; 系统<quote>胶合</quote>在一起。</para>
    </sect2>

    <sect2>
      <title>许可管理器的启动</title>
      <procedure>
	<step>
	  <para>为许可管理器建立符号链接的脚本：</para>

	  <screen>&prompt.root; <userinput>ln -s $MATLAB/etc/lmboot /usr/local/etc/lmboot_TMW</userinput>
&prompt.root; <userinput>ln -s $MATLAB/etc/lmdown /usr/local/etc/lmdown_TMW</userinput></screen>
	</step>

	<step>
	  <para>建立启动文件<filename>/usr/local/etc/rc.d/flexlm.sh</filename>。
	  下面的例子是一个<filename>$MATLAB/etc/rc.lm.glnx86</filename>的修改版本。
	  变化的是文件的位置，和模拟Linux下许可管理器的启动。 </para>

	  <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 <replaceable>username</replaceable> &amp;&amp; echo 'MATLAB_lmgrd'
        fi
        ;;
  stop)
	if [ -f /usr/local/etc/lmdown_TMW ]; then
            /compat/linux/bin/sh /usr/local/etc/lmdown_TMW  &gt; /dev/null 2&gt;&amp;1
	fi
        ;;
  *)
	echo "Usage: $0 {start|stop}"
	exit 1
	;;
esac

exit 0</programlisting>

	  <important>
	    <para>必须使脚本文件可执行：</para>

	    <screen>&prompt.root; <userinput>chmod +x /usr/local/etc/rc.d/flexlm.sh</userinput></screen>

	    <para>您也必须替换<replaceable>username</replaceable>为机器上的一个用户（不要是<username>root</username>）。
	    </para>
	  </important>
	</step>

	<step>
	  <para>用命令启动许可管理器：</para>

	  <screen>&prompt.root; <userinput>/usr/local/etc/rc.d/flexlm.sh start</userinput></screen>
	</step>
      </procedure>
    </sect2>

    <sect2 id="matlab-jre">
      <title>链接&java;运行时环境</title>

      <para>改变<application>&java;</application>运行时环境（JRE），链接到一个可以工作的版本：
      </para>

      <screen>&prompt.root; <userinput>cd $MATLAB/sys/java/jre/glnx86/</userinput>
&prompt.root; <userinput>unlink jre; ln -s ./jre1.1.8 ./jre</userinput></screen>
    </sect2>

    <sect2>
      <title>创建&matlab;启动脚本</title>

      <procedure>
	<step>
	  <para>把下面的启动脚本放到<filename>/usr/local/bin/matlab</filename>：
	  </para>

	  <programlisting>#!/bin/sh
/compat/linux/bin/sh /compat/linux/usr/local/matlab/bin/matlab "$@"</programlisting>
	</step>

	<step>
	  <para>然后输入命令<command>chmod +x /usr/local/bin/matlab</command>。</para>
	</step>
      </procedure>

      <tip>
	<para>依赖于您的<filename role="package">emulators/linux_base</filename>版本，
	您在运行这个脚本时可能会出错，为了避免错误，编辑<filename>/compat/linux/usr/local/matlab/bin/matlab</filename>，
	把这行：</para>

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

	<para>（在13.0.1版本是在第410行）改成：</para>

	<programlisting>if test -L $newbase; then</programlisting>
      </tip>
    </sect2>

    <sect2>
      <title>Creating a &matlab; Shutdown Script</title>

      <para>The following is needed to solve a problem with &matlab;
	not exiting correctly.</para>

      <procedure>
	<step>
	  <para>Create a file
	    <filename>$MATLAB/toolbox/local/finish.m</filename>, and
	    in it put the single line:</para>

	  <programlisting>! $MATLAB/bin/finish.sh</programlisting>

	  <note><para>The <literal>$MATLAB</literal> is
	    literal.</para></note>

	  <tip>
	    <para>In the same directory, you will find the files
	      <filename>finishsav.m</filename> and
	      <filename>finishdlg.m</filename>, which let you save
	      your workspace before quitting.  If you use either of
	      them, insert the line above immediately after the
	      <literal>save</literal> command.</para></tip>
	</step>

	<step>
	  <para>Create a file
	    <filename>$MATLAB/bin/finish.sh</filename>, which will
	    contain the following:</para>

	  <programlisting>#!/usr/compat/linux/bin/sh
(sleep 5; killall -1 matlab_helper) &
exit 0</programlisting>
	</step>

	<step>
	  <para>Make the file executable:</para>

	  <screen>&prompt.root; <userinput>chmod +x $MATLAB/bin/finish.sh</userinput></screen>
	</step>
      </procedure>
    </sect2>

    <sect2 id="matlab-using">
      <title>使用&matlab;</title>

      <para>现在您已经可以键入
	<command>matlab</command> 并开始使用它了。</para>
    </sect2>
  </sect1>

  <sect1 id="linuxemu-oracle">
    <sect1info>
      <authorgroup>
	<author>
	  <firstname>Marcel</firstname>
	  <surname>Moolenaar</surname>
	  <contrib>Contributed by </contrib>
	</author>
	<!-- marcel@cup.hp.com -->
      </authorgroup>
    </sect1info>
    <title>安装&oracle;</title>

    <indexterm>
      <primary>应用程序</primary>
      <secondary><application>Oracle</application></secondary>
    </indexterm>

    <sect2>
      <title>前言</title>
      <para>这节描述在FreeBSD上安装Linux版的<application>&oracle; 8.0.5</application>和<application>&oracle; 8.0.5.1 Enterprise Edition</application>。
      </para>
    </sect2>

    <sect2>
      <title>安装Linux环境</title>

      <para>确信您已经从 Ports Collection 安装了 <filename role='package'>emulators/linux_base</filename> 和
	<filename role='package'>devel/linux_devtools</filename>。 如果在使用这些 port
	时遇到困难， 您可能就不得不从 package， 或使用较早版本的 Ports Collection
	来安装。</para>

      <para>如果要运行智能代理， 您还需要安装 Red Hat Tcl 软件包：
	<filename>tcl-8.0.3-20.i386.rpm</filename>。
	用于安装官方的 <application>RPM</application>
	(<filename role='package'>archivers/rpm</filename>) 软件包的命令是：</para>

      <screen>&prompt.root; <userinput>rpm -i --ignoreos --root /compat/linux --dbpath /var/lib/rpm <replaceable>package</replaceable></userinput></screen>

      <para><replaceable>包</replaceable>的安装通常不会出错。 </para>
    </sect2>

    <sect2>
      <title>创建&oracle;环境</title>

      <para>安装<application>&oracle;</application>之前，您需要设置正确的环境。
      这节只描述了在FreeBSD下安装Linux版本<application>&oracle;</application>需要<emphasis>特别</emphasis>注意的地方。
      不像在<application>&oracle;</application>安装指南中所描述的那样。
   </para>

      <sect3 id="linuxemu-kernel-tuning">
        <title>调整内核</title>
	<indexterm><primary>调整内核</primary></indexterm>

	<para>正如<application>&oracle;</application>安装指南描述的那样，您需要设置共享内存的最大值。
	不要在FreeBSD下使用<literal>SHMMAX</literal>，<literal>SHMMAX</literal>
	 只是用来计算<literal>SHMMAXPGS</literal>和<literal>PGSIZE</literal>的。
	 因此要使用<literal>SHMMAXPGS</literal>。所有其他要使用的选项可以参考指南，例如：</para>

	<programlisting>options SHMMAXPGS=10000
options SHMMNI=100
options SHMSEG=10
options SEMMNS=200
options SEMMNI=70
options SEMMSL=61</programlisting>

	<para>设置这些选项来适应 <application>&oracle;</application>的使用。</para>

	<para>当然，确信您的内核配置文件中有下面这些选项：</para>

<programlisting>options SYSVSHM #SysV shared memory
options SYSVSEM #SysV semaphores
options SYSVMSG #SysV interprocess communication</programlisting>
      </sect3>

      <sect3 id="linuxemu-oracle-account">

        <title>&oracle;帐号</title>

	<para>创建一个<username>oracle</username>帐号，正如您创建其他帐号一样。
	<username>oracle</username> 帐号特殊的地方是您需要给它一个Linux shell。
	添加<literal>/compat/linux/bin/bash</literal>到<filename>/etc/shells</filename>，
	然后设置<username>oracle</username>帐号的shell为<filename>/compat/linux/bin/bash</filename>。
	</para>
      </sect3>

      <sect3 id="linuxemu-environment">
        <title>环境</title>

	<para>除了普通的<application>&oracle;</application>变量外，
	比如<envar>ORACLE_HOME</envar>和<envar>ORACLE_SID</envar>，您还必须设置下面的环境变量：</para>

	<informaltable frame="none" pgwide="1">
	  <tgroup cols="2">
          <colspec colwidth="1*">
          <colspec colwidth="2*">
	    <thead>
	      <row>
		<entry>变量</entry>

		<entry>值</entry>
	      </row>
	    </thead>
	    <tbody>
	      <row>
		<entry><envar>LD_LIBRARY_PATH</envar></entry>

		<entry><literal>$ORACLE_HOME/lib</literal></entry>
	      </row>

	      <row>
		<entry><envar>CLASSPATH</envar></entry>

		<entry><literal>$ORACLE_HOME/jdbc/lib/classes111.zip</literal></entry>
	      </row>

	      <row>
		<entry><envar>PATH</envar></entry>

		<entry><literal>/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</literal></entry>
	      </row>
	    </tbody>
	  </tgroup>
	</informaltable>

        <para>建议在<filename>.profile</filename>里面设置所有的环境变量。一个完整的例子是：
	</para>

<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</programlisting>
      </sect3>
    </sect2>

    <sect2>
      <title>安装&oracle;</title>

      <para>由于 Linux 模拟器的一处小小的差异， 您必须在 <filename>/var/tmp</filename>
	中创建一个名为 <filename>.oracle</filename> 的目录才能够启动安装程序。
	需要把它设置为属于 <username>oracle</username> 用户。 接下来，
	您就可以毫无问题地安装 <application>&oracle;</application> 了。
	如果您遇到问题， 请首先检查 <application>&oracle;</application>
	软件包和/或配置文件！安装完 <application>&oracle;</application>
	之后， 使用下面两节中所说的补丁。</para>

      <para>一个比较常见的问题是 TCP 协议适配器安装不正确。
	其结果是将无法进行任何的 TCP 侦听。 下面的操作将帮助解决此问题：</para>

      <screen>&prompt.root; <userinput>cd $ORACLE_HOME/network/lib</userinput>
&prompt.root; <userinput>make -f ins_network.mk ntcontab.o</userinput>
&prompt.root; <userinput>cd $ORACLE_HOME/lib</userinput>
&prompt.root; <userinput>ar r libnetwork.a ntcontab.o</userinput>
&prompt.root; <userinput>cd $ORACLE_HOME/network/lib</userinput>
&prompt.root; <userinput>make -f ins_network.mk install</userinput></screen>

      <para>不要忘记了再运行一下<filename>root.sh</filename>！</para>

    <sect3 id="linuxemu-patch-root">
      <title>修补root.sh</title>

	<para>从CD安装<application>&oracle;</application>时，一些工作需要在<username>root</username>下执行，
	这些工作都被记录在一个叫<filename>root.sh</filename>的脚本里面。这个脚本被写在<filename>orainst</filename>目录。
	为了使用<filename>root.sh</filename>来正确定位<command>chown</command>或在Linux本地shell下执行脚本，
	应该对它进行修补。</para>

	<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</programlisting>

	<para>当您不从CD安装<application>&oracle;</application>时，
	您可以从源代码来修补<filename>root.sh</filename>。
	它叫做<filename>rthd.sh</filename>，定位在源代码树的<filename>orainst</filename>目录。
	</para>
      </sect3>

      <sect3 id="linuxemu-patch-tcl">
	<title>修补genclntsh</title>

	<para><command>genclntsh</command>脚本用来创建一个简单的共享客户端库。在建立demos时被使用。
	完成补丁后就注释掉了下面的<envar>PATH</envar>变量：</para>

	<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</programlisting>
      </sect3>
    </sect2>

    <sect2>
      <title>运行&oracle;</title>

      <para>如果您已经按上面的指示去操作，您应该可以像在Linux下运行<application>&oracle;</application>了。 </para>
    </sect2>
  </sect1>

  <sect1 id="sapr3">
    <sect1info>
      <authorgroup>
	<author>
	  <firstname>Holger</firstname>
	  <surname>Kipp</surname>
	  <contrib>Contributed by </contrib>
	</author>
      </authorgroup>
      <!-- holger.kipp@alogis.com -->
      <authorgroup>
	<author>
	  <firstname>Valentino</firstname>
	  <surname>Vaschetto</surname>
	  <contrib>Original version converted to SGML by </contrib>
	</author>
      </authorgroup>
    </sect1info>

    <title>安装&sap.r3;</title>

    <indexterm>
      <primary>应用程序</primary>
      <secondary><application>SAP R/3</application></secondary>
    </indexterm>

    <para>在FreeBSD上安装的<application>&sap;</application>系统不会被&sap;
    支持团队&mdash; 所支持——他们只支持某些特定的平台。
   </para>

    <sect2 id="preface">
      <title>前言</title>

      <para>这篇文章描述了在FreeBSD系统上安装一个带有<application>&oracle; Database</application>
      for Linux的<application>&sap.r3; System</application>，包括 FreeBSD的安装和<application>&oracle;</application>的安装。
      下面将描述两个不同的配置：</para>

      <itemizedlist>
	<listitem>
	  <para>在FreeBSD 4.3-STABLE上安装带有<application>&oracle; 8.0.5</application>
	  的<application>&sap.r3; 4.6B (IDES)</application>。
	  </para>
	  </listitem>

	<listitem>
	  <para>在FreeBSD 4.5-STABLE上安装带有<application>&oracle; 8.1.7</application>的
	  <application>&sap.r3; 4.6C</application>。
	  </para>
	</listitem>
      </itemizedlist>

      <para>虽然这篇文章深入地描述了许多重要的安装步骤，但它不能取代<application>&oracle;</application>和
      <application>&sap.r3;</application>的安装指南。</para>

      <para>请参考<application>&sap.r3;</application> Linux edition自带的文档和
      <application>&oracle;</application>的特殊问题。</para>
    </sect2>

    <sect2 id="software">
      <title>软件</title>

      <para>下面的CD-ROMs被用作<application>&sap;</application>的安装：</para>

      <sect3 id="software-46b">
	<title>&sap.r3; 4.6B, &oracle; 8.0.5</title>

      <informaltable frame="none" pgwide="1">
	<tgroup cols=3>
	  <thead>
	    <row>
	      <entry>名称</entry> <entry>号码</entry> <entry>描述</entry>
	    </row>
	  </thead>
	  <tbody>
	    <row>
	      <entry>KERNEL</entry> <entry>51009113</entry> <entry>SAP Kernel Oracle /
		Installation / AIX, Linux, Solaris</entry>
	    </row>

	    <row>
	      <entry>RDBMS</entry> <entry>51007558</entry> <entry>Oracle / RDBMS 8.0.5.X /
		Linux</entry>
	    </row>

	    <row>
	      <entry>EXPORT1</entry> <entry>51010208</entry> <entry>IDES / DB-Export /
		Disc 1 of 6</entry>
	    </row>

	    <row>
	      <entry>EXPORT2</entry> <entry>51010209</entry> <entry>IDES / DB-Export /
		Disc 2 of 6</entry>
	    </row>

	    <row>
	      <entry>EXPORT3</entry> <entry>51010210</entry> <entry>IDES / DB-Export /
		Disc 3 of 6</entry>
	    </row>

	    <row>
	      <entry>EXPORT4</entry> <entry>51010211</entry> <entry>IDES / DB-Export /
		Disc 4 of 6</entry>
	    </row>

	    <row>
	      <entry>EXPORT5</entry> <entry>51010212</entry> <entry>IDES / DB-Export /
		Disc 5 of 6</entry>
	    </row>

	    <row>
	      <entry>EXPORT6</entry> <entry>51010213</entry> <entry>IDES / DB-Export /
		Disc 6 of 6</entry>
	    </row>
	  </tbody>
	</tgroup>
      </informaltable>

      <para>此外，我们使用<application>&oracle; 8
	Server</application> （Linux版本的8.0.5预览版，Linux内核是2.0.33）和
	FreeBSD 4.3-STABLE。</para>

      </sect3>
      <sect3 id="software-46c">
	<title>&sap.r3; 4.6C SR2, &oracle; 8.1.7</title>

	<informaltable frame="none" pgwide="1">
	  <tgroup cols=3>
	    <thead>
	      <row>
		<entry>名称</entry> <entry>号码</entry> <entry>描述</entry>
	      </row>
	    </thead>

	    <tbody>
	      <row>
		<entry>KERNEL</entry> <entry>51014004</entry> <entry>SAP Kernel Oracle /
		  SAP Kernel Version 4.6D / DEC, Linux</entry>
	      </row>

	      <row>
		<entry>RDBMS</entry> <entry>51012930</entry> <entry>Oracle 8.1.7/ RDBMS /
		  Linux</entry>
	      </row>

	      <row>
		<entry>EXPORT1</entry> <entry>51013953</entry> <entry>Release 4.6C SR2 / Export
		  / Disc 1 of 4</entry>
	      </row>

	      <row>
		<entry>EXPORT1</entry> <entry>51013953</entry> <entry>Release 4.6C SR2 / Export
		  / Disc 2 of 4</entry>
	      </row>

	      <row>
		<entry>EXPORT1</entry> <entry>51013953</entry> <entry>Release 4.6C SR2 / Export
		  / Disc 3 of 4</entry>
	      </row>

	      <row>
		<entry>EXPORT1</entry> <entry>51013953</entry> <entry>Release 4.6C SR2 / Export
		  / Disc 4 of 4</entry>
	      </row>

	      <row>
		<entry>LANG1</entry> <entry>51013954</entry> <entry>Release 4.6C SR2 /
		  Language / DE, EN, FR / Disc 1 of 3</entry>
	      </row>
	    </tbody>
	  </tgroup>
	</informaltable>

        <para>依赖于您要安装的语言，可能需要额外的语言CDs。
	   这儿我们只使用DE和EN，所以只需要第一张语言CD。
	   还要注意的是所有EXPORT CDs的号码是一样的。
	   其他3张语言CDs的号码也一样（这和4.6B IDES release CD的号码不同）。
	   </para>
      </sect3>
    </sect2>

    <sect2 id="sap-notes">
      <title>&sap; Notes</title>

      <para>安装使用<application>&sap.r3;</application>之前，请先看看下面的注释：
      </para>

      <sect3 id="sap-notes-46b">
	<title>&sap.r3; 4.6B, &oracle; 8.0.5</title>

	<informaltable frame="none" pgwide="1">
	  <tgroup cols="2">
	    <thead>
	      <row>
		<entry>号码</entry>
		<entry>标题</entry>
	      </row>
	    </thead>
	    <tbody>

	      <row>
		<entry>0171356</entry> <entry>SAP Software on Linux: Essential
		  Comments</entry>
	      </row>

	      <row>
		<entry>0201147</entry> <entry>INST: 4.6C R/3 Inst. on UNIX -
		  Oracle</entry>
	      </row>

	      <row>
		<entry>0373203</entry> <entry>Update / Migration Oracle 8.0.5 --&gt;
		  8.0.6/8.1.6 LINUX</entry>
	      </row>

	      <row>
		<entry>0072984</entry> <entry>Release of Digital UNIX 4.0B for
		  Oracle</entry>
	      </row>

	      <row>
		<entry>0130581</entry> <entry>R3SETUP step DIPGNTAB terminates</entry>
	      </row>

	      <row>
		<entry>0144978</entry> <entry>Your system has not been installed
		  correctly</entry>
	      </row>

	      <row>
		<entry>0162266</entry> <entry>Questions and tips for R3SETUP on Windows
		  NT / W2K</entry>
	      </row>
	    </tbody>
	  </tgroup>
	</informaltable>
      </sect3>

      <sect3 id="sap-notes-46c">
	<title>&sap.r3; 4.6C, &oracle; 8.1.7</title>

	<informaltable frame="none" pgwide="1">
	  <tgroup cols="2">
	    <thead>
	      <row>
		<entry>号码</entry>
		<entry>标题</entry>
	      </row>
	    </thead>
	    <tbody>
	      <row>
		<entry>0015023</entry> <entry>Initializing table TCPDB (RSXP0004)
		  (EBCDIC)</entry>
	      </row>

	      <row>
		<entry>0045619</entry> <entry>R/3 with several languages or
		  typefaces</entry>
	      </row>

	      <row>
		<entry>0171356</entry> <entry>SAP Software on Linux: Essential
		  Comments</entry>
	      </row>

	      <row>
		<entry>0195603</entry> <entry>RedHat 6.1 Enterprise version:
		  Known problems</entry>
	      </row>

	      <row>
		<entry>0212876</entry> <entry>The new archiving tool SAPCAR</entry>
	      </row>

	      <row>
		<entry>0300900</entry> <entry>Linux: Released DELL Hardware</entry>
	      </row>

	      <row>
		<entry>0377187</entry> <entry>RedHat 6.2: important remarks</entry>
	      </row>

	      <row>
		<entry>0387074</entry> <entry>INST: R/3 4.6C SR2 Installation on
		  UNIX</entry>
	      </row>

	      <row>
		<entry>0387077</entry> <entry>INST: R/3 4.6C SR2 Inst. on UNIX -
		  Oracle</entry>
	      </row>

	      <row>
		<entry>0387078</entry> <entry>SAP Software on UNIX: OS Dependencies
		  4.6C SR2</entry>
	      </row>
	    </tbody>
	  </tgroup>
	</informaltable>
      </sect3>
    </sect2>

    <sect2 id="hardware-requirements">
      <title>硬件要求</title>

      <para>下面的设备配置对<application>&sap.r3; System</application>来说已经足够了。如果
      用于生产用途，就需要更强的配置：
      </para>

      <informaltable frame="none" pgwide="1">
	<tgroup cols="3">
	  <thead>
	    <row>
	      <entry>组件</entry>
	      <entry>4.6B</entry>
	      <entry>4.6C</entry>
	    </row>
	  </thead>
	  <tbody>
	    <row>
	      <entry>处理器</entry>
	      <entry>2 x 800MHz &pentium; III</entry>
	      <entry>2 x 800MHz &pentium; III</entry>
	    </row>

	    <row>
	      <entry>内存</entry>
	      <entry>1GB ECC</entry>
	      <entry>2GB ECC</entry>
	    </row>

	    <row>
	      <entry>Hard Disk Space</entry>
	      <entry>50-60GB (IDES)</entry>
	      <entry>50-60GB (IDES)</entry>
	    </row>
	  </tbody>
	</tgroup>
      </informaltable>

      <para>用于生产使用，就需要使用带大缓存的&xeon;处理器，和高速大容量磁盘（SCSI, RAID hardware controller），以及USV
	和ECC-RAM内存。  配置IDES System前需要大量的硬盘空间，因为安装时将创建27&nbsp;GB的数据库文件。
        这些空间用于系统和数据的初始化也是足够的。
	</para>

      <sect3 id="hardware-46b">
	<title>&sap.r3; 4.6B, &oracle; 8.0.5</title>

      <para>对于这个安装，我的硬件配置如下：带2个800&nbsp;MHz &pentium;&nbsp;III处理器的主板， &adaptec; 29160 Ultra160
	SCSI适配器（能够访问40/80&nbsp;GB DLT磁带机和CDROM），
	&mylex; &acceleraid; （2个通道， firmware 6.00-1-00 with 32&nbsp;MB RAM）。
	&mylex; RAID controller被挂上2个17&nbsp;GB（mirrored）硬盘和4个36&nbsp;GB硬盘(RAID level 5)。</para>
      </sect3>

      <sect3 id="hardware-46c">
	<title>&sap.r3; 4.6C, &oracle; 8.1.7</title>

      <para>对于这个安装，配置是&dell; &poweredge; 2500，带2个1000&nbsp;MHz &pentium;&nbsp;III处理器的
      主板（256&nbsp;kB Cache）， 2&nbsp;GB PC133 ECC SDRAM， PERC/3 DC PCI RAID Controller
with 128&nbsp;MB，和一个EIDE DVD-ROM驱动器。RAID controller被挂上2个18&nbsp;GB硬盘（mirrored）
和4个36&nbsp;GB硬盘（RAID level 5）。</para>
      </sect3>
    </sect2>

    <sect2 id="installation">
      <title>安装FreeBSD</title>

      <para>首先需要安装 FreeBSD。
	有很多方法来完成这个工作 (FreeBSD&nbsp;4.3 通过 FTP
	安装， 而 FreeBSD&nbsp;4.5 则是从 RELEASE CD
	安装的)。 要了解进一步的情况请参考 <xref
	linkend="install-diff-media">。</para>

      <sect3 id="disk-layout">
	<title>磁盘划分</title>

	<para>为了简单，对<application>&sap.r3; 46B</application>和<application>&sap.r3; 46C
	  SR2</application>的安装使用相同的磁盘划分。只是设备名换了，因为是安装在不同的硬件上
	   (<filename>/dev/da</filename> 和 <filename>/dev/amr</filename>，
	   所以如果是使用AMI &megaraid;，我们能看到 <filename>/dev/amr0s1a</filename> 代替了
	   <filename>/dev/da0s1a</filename>)：</para>

	<informaltable frame="none" pgwide="1">
	  <tgroup cols="4">
	    <thead>
	      <row>
		<entry>文件系统</entry>
		<entry>尺寸(1k-blocks)</entry>
		<entry>尺寸(GB)</entry>
		<entry>挂载点</entry>
	      </row>
	    </thead>
	    <tbody>
	      <row>
		<entry><filename>/dev/da0s1a</filename></entry>
		<entry>1.016.303</entry>
		<entry>1</entry>
		<entry><filename>/</filename></entry>
	      </row>

	      <row>
		<entry><filename>/dev/da0s1b</filename></entry>
		<entry> </entry>
		<entry>6</entry>
		<entry>swap</entry>
	      </row>

	      <row>
		<entry><filename>/dev/da0s1e</filename></entry>
		<entry>2.032.623</entry>
		<entry>2</entry>
		<entry><filename>/var</filename></entry>
	      </row>

	      <row>
		<entry><filename>/dev/da0s1f</filename></entry>
		<entry>8.205.339</entry>
		<entry>8</entry>
		<entry><filename>/usr</filename></entry>
	      </row>

	      <row>
		<entry><filename>/dev/da1s1e</filename></entry>
		<entry>45.734.361</entry>
		<entry>45</entry>
		<entry><filename>/compat/linux/oracle</filename></entry>
	      </row>

	      <row>
		<entry><filename>/dev/da1s1f</filename></entry>
		<entry>2.032.623</entry>
		<entry>2</entry>
		<entry><filename>/compat/linux/sapmnt</filename></entry>
	      </row>

	      <row>
		<entry><filename>/dev/da1s1g</filename></entry>
		<entry>2.032.623</entry>
		<entry>2</entry>
		<entry><filename>/compat/linux/usr/sap</filename></entry>
	      </row>
	    </tbody>
	  </tgroup>
	</informaltable>

	<para>预先用&mylex; 或PERC/3 RAID 软件配置和初始化这两个逻辑驱动器。
	改变<acronym>BIOS</acronym>的引导顺序来启动软件。</para>

	<para>请注意这里的磁盘划分和&sap;推荐的是不一样的，&sap;建议把
	  <application>&oracle;</application>子目录（及其他子目录）分离开来，
	  我决定只简单的创建几个子目录。
	 </para>
      </sect3>

      <sect3 id="makeworldandnewkernel">
	<title><command>make world</command>和建立新内核</title>

	<para>下载最新的-STABLE源代码，配置完内核配置文件后重建系统和新内核。
	  这儿当然要包括 <application>&sap.r3;</application>
	  和<application>&oracle;</application>需要的<link linkend="kerneltuning">内核参数</link>。
	  </para>
      </sect3>
    </sect2>

    <sect2 id="installingthelinuxenviornment">
      <title>安装Linux环境</title>

      <sect3 id="installinglinuxbase-system">
	<title>安装Linux基本系统</title>

	<para>首先<link linkend="linuxemu-libs-port">linux_base</link>
	  port需要安装（以<username>root</username>身份）：</para>

	<screen>&prompt.root; <userinput>cd /usr/ports/emulators/linux_base</userinput>
&prompt.root; <userinput>make install distclean</userinput></screen>

      </sect3>


      <sect3 id="installinglinuxdevelopment">
	<title>安装Linux开发环境</title>

	<para>如果您想根据<xref linkend="linuxemu-oracle">在FreeBSD上安装
	  <application>&oracle;</application> ：</para>

	<screen>&prompt.root; <userinput>cd /usr/ports/devel/linux_devtools</userinput>
&prompt.root; <userinput>make install distclean</userinput></screen>

	<para>Linux开发环境只是安装给<application>&sap.r3;
	  46B IDES</application>的，如果<application>&oracle; DB</application>不是在这个
	  FreeBSD系统上重新链接，它就不需要了。
	  </para>

      </sect3>


      <sect3 id="installingnecessaryrpms">
	<title>安装必需的RPMs</title>
	<indexterm><primary>RPMs</primary></indexterm>

	<para>为了启动<command>R3SETUP</command>程序， PAM支持是必需的。
	  第一次安装<application>&sap;</application>到FreeBSD 4.3-STABLE时我们先安装了
	  PAM的所有依赖包再安装PAM包，它可以工作。对于<application>&sap.r3; 4.6C SR2</application>我们
	  直接安装PAM RPM也可以工作，所以依赖包不是必需的：</para>


<screen>&prompt.root; <userinput>rpm -i --ignoreos --nodeps --root /compat/linux --dbpath /var/lib/rpm \
pam-0.68-7.i386.rpm</userinput></screen>

	<para>要让<application>&oracle; 8.0.5</application>运行智能代理，
	我们需要安装RedHat Tcl包<filename>tcl-8.0.5-30.i386.rpm</filename>
	（否则重新链接<application>&oracle;</application>不能工作）。
	重新链接<application>&oracle;</application>时还有其他要注意的地方，
	但那是<application>&oracle;</application> Linux的问题，不是FreeBSD的问题。
	</para>

      </sect3>

      <sect3 id="linuxprocandfallbackelfbrand">
	<title>其它一些注意的地方</title>

	<para>添加 <literal>linprocfs</literal>
	  到 <filename>/etc/fstab</filename> 是个好主意。
	  要了解进一步的细节， 请参考 &man.linprocfs.5; 联机手册。
	  另一个是设置 <literal>kern.fallback_elf_brand=3</literal>，
	  这可以通过 <filename>/etc/sysctl.conf</filename> 文件来完成。</para>
      </sect3>
    </sect2>

    <sect2 id="creatingsapr3env">
      <title>创建&sap.r3;环境</title>

      <sect3 id="filesystemsandmountpoints">
	<title>创建必需的文件系统和挂载点</title>

	<para>对简单的安装，创建下面的文件系统就够了：</para>

	<informaltable frame="none" pgwide="1">
	  <tgroup cols="2">
	    <thead>
	      <row>
		<entry>mount point</entry>
		<entry>size in GB</entry>
	      </row>
	    </thead>
	    <tbody>
	      <row>
		<entry><filename>/compat/linux/oracle</filename></entry>
		<entry>45 GB</entry>
	      </row>

	      <row>
		<entry><filename>/compat/linux/sapmnt</filename></entry>
		<entry>2 GB</entry>
	      </row>

	      <row>
		<entry><filename>/compat/linux/usr/sap</filename></entry>
		<entry>2 GB</entry>
	      </row>
	    </tbody>
	  </tgroup>
	</informaltable>

	<para>创建一些链接也是必要的，否则<application>&sap;</application>安装程序在检查创建的链接时
	会报错：
	</para>

	<screen>&prompt.root; <userinput>ln -s /compat/linux/oracle /oracle</userinput>
&prompt.root; <userinput>ln -s /compat/linux/sapmnt /sapmnt</userinput>
&prompt.root; <userinput>ln -s /compat/linux/usr/sap /usr/sap</userinput></screen>

	<para>安装时可能出现的错误（对于<emphasis>PRD</emphasis>系统和<application>&sap.r3; 4.6C SR2</application>
	 的安装）：</para>

	<screen>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'</screen>
      </sect3>

      <sect3 id="creatingusersanddirectories">
	<title>创建用户和目录</title>

	<para><application>&sap.r3;</application>需要两个用户和3个组。
	用户名依赖于包含3个字母的<application>&sap;</application>系统ID（SID）。一些SIDs
	被<application>&sap;</application>保留（例如<literal>SAP</literal>和<literal>NIX</literal>）。
	完成的列表参考<application>&sap;</application>文档。对于IDES的安装，我们使用<literal>IDS</literal>，
        对于4.6C SR2安装，使用<literal>PRD</literal>。 这样我们定义了下面的几个组：
	</para>

        <informaltable frame="none" pgwide="1">
          <tgroup cols="3">
          <thead>
          <row>
            <entry>组ID</entry>
            <entry>组名</entry>
            <entry>描述</entry>
          </row>
          </thead>
          <tbody>
          <row>
            <entry>100</entry>
            <entry>dba</entry>
            <entry>Data Base Administrator</entry>
          </row>
          <row>
            <entry>101</entry>
            <entry>sapsys</entry>
            <entry>&sap; System</entry>
          </row>
          <row>
            <entry>102</entry>
            <entry>oper</entry>
            <entry>Data Base Operator</entry>
          </row>
          </tbody>
          </tgroup>
        </informaltable>

        <para>对于默认的<application>&oracle;</application>安装，只有<groupname>dba</groupname>组被使用。
          和<groupname>oper</groupname>组一样，我们也可以使用<groupname>dba</groupname>组
	  （更详细的信息参考<application>&oracle;</application>和
	  <application>&sap;</application>文档）。</para>

        <para>我们也需要下面的用户</para>

        <informaltable frame="none" pgwide="1">
          <tgroup cols="6">
          <thead>
          <row>
            <entry>用户ID</entry>
            <entry>用户名</entry>
            <entry>普通名称</entry>
            <entry>组</entry>
            <entry>附加组</entry>
            <entry>描述</entry>
          </row>
          </thead>
          <tbody>
          <row>
            <entry>1000</entry>
            <entry>idsadm/prdadm</entry>
            <entry><replaceable>sid</replaceable>adm</entry>
            <entry>sapsys</entry>
            <entry>oper</entry>
            <entry>&sap; Administrator</entry>
          </row>
          <row>
            <entry>1002</entry>
            <entry>oraids/oraprd</entry>
            <entry>ora<replaceable>sid</replaceable></entry>
            <entry>dba</entry>
            <entry>oper</entry>
            <entry>&oracle; Administrator</entry>
          </row>
          </tbody>
          </tgroup>
        </informaltable>

        <para>使用&man.adduser.8;添加用户要求<quote>&sap; Administrator</quote>有下面的记录
	（请注意shell和home目录）：</para>

        <programlisting>Name: <replaceable>sid</replaceable>adm
Password: ******
Fullname: SAP Administrator <replaceable>SID</replaceable>
Uid: 1000
Gid: 101 (sapsys)
Class:
Groups: sapsys dba
HOME: /home/<replaceable>sid</replaceable>adm
Shell: bash  (/compat/linux/bin/bash)</programlisting>

        <para>对于<quote>&oracle; Administrator</quote>:</para>

        <programlisting>Name: ora<replaceable>sid</replaceable>
Password: ******
Fullname: Oracle Administrator <replaceable>SID</replaceable>
Uid: 1002
Gid: 100 (dba)
Class:
Groups: dba
HOME: /oracle/<replaceable>sid</replaceable>
Shell: bash  (/compat/linux/bin/bash)</programlisting>

        <para>在您使用组<groupname>dba</groupname>和<groupname>oper</groupname>的情况下您也应该包括
          <groupname>oper</groupname>。</para>

      </sect3>

      <sect3 id="creatingdirectories">
        <title>创建目录</title>

        <para>这些目录通常建立在不同的文件系统上。这完全依赖于您的需求。
	我们选择把它们建立在同一个目录：
          </para>

        <para>首先我们将设置一些目录的所有者和权限（以<username>root</username>身份设置）：</para>

        <screen>&prompt.root; <userinput>chmod 775 /oracle</userinput>
&prompt.root; <userinput>chmod 777 /sapmnt</userinput>
&prompt.root; <userinput>chown root:dba /oracle</userinput>
&prompt.root; <userinput>chown <replaceable>sid</replaceable>adm:sapsys /compat/linux/usr/sap</userinput>
&prompt.root; <userinput>chmod 775 /compat/linux/usr/sap</userinput></screen>

        <para>然后我们以<username>ora<replaceable>sid</replaceable></username>身份创建目录，
	这些目录将成为<filename>/oracle/<replaceable>SID</replaceable></filename>的子目录：</para>

        <screen>&prompt.root; <userinput>su - ora<replaceable>sid</replaceable></userinput>
&prompt.root; <userinput>cd /oracle/<replaceable>SID</replaceable></userinput>
&prompt.root; <userinput>mkdir mirrlogA mirrlogB origlogA origlogB</userinput>
&prompt.root; <userinput>mkdir sapdata1 sapdata2 sapdata3 sapdata4 sapdata5 sapdata6</userinput>
&prompt.root; <userinput>mkdir saparch sapreorg</userinput>
&prompt.root; <userinput>exit</userinput></screen>

	<para>对于<application>&oracle; 8.1.7</application>的安装，需要一些额外的目录：
	</para>

	<screen>&prompt.root; <userinput>su - ora<replaceable>sid</replaceable></userinput>
&prompt.root; <userinput>cd /oracle</userinput>
&prompt.root; <userinput>mkdir 805_32</userinput>
&prompt.root; <userinput>mkdir client stage</userinput>
&prompt.root; <userinput>mkdir client/80x_32</userinput>
&prompt.root; <userinput>mkdir stage/817_32</userinput>
&prompt.root; <userinput>cd /oracle/<replaceable>SID</replaceable></userinput>
&prompt.root; <userinput>mkdir 817_32</userinput></screen>

	<note><para>目录<filename>client/80x_32</filename>必须是这个名字，不要用其他数字或字母来替换<emphasis>x</emphasis>。
	  </para></note>

        <para>第三步我们要以<username><replaceable>sid</replaceable>adm</username>身份创建目录：
	</para>

        <screen>&prompt.root; <userinput>su - <replaceable>sid</replaceable>adm</userinput>
&prompt.root; <userinput>cd /usr/sap</userinput>
&prompt.root; <userinput>mkdir <replaceable>SID</replaceable></userinput>
&prompt.root; <userinput>mkdir trans</userinput>
&prompt.root; <userinput>exit</userinput></screen>
      </sect3>

      <sect3 id="entriesinslashetcslashservices">
        <title><filename>/etc/services</filename>中的条目</title>

        <para><application>&sap.r3;</application>在<filename>/etc/services</filename>里面需要一些条目，
	这些不会在安装过程中被正确设置，请添加下面的条目：</para>

        <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
sapms<replaceable>SID</replaceable> 3600/tcp # SAP Message Server.  3600 + Instance-Number
sapgw00s   4800/tcp # SAP Secure Gateway   4800 + Instance-Number</programlisting>
      </sect3>

      <sect3 id="necessarylocales">
        <title>必要的本地化</title>
	<indexterm><primary>本地化</primary></indexterm>

        <para><application>&sap;</application>至少要求两个本地化设置，它不是RedHat的默认安装。
	 &sap;提供从他们的FTP服务器下载必需的RPMs（只有您是OSS的客户才能访问）。
          看注解0171356查找您需要的RPMs列表。</para>

        <para>也可以只创建适当的链接（例如从<emphasis>de_DE</emphasis>到<emphasis>en_US</emphasis>），
	但是我们不推荐在生产系统上这样做（尽管它让IDES system工作的没有一点问题）。
	下面的本地化设置是必需的：</para>

        <programlisting>de_DE.ISO-8859-1
en_US.ISO-8859-1</programlisting>

	<para>像这样创建链接</para>

	<screen>&prompt.root; <userinput>cd /compat/linux/usr/share/locale</userinput>
&prompt.root; <userinput>ln -s de_DE de_DE.ISO-8859-1</userinput>
&prompt.root; <userinput>ln -s en_US en_US.ISO-8859-1</userinput></screen>

        <para>如果他们不出现，在安装时可能会有问题。如果忽略这些问题（通过设置<filename>CENTRDB.R3S</filename>文件
	里面的<literal>STATUS</literal>为<literal>OK</literal>），不费一番周折，
	您就别想登陆进<application>&sap;</application>系统。</para>
      </sect3>

      <sect3 id="kerneltuning">
        <title>内核调整</title>
	<indexterm><primary>内核调整</primary></indexterm>

 <para><application>&sap.r3;</application>
 需要许多资源。我因此添加了下面的参数在我的内核配置文件中：
</para>

        <programlisting># Set these for memory pigs (SAP and Oracle):
options MAXDSIZ="(1024*1024*1024)"
options DFLDSIZ="(1024*1024*1024)"
# System V options needed.
options SYSVSHM #SYSV-style shared memory
options SHMMAXPGS=262144 #max amount of shared mem. pages
#options SHMMAXPGS=393216 #use this for the 46C inst.parameters
options SHMMNI=256 #max number of shared memory ident if.
options SHMSEG=100 #max shared mem.segs per process
options SYSVMSG #SYSV-style message queues
options MSGSEG=32767 #max num. of mes.segments in system
options MSGSSZ=32 #size of msg-seg. MUST be power of 2
options MSGMNB=65535 #max char. per message queue
options MSGTQL=2046 #max amount of msgs in system
options SYSVSEM #SYSV-style semaphores
options SEMMNU=256 #number of semaphore UNDO structures
options SEMMNS=1024 #number of semaphores in system
options SEMMNI=520 #number of semaphore identifiers
options SEMUME=100       #number of UNDO keys</programlisting>


        <para>这篇文档中指定的最小值是来自&sap;。没有针对Linux的描述，看看HP-UX的相关介绍了解更多信息 。
         安装4.6C SR2需要更多的内存，共享内存比<application>&sap;</application>和
	 <application>&oracle;</application>需要的还多，所以尽量为共享内存选一个大值。
	 </para>

	<note><para>FreeBSD&nbsp;4.5在&i386;上缺省应该设置<literal>MAXDSIZ</literal>和
	<literal>DFLDSIZ</literal>到1&nbsp;GB。否则，奇怪的错误像
	<errorname>ORA-27102: out of memory</errorname>和
          <errorname>Linux Error: 12: Cannot allocate memory</errorname>
          会出现。</para></note>
      </sect3>
    </sect2>

    <sect2 id="installingsapr3">
      <title>安装&sap.r3;</title>

      <sect3 id="preparingsapcdroms">
        <title>准备&sap; CDROMs</title>

        <para>在安装过程中，有许多CDROM要被挂上和卸下。建议您有多个CDROM驱动器，
	您可以把它们都挂上。我决定拷贝CDROM的内容到相应的目录：</para>

	<programlisting>/oracle/<replaceable>SID</replaceable>/sapreorg/<replaceable>cd-name</replaceable></programlisting>

        <para>对于4.6B/IDES的安装，<replaceable>cd-name</replaceable>是<filename>KERNEL</filename>，
	  <filename>RDBMS</filename>， <filename>EXPORT1</filename>，
	  <filename>EXPORT2</filename>，<filename>EXPORT3</filename>,
	  <filename>EXPORT4</filename>, <filename>EXPORT5</filename> 和
	  <filename>EXPORT6</filename>中的一个，对于4.6C SR2的安装，是
	  <filename>KERNEL</filename>， <filename>RDBMS</filename>，
	  <filename>DISK1</filename>，<filename>DISK2</filename>，
	  <filename>DISK3</filename>，<filename>DISK4</filename>和
	  <filename>LANG</filename>中的一个。
	  所有挂载上的CDs里面的文件名都应该是大写， 否则要用<option>-g</option>选项来挂载。所以使用下面的命令：
	  </para>

        <screen>&prompt.root; <userinput>mount_cd9660 -g /dev/cd0a /mnt</userinput>
&prompt.root; <userinput>cp -R /mnt/* /oracle/<replaceable>SID</replaceable>/sapreorg/<replaceable>cd-name</replaceable></userinput>
&prompt.root; <userinput>umount /mnt</userinput></screen>
      </sect3>

      <sect3 id="runningtheinstall-script">
        <title>运行安装脚本</title>

	<para>首先您需要准备一个<filename class="directory">install</filename>目录：</para>

	<screen>&prompt.root; <userinput>cd /oracle/<replaceable>SID</replaceable>/sapreorg</userinput>
&prompt.root; <userinput>mkdir install</userinput>
&prompt.root; <userinput>cd install</userinput></screen>

        <para>然后运行安装脚本，他会拷贝所有相关的文件到<filename class="directory">install</filename>目录：</para>

	<screen>&prompt.root; <userinput>/oracle/<replaceable>SID</replaceable>/sapreorg/KERNEL/UNIX/INSTTOOL.SH</userinput></screen>

	<para>由于这是一个完全定制化的&sap.r3;演示系统的IDES安装（4.6B），
        我们有6个而不仅仅是3个EXPORT CDs。
	基于这点，安装模板<filename>CENTRDB.R3S</filename>是用来安装一个标准的中央环境
	（<application>&r3;</application>和数据库），而不是IDES中央环境，
	  所以从<filename class="directory">EXPORT1</filename>目录拷贝相应的<filename>CENTRDB.R3S</filename>，
	  否则<command>R3SETUP</command>只要求3个EXPORT CDs。
	  </para>

	<para>新的<application>&sap; 4.6C SR2</application>发行版带有4张EXPORT CDs。
	控制安装步骤的参数文件是<filename>CENTRAL.R3S</filename>。
	  和早期发行版不同，它没有分开的中央环境的安装模板。
	  </para>

	<para>安装完后，使用<command>hostname</command>命令得到<application>&sap;</application>需要的主机名，
	不需要完整的域名。
         所以为<username>ora<replaceable>sid</replaceable></username>和
	  <username><replaceable>sid</replaceable>adm</username>
	   直接设置主机名，或设置别名<command>alias hostname='hostname -s'</command>。
	   可以在<filename>.profile</filename>和<filename>.login</filename>里面为这两个用户设置。
        </para>
      </sect3>

      <sect3 id="startr3setup-46B">
        <title>启动<command>R3SETUP</command> 4.6B</title>

        <para>确定<envar>LD_LIBRARY_PATH</envar>设置正确：
	</para>

        <screen>&prompt.root; <userinput>export LD_LIBRARY_PATH=/oracle/IDS/lib:/sapmnt/IDS/exe:/oracle/805_32/lib</userinput></screen>

        <para>从安装目录以<username>root</username>身份启动<command>R3SETUP</command>：
	</para>

        <screen>&prompt.root; <userinput>cd /oracle/IDS/sapreorg/install</userinput>
&prompt.root; <userinput>./R3SETUP -f CENTRDB.R3S</userinput></screen>

        <para>这个脚本会问一些问题（括号里面是缺省值，后面是实际输入）：
	</para>

        <informaltable frame="none" pgwide="1">
          <tgroup cols="3">
          <thead>
          <row>
            <entry>问题</entry>
            <entry>缺省值</entry>
            <entry>输入</entry>
          </row>
          </thead>
          <tbody>
          <row>
            <entry>Enter SAP System ID</entry>
            <entry>[C11]</entry>
            <entry>IDS<keycap>Enter</keycap></entry>
          </row>
          <row>
            <entry>Enter SAP Instance Number</entry>
            <entry>[00]</entry>
            <entry><keycap>Enter</keycap></entry>
          </row>
          <row>
            <entry>Enter SAPMOUNT Directory</entry>
            <entry>[/sapmnt]</entry>
            <entry><keycap>Enter</keycap></entry>
          </row>
          <row>
            <entry>Enter name of SAP central host</entry>
            <entry>[troubadix.domain.de]</entry>
            <entry><keycap>Enter</keycap></entry>
          </row>
          <row>
            <entry>Enter name of SAP db host</entry>
            <entry>[troubadix]</entry>
            <entry><keycap>Enter</keycap></entry>
          </row>
          <row>
            <entry>Select character set</entry>
            <entry>[1] (WE8DEC)</entry>
            <entry><keycap>Enter</keycap></entry>
          </row>
          <row>
            <entry>Enter Oracle server version (1) Oracle 8.0.5, (2) Oracle 8.0.6, (3) Oracle 8.1.5, (4) Oracle 8.1.6</entry>
            <entry> </entry>
            <entry>1<keycap>Enter</keycap></entry>
          </row>
          <row>
            <entry>Extract Oracle Client archive</entry>
            <entry>[1] (Yes, extract)</entry>
            <entry><keycap>Enter</keycap></entry>
          </row>
          <row>
            <entry>Enter path to KERNEL CD</entry>
            <entry>[/sapcd]</entry>
            <entry>/oracle/IDS/sapreorg/KERNEL</entry>
          </row>
          <row>
            <entry>Enter path to RDBMS CD</entry>
            <entry>[/sapcd]</entry>
            <entry>/oracle/IDS/sapreorg/RDBMS</entry>
          </row>
          <row>
            <entry>Enter path to EXPORT1 CD</entry>
            <entry>[/sapcd]</entry>
            <entry>/oracle/IDS/sapreorg/EXPORT1</entry>
          </row>
          <row>
            <entry>Directory to copy EXPORT1 CD</entry>
            <entry>[/oracle/IDS/sapreorg/CD4_DIR]</entry>
            <entry><keycap>Enter</keycap></entry>
          </row>
          <row>
            <entry>Enter path to EXPORT2 CD</entry>
            <entry>[/sapcd]</entry>
            <entry>/oracle/IDS/sapreorg/EXPORT2</entry>
          </row>
          <row>
            <entry>Directory to copy EXPORT2 CD</entry>
            <entry>[/oracle/IDS/sapreorg/CD5_DIR]</entry>
            <entry><keycap>Enter</keycap></entry>
          </row>
          <row>
            <entry>Enter path to EXPORT3 CD</entry>
            <entry>[/sapcd]</entry>
            <entry>/oracle/IDS/sapreorg/EXPORT3</entry>
          </row>
          <row>
            <entry>Directory to copy EXPORT3 CD</entry>
            <entry>[/oracle/IDS/sapreorg/CD6_DIR]</entry>
            <entry><keycap>Enter</keycap></entry>
          </row>
          <row>
            <entry>Enter path to EXPORT4 CD</entry>
            <entry>[/sapcd]</entry>
            <entry>/oracle/IDS/sapreorg/EXPORT4</entry>
          </row>
          <row>
            <entry>Directory to copy EXPORT4 CD</entry>
            <entry>[/oracle/IDS/sapreorg/CD7_DIR]</entry>
            <entry><keycap>Enter</keycap></entry>
          </row>
          <row>
            <entry>Enter path to EXPORT5 CD</entry>
            <entry>[/sapcd]</entry>
            <entry>/oracle/IDS/sapreorg/EXPORT5</entry>
          </row>
          <row>
            <entry>Directory to copy EXPORT5 CD</entry>
            <entry>[/oracle/IDS/sapreorg/CD8_DIR]</entry>
            <entry><keycap>Enter</keycap></entry>
          </row>
          <row>
            <entry>Enter path to EXPORT6 CD</entry>
            <entry>[/sapcd]</entry>
            <entry>/oracle/IDS/sapreorg/EXPORT6</entry>
          </row>
          <row>
            <entry>Directory to copy EXPORT6 CD</entry>
            <entry>[/oracle/IDS/sapreorg/CD9_DIR]</entry>
            <entry><keycap>Enter</keycap></entry>
          </row>
          <row>
            <entry>Enter amount of RAM for SAP + DB</entry>
            <entry> </entry>
            <entry>850<keycap>Enter</keycap> (in Megabytes)</entry>
          </row>
          <row>
            <entry>Service Entry Message Server</entry>
            <entry>[3600]</entry>
            <entry><keycap>Enter</keycap></entry>
          </row>
          <row>
            <entry>Enter Group-ID of sapsys</entry>
            <entry>[101]</entry>
            <entry><keycap>Enter</keycap></entry>
          </row>
          <row>
            <entry>Enter Group-ID of oper</entry>
            <entry>[102]</entry>
            <entry><keycap>Enter</keycap></entry>
          </row>
          <row>
            <entry>Enter Group-ID of dba</entry>
            <entry>[100]</entry>
            <entry><keycap>Enter</keycap></entry>
          </row>
          <row>
            <entry>Enter User-ID of <replaceable>sid</replaceable>adm</entry>
            <entry>[1000]</entry>
            <entry><keycap>Enter</keycap></entry>
          </row>
          <row>
            <entry>Enter User-ID of ora<replaceable>sid</replaceable></entry>
            <entry>[1002]</entry>
            <entry><keycap>Enter</keycap></entry>
          </row>
          <row>
            <entry>Number of parallel procs</entry>
            <entry>[2]</entry>
            <entry><keycap>Enter</keycap></entry>
          </row>
          </tbody>
          </tgroup>
        </informaltable>

        <para>如果没有把CD拷贝到不同的位置，那么<application>&sap;</application>安装程序就不能
	找到需要的CD（通过CD上的<filename>LABEL.ASC</filename>来辨别），
        它会要求您挂上CD，或键入加载路径。
	</para>

        <para><filename>CENTRDB.R3S</filename>不可能是自由出错的，
          它再次请求EXPORT4 CD，但是正确的值是6_LOCATI ON，然后7_LOCATION 等，所以您可以键入正确的值。
	  </para>




        <para>处理下面提到的问题，一样东西都要直接通过&oracle;数据库软件安装的地方。
	</para>
      </sect3>

      <sect3 id="startr3setup-46C">
	<title>Start <command>R3SETUP</command> 4.6C SR2</title>

	<para>确定<envar>LD_LIBRARY_PATH</envar>设置正确。
	  这和带<application>&oracle; 8.0.5</application>的4.6B的安装是不同的：
	  </para>

	<screen>&prompt.root; <userinput>export LD_LIBRARY_PATH=/sapmnt/PRD/exe:/oracle/PRD/817_32/lib</userinput></screen>

	<para>以<username>root</username>身份从安装目录启动<filename>R3SETUP</filename> ：</para>

	<screen>&prompt.root; <userinput>cd /oracle/PRD/sapreorg/install</userinput>
&prompt.root; <userinput>./R3SETUP -f CENTRAL.R3S</userinput></screen>

	<para>这个脚本会问一些问题（括号里面是缺省值，后面是实际输入）：</para>

	<informaltable frame="none" pgwide="1">
	  <tgroup cols="3">
	  <thead>
	  <row>
	    <entry>问题</entry>
	    <entry>缺省值</entry>
	    <entry>输入</entry>
	  </row>
	  </thead>
	  <tbody>
	  <row>
	    <entry>Enter SAP System ID</entry>
	    <entry>[C11]</entry>
	    <entry>PRD<keycap>Enter</keycap></entry>
	  </row>
	  <row>
	    <entry>Enter SAP Instance Number</entry>
	    <entry>[00]</entry>
	    <entry><keycap>Enter</keycap></entry>
	  </row>
	  <row>
	    <entry>Enter SAPMOUNT Directory</entry>
	    <entry>[/sapmnt]</entry>
	    <entry><keycap>Enter</keycap></entry>
	  </row>
	  <row>
	    <entry>Enter name of SAP central host</entry>
	    <entry>[majestix]</entry>
	    <entry><keycap>Enter</keycap></entry>
	  </row>
	  <row>
	    <entry>Enter Database System ID</entry>
	    <entry>[PRD]</entry>
	    <entry>PRD<keycap>Enter</keycap></entry>
	  </row>
	  <row>
	    <entry>Enter name of SAP db host</entry>
	    <entry>[majestix]</entry>
	    <entry><keycap>Enter</keycap></entry>
	  </row>
	  <row>
	    <entry>Select character set</entry>
	    <entry>[1] (WE8DEC)</entry>
	    <entry><keycap>Enter</keycap></entry>
	  </row>
	  <row>
	    <entry>Enter Oracle server version (2) Oracle 8.1.7</entry>
	    <entry> </entry>
	    <entry>2<keycap>Enter</keycap></entry>
	  </row>
	  <row>
	    <entry>Extract Oracle Client archive</entry>
	    <entry>[1] (Yes, extract)</entry>
	    <entry><keycap>Enter</keycap></entry>
	  </row>
	  <row>
	    <entry>Enter path to KERNEL CD</entry>
	    <entry>[/sapcd]</entry>
	    <entry>/oracle/PRD/sapreorg/KERNEL</entry>
	  </row>
	  <row>
	    <entry>Enter amount of RAM for SAP + DB</entry>
	    <entry>2044</entry>
	    <entry>1800<keycap>Enter</keycap> (in Megabytes)</entry>
	  </row>
	  <row>
	    <entry>Service Entry Message Server</entry>
	    <entry>[3600]</entry>
	    <entry><keycap>Enter</keycap></entry>
	  </row>
	  <row>
	    <entry>Enter Group-ID of sapsys</entry>
	    <entry>[100]</entry>
	    <entry><keycap>Enter</keycap></entry>
	  </row>
	  <row>
            <entry>Enter Group-ID of oper</entry>
            <entry>[101]</entry>
            <entry><keycap>Enter</keycap></entry>
          </row>
          <row>
            <entry>Enter Group-ID of dba</entry>
            <entry>[102]</entry>
            <entry><keycap>Enter</keycap></entry>
          </row>
          <row>
            <entry>Enter User-ID of <username>oraprd</username></entry>
            <entry>[1002]</entry>
            <entry><keycap>Enter</keycap></entry>
          </row>
          <row>
            <entry>Enter User-ID of <username>prdadm</username></entry>
            <entry>[1000]</entry>
            <entry><keycap>Enter</keycap></entry>
          </row>
          <row>
            <entry>LDAP support</entry>
            <entry> </entry>
            <entry>3<keycap>Enter</keycap> (no support)</entry>
          </row>
          <row>
            <entry>Installation step completed</entry>
            <entry>[1] (continue)</entry>
            <entry><keycap>Enter</keycap></entry>
          </row>
          <row>
            <entry>Choose installation service</entry>
            <entry>[1] (DB inst,file)</entry>
            <entry><keycap>Enter</keycap></entry>
          </row>
          </tbody>
          </tgroup>
        </informaltable>

        <para>到目前为止， 安装阶段只在创建用户时给出了一个错误OSUSERDBSID_IND_ORA（创建
	  用户<username>ora<replaceable>sid</replaceable></username>）和
	  OSUSERSIDADM_IND_ORA（创建用户<username><replaceable>sid</replaceable>adm</username>）。</para>

        <para>处理下面提到的问题，一样东西都要直接通过&oracle;数据库软件安装的地方。</para>
      </sect3>
    </sect2>

    <sect2 id="installingoracle805">
      <title>安装&oracle; 8.0.5</title>

      <para>请看相应的&sap;注释和 &oracle;的关于Linux的<filename>Readme</filename>
      以及<application>&oracle; DB</application>可能出现的问题。不是所有的问题都和不兼容库有关。
      </para>

      <para>关于<application>&oracle;</application>更多的安装信息，请参考<link
	  linkend="linuxemu-oracle">安装&oracle;</link>。</para>


      <sect3 id="installingtheoracle805withorainst">
        <title>用<command>orainst</command>安装&oracle; 8.0.5</title>

        <para>如果<application>&oracle; 8.0.5</application>要被使用，一些其他的库需要被成功地重新链接，
	因为<application>&oracle; 8.0.5</application>是与一个老的glibc连接的（Redhat 6.0），
        但RedHat 6.1已经使用了一个新的glibc。所以您必须安装下面额外的软件包来保证链接正常：
         </para>

        <para><filename>compat-libs-5.2-2.i386.rpm</filename></para>
        <para><filename>compat-glibc-5.2-2.0.7.2.i386.rpm</filename></para>
        <para><filename>compat-egcs-5.2-1.0.3a.1.i386.rpm</filename></para>
        <para><filename>compat-egcs-c++-5.2-1.0.3a.1.i386.rpm</filename></para>
        <para><filename>compat-binutils-5.2-2.9.1.0.23.1.i386.rpm</filename></para>

        <para>更多的信息，看相应的&sap;注释和&oracle;的<filename>Readme</filename>。
           如果这不是选项，您可以使用最初的程序，或使用与最初的Redhat系统重链接的程序。
          </para>

        <para>要编译智能代理，必须安装RedHat Tcl包。如果您不能得到
          <filename>tcl-8.0.3-20.i386.rpm</filename>，一个更新的
          <filename>tcl-8.0.5-30.i386.rpm</filename>也可以用。</para>

        <para>除了重新链接，安装是直截了当的：</para>

        <screen>&prompt.root; <userinput>su - oraids</userinput>
&prompt.root; <userinput>export TERM=xterm</userinput>
&prompt.root; <userinput>export ORACLE_TERM=xterm</userinput>
&prompt.root; <userinput>export ORACLE_HOME=/oracle/IDS</userinput>
&prompt.root; <userinput>cd $ORACLE_HOME/orainst_sap</userinput>
&prompt.root; <userinput>./orainst</userinput></screen>

        <para>用<keycap>Enter</keycap>来确认所有的屏幕直到安装完成，除了您必须取消
          <emphasis>&oracle; On-Line Text Viewer</emphasis>选项，因为当前Linux下不可用。
	  <application>&oracle;</application>会要求用<command>i386-glibc20-linux-gcc</command>重新链接来
	  代替<command>gcc</command>，<command>egcs</command>或者<command>i386-redhat-linux-gcc
          </command>。</para>


        <para>由于时间紧迫，我决定使用<application>&oracle; 8.0.5 PreProduction</application>版本。
	</para>

      </sect3>

      <sect3 id="installingtheoracle805preproduction">
        <title>安装&oracle; 8.0.5 Pre-production Release for
          Linux （Kernel 2.0.33）</title>


        <para>个安装很容易。挂上CD，启动安装程序。它就会要求&oracle;home目录的定位，
	然后拷贝那儿所有的程序。我不删除先前安装的RDBMS。

         </para>

        <para>然后，<application>&oracle;</application>数据库就可以毫无问题地运行了。
	</para>
      </sect3>
    </sect2>

    <sect2 id="installingoracle817">
      <title>安装&oracle; 8.1.7 Linux压缩包</title>
      <para>拷贝<filename>oracle81732.tgz</filename>到您要安装的目录，
      然后解压到<filename>/oracle/<replaceable>SID</replaceable>/817_32/</filename>。
      </para>
    </sect2>

    <sect2 id="continuewithsapr4installation">
      <title>继续&sap.r3;安装</title>

      <para>首先检查用户<username>idsamd</username>
        (<replaceable>sid</replaceable>adm)和
	<username>oraids</username>(ora<replaceable>sid</replaceable>)的环境变量。
        他们现在都有使用主机名的<filename>.profile</filename>，<filename>.login</filename>
	和<filename>.cshrc</filename>文件。在这个例子中，系统的主机名是没有限制的名称，
	您必须在所有三个文件中改变hostname为hostname -s。
	</para>

      <sect3 id="databaseload">
        <title>加载数据库</title>

        <para>然后，可以重新启动或继续<command>R3SETUP</command>。 <command>R3SETUP</command>就使用<command>R3load</command>
	 创建表空间加载数据（对46B IDES，从EXPORT1到EXPORT6，对46C从DISK1到DISK4）。
	 </para>

        <para>数据加载完后（可能需要一些时间），需要创建一些口令。对于测试安装，可以使用缺省口令：
	</para>

        <informaltable frame="none" pgwide="1">
          <tgroup cols="2">
          <thead>
          <row>
            <entry>问题</entry>
            <entry>输入</entry>
          </row>
          </thead>
          <tbody>
          <row>
            <entry>Enter Password for sapr3</entry>
            <entry>sap<keycap>Enter</keycap></entry>
          </row>
          <row>
            <entry>Confirum Password for sapr3</entry>
            <entry>sap<keycap>Enter</keycap></entry>
          </row>
          <row>
            <entry>Enter Password for sys</entry>
            <entry>change_on_install<keycap>Enter</keycap></entry>
          </row>
          <row>
            <entry>Confirm Password for sys</entry>
            <entry>change_on_install<keycap>Enter</keycap></entry>
          </row>
          <row>
            <entry>Enter Password for system</entry>
            <entry>manager<keycap>Enter</keycap></entry>
          </row>
          <row>
            <entry>Confirm Password for system</entry>
            <entry>manager<keycap>Enter</keycap></entry>
          </row>
          </tbody>
          </tgroup>
        </informaltable>

        <para>到目前为止，我们只在安装4.6B的过程中<command>dipgntab</command>出现了几个问题。
	</para>
      </sect3>

      <sect3 id="listener">
        <title>监听</title>

        <para>像下面这样用<username>ora<replaceable>sid</replaceable></username>用户启动
	<application>&oracle;</application>：
	</para>

        <screen>&prompt.user; <userinput>umask 0; lsnrctl start</userinput></screen>

        <para>另外您可能得到<errorcode>ORA-12546</errorcode>错误，因为sockets没有正确的权限。
        看&sap;注释072984。</para>
      </sect3>

      <sect3 id="mnlstables">
	<title>更新MNLS表</title>
	<para>如果您打算倒入non-Latin-1 languages到<application>&sap;</application>系统，
	您必须更新表的多语言支持。这在&sap; OSS注释15023和45619有描述。否则，
	您可以在安装<application>&sap;</application>的时候忽略这个问题。
	</para>
	<note><para>如果您不需要MNLS，还是需要检查表TCPDB和初始化工作是否做了。
	更多信息参考&sap;注释0015023和0045619。</para></note>
      </sect3>
    </sect2>

    <sect2 id="postinstallationsteps">
      <title>快速安装步骤</title>

      <sect3 id="requestsapr3licensekey">
        <title>需要&sap.r3;许可密钥</title>

        <para>您不得不要<application>&sap.r3;</application>许可密钥。这是必需的，
	因为临时许可只能用4个星期。 首先得到硬件的密匙。以用<username>idsadm</username>登入，
	然后调用<command>saplicense</command>：</para>

        <screen>&prompt.root; <userinput>/sapmnt/IDS/exe/saplicense -get</userinput></screen>

	<para>不带参数调用<command>saplicense</command>会给出一系列选项。
	  要安装上面的许可密钥，可以这样：</para>

        <screen>&prompt.root; <userinput>/sapmnt/IDS/exe/saplicense -install</userinput></screen>

        <para>您要输入下面的值：</para>

        <programlisting>SAP SYSTEM ID   = <replaceable>SID, 3 chars</replaceable>
CUSTOMER KEY    = <replaceable>hardware key, 11 chars</replaceable>
INSTALLATION NO = <replaceable>installation, 10 digits</replaceable>
EXPIRATION DATE = <replaceable>yyyymmdd, usually "99991231"</replaceable>
LICENSE KEY     = <replaceable>license key, 24 chars</replaceable></programlisting>
      </sect3>

      <sect3 id="creatingusers">
        <title>创建用户</title>

        <para>在客户机000中创建一个用户（有些工作需用客户机000来完成，但与用户<username>sap*</username>和
        <username>ddic</username>有些不同）。 作为一个用户名，我通常选择<username>wartung</username>
	（或英语中的<username>service</username>）。 配置文件需要<literal>sap_new</literal>和
        <literal>sap_all</literal>。对于额外的安全的默认用户口令应当被改变（这包括用户<username>sap*</username>和
        <username>ddic</username>）。
	</para>
      </sect3>

      <sect3 id="configtranssysprofileopermodesetc">
        <title>配置传送系统，配置，操作模式等</title>

        <para>在客户端000，用户不同于<username>ddic</username>和<username>sap*</username>，做下面的工作：
	</para>

        <informaltable frame="none" pgwide="1">
          <tgroup cols="2">
          <thead>
          <row>
            <entry>任务</entry>
            <entry>处理</entry>
          </row>
          </thead>
          <tbody>
          <row>
            <entry>Configure Transport System, e.g. as <emphasis>Stand-Alone
            Transport Domain Entity</emphasis></entry>
	    <entry>STMS</entry>
          </row>
          <row>
            <entry>Create / Edit Profile for System</entry>
            <entry>RZ10</entry>
          </row>
          <row>
            <entry>Maintain Operation Modes and Instances</entry>
            <entry>RZ04</entry>
          </row>
          </tbody>
          </tgroup>
        </informaltable>

        <para>些和所有其他的快速安装步骤在<application>&sap;</application>安装指南里面有描述。
	</para>
      </sect3>

      <sect3 id="editintsidsap">
        <title>编辑<filename>init<replaceable>sid</replaceable>.sap</filename>（<filename>initIDS.sap</filename>）</title>

	<para>文件<filename>/oracle/IDS/dbs/initIDS.sap</filename>
	  包含了<application>&sap;</application>备份配置。
	  这儿是使用的磁带机的大小，压缩的类型。要使用<command>sapdba</command> /
	  <command>brbackup</command>来得到这些。
	  我们可以改变下面的值：</para>

        <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</programlisting>

        <para>解释</para>



        <para><varname>compress</varname>：我使用的磁带机是HP DLT1，它支持硬件压缩。 </para>


        <para><varname>archive_function</varname>：
 这个定义了保存&oracle;文件日志的默认行为：新的日志文件被保存到磁带机上，
 保存的日志文件会被再次保存然后再删除。如果您需要恢复数据库，
 而其中一个磁带机已经损坏了，这可以防止出现麻烦。
 </para>

        <para><varname>cpio_flags</varname>：缺省使用<option>-B</option>来设置块大小为
        5120&nbsp;Bytes。对于DLT-Tapes，HP建议至少32&nbsp;K，所以我们使用<option>--block-size=128</option>
	设置64&nbsp;K。 <option>--format=newc</option>是必需的，因为我的inode数目超过了65535。
	最后一个选项<option>--quiet</option>是必需的，否则<command>brbackup</command>会在用
        <command>cpio</command>来输出的时候报错。
	</para>

        <para><varname>cpio_in_flags</varname>：
	这个标志从磁带机加载回数据。格式是自动验证的。
	</para>

        <para><varname>tape_size</varname>:
	通常给出了磁带机的存储容量。出于安全原因，这个值要比实际的值要小一些。
	</para>

        <para><varname>tape_address</varname>：被<command>cpio</command>使用的非rewindable的设备。
	</para>

        <para><varname>tape_address_rew</varname>：被<command>cpio</command>使用的非rewindable的设备。</para>
      </sect3>

      <sect3>
	<title>安装后的配置</title>

	<para>下面的<application>&sap;</application>参数应该在安装以后调整（例子是IDES 46B, 1&nbsp;GB内存）：
	</para>

	<informaltable frame="none" pgwide="1">
	  <tgroup cols="2">
	    <thead>
	      <row>
		<entry>名称</entry>
		<entry>值</entry>
	      </row>
	    </thead>
	    <tbody>
	      <row>
		<entry>ztta/roll_extension</entry>
		<entry>250000000</entry>
	      </row>
	      <row>
		<entry>abap/heap_area_dia</entry>
                <entry>300000000</entry>
	      </row>
	      <row>
		<entry>abap/heap_area_nondia</entry>
		<entry>400000000</entry>
	      </row>
	      <row>
		<entry>em/initial_size_MB</entry>
		<entry>256</entry>
	      </row>
	      <row>
		<entry>em/blocksize_kB</entry>
		<entry>1024</entry>
	      </row>
	      <row>
		<entry>ipc/shm_psize_40</entry>
		<entry>70000000</entry>
	      </row>
	    </tbody>
	  </tgroup>
	</informaltable>

	<para>&sap;注释0013026：</para>

	<informaltable frame="none" pgwide="1">
	  <tgroup cols="2">
	    <thead>
	      <row>
		<entry>名称</entry>
		<entry>值</entry>
	      </row>
	    </thead>
	    <tbody>
	      <row>
		<entry>ztta/dynpro_area</entry>
		<entry>2500000</entry>
	      </row>
	    </tbody>
	  </tgroup>
	</informaltable>

	<para>&sap;注释0157246：</para>

	<informaltable frame="none" pgwide="1">
	  <tgroup cols="2">
	    <thead>
	      <row>
		<entry>Name</entry>
		<entry>Value</entry>
	      </row>
	    </thead>
	    <tbody>
	      <row>
		<entry>rdisp/ROLL_MAXFS</entry>
		<entry>16000</entry>
	      </row>
	      <row>
		<entry>rdisp/PG_MAXFS</entry>
		<entry>30000</entry>
	      </row>
	    </tbody>
	  </tgroup>
	</informaltable>

	<note>
	  <para>根据上面的参数，在使用1&nbsp;GB内存的系统上，可以像下面这样找到内存消耗：
	  </para>

	  <programlisting>Mem: 547M Active, 305M Inact, 109M Wired, 40M Cache, 112M Buf, 3492K Free</programlisting>
	</note>
      </sect3>
    </sect2>

    <sect2 id="problemsduringinstallation">
      <title>安装过程出现的问题</title>

      <sect3 id="restartr3setup">
	<title>修复一个问题后重起<command>R3SETUP</command></title>

	<para>如果出现问题<command>R3SETUP</command>会停止。如果您找到相关的日志文件并修复了问题。
	您需要再次重起<command>R3SETUP</command>，对于<command>R3SETUP</command>报的最后一个错误可以使用
	REPEAT选项。
	</para>

	<para>要重起<command>R3SETUP</command>，只要使用相应的<filename>R3S</filename>文件重起：</para>

	  <screen>&prompt.root; <userinput>./R3SETUP -f CENTRDB.R3S</userinput></screen>

	  <para>for 4.6B, or with</para>

	  <screen>&prompt.root; <userinput>./R3SETUP -f CENTRAL.R3S</userinput></screen>

	  <para>对4.6C，不管有没有错误都使用<filename>CENTRAL.R3S</filename>或
	  <filename>DATABASE.R3S</filename>。</para>

	<note><para>在某些阶段，<command>R3SETUP</command>假设database和<application>&sap;</application>
	进程都启动了。但是如果发生错误使得database没有启动，您就必须手动启动database和<application>&sap;</application>。
	修复错误后，还需要再次重起<command>R3SETUP</command>。
	</para>
	  <para>也不要忘记再次重起<application>&oracle;</application>监听。
	  </para>
	</note>
      </sect3>

      <sect3 id="indoraduringduringr3setup">
        <title>OSUSERSIDADM_IND_ORA during <command>R3SETUP</command></title>

        <para>如果在这阶段<command>R3SETUP</command>报错,编辑<command>R3SETUP</command>使用的模板文件
	（<filename>CENTRDB.R3S</filename> (4.6B)或者<filename>CENTRAL.R3S</filename>或者<filename>DATABASER3S</filename> (4.6C)）。定位到<literal>[OSUSERSIDADM_IND_ORA]</literal>或者搜索<literal>STATUS=ERROR</literal>条目
	然后像下面这样编辑它：
	</para>

        <programlisting>HOME=/home/<replaceable>sid</replaceable>adm (was empty)
STATUS=OK (had status ERROR)
        </programlisting>

        <para>然后重起<command>R3SETUP</command>。
	</para>
      </sect3>

      <sect3 id="indoraduringr3setup">
        <title>OSUSERDBSID_IND_ORA during <command>R3SETUP</command></title>

        <para><command>R3SETUP</command>也可能在这个阶段报错。修正方法和上面的OSUSERSIDADM_IND_ORA一样。
	编辑下面的值：
	</para>

        <programlisting>STATUS=OK</programlisting>

        <para>重起<command>R3SETUP</command>。
	</para>
      </sect3>

      <sect3 id="oraviewvrffilenotfound">
        <title>&oracle;安装找不到<errorname>oraview.vrf文件</errorname></title>

        <para>开始安装之前没有取消<emphasis>&oracle; On-Line Text Viewer</emphasis>

           既然这个选项当前没有用于Linux，这在安装时是需要标记的，在<application>&oracle;</application>
	   安装中取消它，然后重新安装。</para>
      </sect3>

      <sect3 id="textenvincalid">
        <title><errorname>TEXTENV_INVALID</errorname> during <command>R3SETUP</command>, RFC or SAPgui Start</title>

        <para>如果这个错误还出现，正确的本地化可能已经丢了。  &sap;注释0171356列出了必须的RPMs
	（比如<filename>saplocales-1.0-3</filename>,
	  <filename>saposcheck-1.0-1</filename> for RedHat 6.1）。 在这个例子中，您忽略了所有相关的错误，
	  <literal>STATUS</literal>从<literal>ERROR</literal>到<literal>OK</literal>然后重起
	  <command>R3SETUP</command>。<application>&sap;</application>系统不会被正确地配置，
	  您就不能用一个<application>SAPgui</application>连接到系统。
          设法使用一个旧的Linux sapgui连接会得到下面的信息：</para>

        <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</programlisting>

        <para>这个问题归咎于<application>&sap.r3;</application>不能正确地本地化，也不能自己正确地配置。
         要能够连接到<application>&sap;</application>, 需要在 <filename>DEFAULT.PFL</filename>（看注释0043288）
	 文件中添加下面的记录：
	 </para>

	<programlisting>abap/set_etct_env_at_new_mode = 0
install/collate/active = 0
rscp/TCP0B = TCP0B</programlisting>

        <para>重起<application>&sap;</application>系统。现在，您可以连接到系统，
	即使您指定的国家语言不能正常工作。设置完国家后，这些记录会从<filename>DEFAULT.PFL</filename>文件
	删除。然后重新启动<application>&sap;</application>系统。</para>

      </sect3>

      <sect3 id="ora-00001">
	<title><errorcode>ORA-00001</errorcode></title>
	<para>这个错误只会在FreeBSD&nbsp;4.5上安装<application>&oracle; 8.1.7</application>
	的时候出现。因为<application>&oracle;</application>database不能自己正确初始化。
	 在系统上保留semaphores和shared memory。
	  然后再次启动数据库会出现<errorcode>ORA-00001</errorcode>错误。
	  </para>

	<para>用<command>ipcs -a</command>找到再用<command>ipcrm</command>去掉。</para>
      </sect3>

      <sect3 id="ora-00445pmon">
	<title><errorcode>ORA-00445</errorcode> （后台进程PMON没有启动）</title>
	<para>这个错误发生在<application>&oracle; 8.1.7</application>上。
	如果没有用<username>prdadm</username>用户启动<command>startsap</command>脚本
	（例如<command>startsap_majestix_00</command>）会报这个错误。</para>

	<para>一种可能的解决方法是用<username>oraprd</username>用户使用<command>svrmgrl</command>：
	</para>

	<screen>&prompt.user; <userinput>svrmgrl</userinput>
SVRMGR&gt; <userinput>connect internal;</userinput>
SVRMGR&gt; <userinput>startup</userinput>;
SVRMGR&gt; <userinput>exit</userinput></screen>

      </sect3>

      <sect3 id="ora-12546">
        <title><errorcode>ORA-12546</errorcode>（用正确的权限启动监听）</title>

        <para>以<username>oraids</username>用户启动<application>&oracle;</application>监听：
           </para>

        <screen>&prompt.root; <userinput>umask 0; lsnrctl start</userinput></screen>

        <para>如果您得到<errorcode>ORA-12546</errorcode>错误，没有权限连接到sockets。
	请看&sap;注释0072984。</para>
      </sect3>

      <sect3 id="ora-27102">
	<title><errorcode>ORA-27102</errorcode> (Out of Memory)</title>

	<para>这个错误发生在使用<literal>MAXDSIZ</literal>和<literal>DFLDSIZ</literal>大于
	1&nbsp;GB（1024x1024x1024）。 我们一般得到错误<errorname>Linux Error 12: Cannot allocate memory</errorname>。
	</para>
      </sect3>

      <sect3 id="dipgntabindind">
        <title>[DIPGNTAB_IND_IND] during <command>R3SETUP</command></title>

        <para>通常，看&sap;注释0130581 （<command>R3SETUP</command>步骤里面的
	  <literal>DIPGNTAB</literal>终止）。在IDES-specific安装的时候，因为某些原因
	  安装过程没有使用正确的<application>&sap;</application>系统名<quote>IDS</quote>，而是用空字符
	  <literal>""</literal>代替。 这会导致一些访问目录的小问题，因为路径是动态使用
	  <replaceable>SID</replaceable>来创建的（这里是IDS）。所以用下面的方法代替：
	  </para>

        <programlisting>/usr/sap/IDS/SYS/...
/usr/sap/IDS/DVMGS00</programlisting>

        <para>下面的路径被使用</para>

        <programlisting>/usr/sap//SYS/...
/usr/sap/D00</programlisting>

        <para>为了继续安装，我们创建了一个附加的目录：
	</para>

        <screen>&prompt.root; <userinput>pwd</userinput>
/compat/linux/usr/sap
&prompt.root; <userinput>ls -l</userinput>
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</screen>

        <para>我们也发现在&sap;注释（0029227和0008401）里面描述了这个行为。
	我们没有在<application>&sap; 4.6C</application>安装里面遭遇这些问题。
	</para>
      </sect3>

      <sect3 id="rfcrswboiniindind">
        <title>[RFCRSWBOINI_IND_IND] during <command>R3SETUP</command></title>

	<para>安装<application>&sap; 4.6C</application>时，这个错误是前面发生过的一个错误的
	结果。所以，您不得不查看相应的日志文件并修复错误。
	</para>

        <para>如果查看完日志文件后这个错误确实存在（看&sap;注释），您可以设置<literal>STATUS</literal>
	从<literal>ERROR</literal>到<literal>OK</literal>（<filename>CENTRDB.R3S</filename>文件里面）
	然后重起<command>R3SETUP</command>。安装完后，您必须从事务SE38执行
	  <literal>RSWBOINS</literal>。关于<literal>RFCRSWBOINI</literal>和<literal>RFCRADDBDIF</literal>的更多信息
	  查看&sap;注释0162266。
	  </para>
      </sect3>

      <sect3 id="rfcraddbdifindind">
        <title>[RFCRADDBDIF_IND_IND] during <command>R3SETUP</command></title>
	<para>通过查看日志文件确定这个错误，它不是由于前面的问题导致的。
	</para>

        <para>如果您确定已经应用了&sap;注释0162266，就只要设置
	<literal>STATUS</literal>从<literal>ERROR</literal>到<literal>OK</literal>
	（<filename>CENTRDB.R3S</filename>文件里面）。然后重起<command>R3SETUP</command>。
	安装完后，您必须从事务SE38执行<literal>RADDBDIF</literal>。
	</para>
      </sect3>

      <sect3 id="sigactionsig31">
        <title><errorcode>sigaction sig31: File size limit exceeded</errorcode></title>

	<para>这个错误在启动<application>&sap;</application>进程<emphasis>disp+work</emphasis>时出现。
	如果用<command>startsap</command>脚本启动<application>&sap;</application>，
        就会启动子进程，并由它启动后面所有的其他<application>&sap;</application>进程。
	  所以脚本本身不会注意到有错误发生。
	  </para>

	<para>为了检查<application>&sap;</application>进程是否正确启动，可以用
	  <command>ps ax | grep <replaceable>SID</replaceable></command>查看进程的状态。
          您会得到所有<application>&oracle;</application>和<application>&sap;</application>进程列表。
          如果看起来有些进程没有启动，或者您不能正确连接到<application>&sap;</application>系统。
          查看相应的日志文件，可以在
          <filename>/usr/sap/<replaceable>SID</replaceable>/DVEBMGS<replaceable>nr</replaceable>/work/</filename>
          下找到， 一般查看 <filename>dev_ms</filename> 和
          <filename>dev_disp</filename> 文件。</para>

	<para>如果<application>&oracle;</application>和<application>&sap;</application>的共享内存总量超过了
	内核配置文件定义的大小就会出现signal 31错误，并且不能解析大的内存地址：
	</para>

        <programlisting># larger value for 46C production systems:
options SHMMAXPGS=393216
# smaller value sufficient for 46B:
#options SHMMAXPGS=262144</programlisting>

      </sect3>

      <sect3 id="saposcolfails">
        <title>启动<command>saposcol</command>失败</title>
	<para>使用<command>saposcol</command> (version 4.6D)会出现一些问题。
	  <application>&sap;</application>系统使用<command>saposcol</command>收集系统性能数据。
	  这个程序不是必需的。所以这些问题可以看作是小问题。
	  老版本（4.6B）可以工作，但是不能收集所有的性能数据（很多调用只返回0，像CPU使用率）。
	  </para>
      </sect3>
    </sect2>
  </sect1>

  <sect1 id="linuxemu-advanced">
    <title>高级主题</title>

    <para>如果您对Linux兼容模式是如何工作的感到好奇，这节正是您所需要的。 下面的绝大部分内容是由
    Terry Lambert<email>tlambert@primenet.com</email> （Message ID:
      <literal>&lt;199906020108.SAA07001@usr09.primenet.com&gt;</literal>）发表在邮件列表&a.chat;上的内容组成的。
      </para>

    <sect2>
      <title>它是如何工作的？</title>
      <indexterm><primary>可执行类加载器</primary></indexterm>

      <para>FreeBSD有一个<quote>可执行类加载器</quote>。它主要是嵌入了&man.execve.2;系统调用。
</para>


      <para>碰巧的是FreeBSD有一个引导器（loader）的列表，而不是一个简单的返回一个
      符号 <literal>#!</literal>的引导器！</para>

      <para>从历史上来讲，只有&unix;平台的引导器会检查魔术（magic）数
      （通常是文件的前4个或8个字节）是否是二进制的，
      如果是，就调用二进制引导程序。</para>



      <para>如果它不是二进制类型的&man.execve.2;调用就会返回一个错误，shell就试图用shell命令执行它。
      </para>

      <para>缺省是使用<quote>当前设定的shell</quote>。</para>



      <para>随后，进行了一些hack, &man.sh.1;开始检查前两个字符，如果它们是<literal>:\n</literal>，
      那它就调用&man.csh.1;（我们相信是SCO最先做这个hack的）。</para>

      <para>FreeBSD现在所做的是用一个普通的<literal>#!</literal>引导器仔细检查引导器的列表，
      然后由解释程序一个接一个地解释，返回给<filename>/bin/sh</filename>。
      </para>
      <indexterm><primary>ELF</primary></indexterm>

      <para>为了支持Linux ABI，FreeBSD就把魔术数看作为一个二进制ELF程序。（
      这样一来，它就使得在FreeBSD， &solaris;，Linux和其他任何操作系统之间只要使用ELF格式就都可以顺利运行）。
      </para>
      <indexterm><primary>Solaris</primary></indexterm>

      <para>ELF引导器会寻找一个专门的<emphasis>标记</emphasis>，
       它是在ELF映像中的一个注释部分，但在SVR4/&solaris;的ELF中没有。
</para>

      <para>为了执行Linux程序，它们必须被打上<literal>Linux</literal>类型的<emphasis>标记</emphasis>；
      使用&man.brandelf.1;：</para>

      <screen>&prompt.root; <userinput>brandelf -t Linux file</userinput></screen>



      <para>做完之后，ELF引导器就会看到文件上的<literal>Linux</literal>的标记。
      </para>
      <indexterm>
        <primary>ELF</primary>
	<secondary>标记</secondary>
      </indexterm>

      <para>当ELF引导器看到<literal>Linux</literal>的标记，
      引导器就会在<literal>proc</literal>结构中替换一个指示器。
      所有的系统调用就会通过这个指示器来索引（在一个传统的 &unix;系统中，
      这就是<literal>sysent[]</literal>结构队列，包含系统调用）。
     此外，为了解决由于信号杂乱所造成的陷阱向量的问题，会造成线程的剧增，
     需要切断其他（或较小的）由Linux内核模块产生的修正。
      </para>



      <para>Linux系统调用向量包含一个<literal>sysent[]</literal>记录的列表，
      它的地址位于内核模块之中。</para>

      <para>当一个系统调用被Linux程序调用时，有缺陷的代码会把系统调用功能的指示器从<literal>proc</literal>结构中解除，
      然后获得Linux，而不是FreeBSD，系统调用入口点。</para>

      <para>另外，Linux模式动态地<emphasis>reroots</emphasis>查找；这和启动文件系统的<option>union</option>
      选项是等效的（即时不是<literal>unionfs</literal>文件系统）。
      首先会试图在<filename>/compat/linux/<replaceable>original-path</replaceable></filename>
      目录查找文件，如果失败了，就会在<filename>/<replaceable>original-path</replaceable></filename>
      目录下查找。这使得需要其它程序的程序可以运行（例如，Linux工具链都可以在Linux ABI的支持下工作）。
      也就是说Linux程序可以加载和执行FreeBSD程序，如果当前没有相应的Linux程序，
      那您可以在<filename>/compat/linux</filename>目录树中放置一个&man.uname.1;，来确保Linux程序不提示它们不能运行在Linux上。
	</para>

      <para>在FreeBSD内核中有一个Linux内核；由内核提供的能够提供所有服务的各种潜在功能
      在FreeBSD系统调用表记录和Linux系统调用表记录之间是一样的：
      文件系统操作，虚拟内存操作，信号发送，System V IPC，&hellip;等等。
      唯一的不同是FreeBSD会得到FreeBSD的<emphasis>胶合</emphasis>功能，
      而Linux程序会得到Linux的<emphasis>胶合</emphasis>功能
      （大部分老的操作系统只有它们自己的<emphasis>胶合</emphasis>函数，
      函数地址在静态全局变量<literal>sysent[]</literal>结构数据里面，
      而不是动态的初始化到进程的<literal>proc</literal>结构）。
      </para>



      <para>哪一个是FreeBSD自己的ABI呢？这无关紧要。基本上，
      唯一的不同是FreeBSD的<emphasis>胶合</emphasis>功能是被静态连接到内核，
      而Linux的<emphasis>胶合</emphasis>功能可能是被静态连接到内核，
      也可能它们通过一个内核模块来访问。
      </para>



      <para>有一个真正的模拟器吗？没有，它只不过是一个ABI执行机制，不是一个模拟器。</para>

      <para>为什么有时它被叫做<quote>Linux模拟器</quote>？
      只是为了更容易地卖出FreeBSD罢了！
      实际上，历史上从来没有描述这样一种执行机制的名字，FreeBSD并不是真正地运行Linux程序，如果您不编译进代码，
      或加载一个模块。
      就需要有一个名字来描述这样一种加载功能--因此就想出了<quote>Linux模拟器</quote>这样一个名字。
      </para>
    </sect2>
  </sect1>
</chapter>

<!--
     Local Variables:
     mode: sgml
     sgml-declaration: "../chapter.decl"
     sgml-indent-data: t
     sgml-omittag: nil
     sgml-always-quote-attributes: t
     sgml-parent-document: ("../book.sgml" "part" "chapter")
     End:
-->
