diff --git a/zh_CN.GB2312/books/handbook/linuxemu/chapter.sgml b/zh_CN.GB2312/books/handbook/linuxemu/chapter.sgml index 97596d46e2..ec23ce67ba 100644 --- a/zh_CN.GB2312/books/handbook/linuxemu/chapter.sgml +++ b/zh_CN.GB2312/books/handbook/linuxemu/chapter.sgml @@ -1,2992 +1,2999 @@ Jim Mock Restructured and parts updated by Brian N. Handy Originally contributed by Rich Murphey Linux二进制兼容模式 概述 Linux二进制兼容模式 二进制兼容模式 Linux - FreeBSD提供了与其他几种类&unix;操作系统兼容的模式,包括Linux。 - 您可能会问为什么FreeBSD要能够运行Linux二进制程序? - 问题的答案很简单。许多公司和开发人员只为Linux开发程序, - 因为它是目前计算机世界最热门的技术。 - 这样就导致我们这些FreeBSD用户必须把他们这些公司和开发人员开发的应用程序移植到本地FreeBSD版本上来。 - 问题是,这些公司中的绝大多数都无法知道有多少人会使用他们的FreeBSD版本的产品, - 所以许多公司仍然只开发Linux平台的产品。那么FreeBSD用户应该做些什么呢? - 这就是使用Linux二进制兼容性的原因。 - - - 简单来讲,这种兼容性允许FreeBSD用户能够不做任何修改就可以运行大约90%的Linux应用程序。 - 这些包括&staroffice;, - Linux版的&netscape;, + FreeBSD 提供了与其他几种类 + &unix; 操作系统, 包括 Linux, 的兼容性。 现在您可能会问, 为什么 + FreeBSD 需要能够运行 Linux 的可执行文件? 答案很简单。 + 许多公司和开发人员只为 Linux 开发程序, + 因为这是目前计算机世界 最热门 的技术。 + 这使得我们 FreeBSD 用户不得不去劝说这些公司和开发人员提供他们应用程序可以直接在 + FreeBSD 上运行的版本。 问题是, 许多这样的公司并不真的知道到底提供了 + FreeBSD 版本之后能带来多少用户, 因此许多仍然只开发 Linux + 的版本。 这时 FreeBSD 用户能做什么呢? 答案就是使用 FreeBSD + 所提供的 Linux 二进制兼容性。 + + 简而言之, 这种兼容性能够让 FreeBSD 用户不加修改地直接运行大约 90% + 的 Linux 应用程序。 这包括类似 &staroffice;, + Linux 版本的 &netscape;&adobe; &acrobat;, - RealPlayer - 5和7, VMware, + RealPlayer, + VMware&oracle;WordPerfect, - Doom, Quake,和更多的其他程序。 - 据说在某些情况下,在FreeBSD上Linux程序的性能比它们在Linux上运行得还要好。 - - Linux - /proc文件系统 - + Doom, + Quake, 等等。 此外, 也有人说, + 某些情况下, 在 FreeBSD 上面运行的 Linux 程序的性能, + 甚至好于直接在 Linux 上面运行。 - 然而,一些具有Linux本身操作系统特性的程序就无法在FreeBSD上运行。 - 如果它们使用Linux的/proc文件系统 - (它与FreeBSD的/proc文件系统是不同的) - 或如启用虚拟8086模式这样特定的 &i386;调用,那Linux的兼容模式就无法工作。 - + 然而, 仍然有一些只有 Linux 才有的操作系统特性在 FreeBSD 上并不被支持。 + 如果 Linux 程序过分地使用只能在 &i386; 上使用的特性, + 例如启用虚拟 8086 模式, 则也有可能无法在 FreeBSD 上运行。 读完这章,您将了解到: 如何在您的系统中启用Linux兼容模式。 如何安装额外的Linux共享库。 如何在FreeBSD上安装Linux应用程序。 在FreeBSD上,Linux兼容模式的执行细节。 阅读这章之前,您应该知道: 如何安装第三方软件()。 安装 KLD (kernel loadable object) 默认的Linux兼容模式没有被打开。启用这个功能的最容易的方法是调用linux KLD对象(Kernel LoaDable object)。您可以在命令行通过健入linux来加载这个模块。 如果您想让Linux二进制兼容性总是被启用,您可以在/etc/rc.conf加入下面这一行: linux_enable="YES" &man.kldstat.8;可以用来检查KLD模块是否加载: &prompt.user; kldstat Id Refs Address Size Name 1 2 0xc0100000 16bdb8 kernel 7 1 0xc24db000 d000 linux.ko 内核选项 LINUX 如果您不想或者无法将Linux KLD加载,您就需要在内核中静态链接进Linux二进制兼容模式。您必须在 您的内核配置文件里面加入options COMPAT_LINUX,然后按照重新编译内核。 安装Linux运行时库 Linux 安装Linux运行时库 有两种方法来安装Linux运行时库,要么使用linux_base port, 要么手动安装。 - 使用linux_base Port安装 - ports collection + 通过使用 linux_base Port 来安装 + Ports Collection 这是最容易的安装方法,只需要像安装其他port一样从 - ports collection来安装: + Ports Collection来安装: &prompt.root; cd /usr/ports/emulators/linux_base &prompt.root; make install distclean 您现在应当是工作在Linux兼容模式下了。一些程序可能会提示系统库的版本不正确。通常,这不是问题。 有多个版本的emulators/linux_base port,针对不同的版本的Linux。 您应该选择最接近Linux应用程序需要的那个版本来安装。 手动安装 如果您没有安装 Ports Collection,您也可以通过手动来安装Linux运行时库。 您将需要这些程序依赖的Linux共享库,而且您需要创建一个shadow root 目录/compat/linux,任何要被Linux程序打开的共享库都首先在这个目录里面查找。 所以,如果一个Linux程序加载了,例如,/lib/libc.so,FreeBSD 会首先尝试打开 /compat/linux/lib/libc.so,如果不存在,它将尝试打开/lib/libc.so。 共享库应该安装在/compat/linux/lib而不是Linux ld.so报告的其他路径。 - 通常,您需要寻找Linux程序依赖的共享库。然后, - 您需要在系统上做一个高效的Linux共享库设置,以便能够运行最新的Linux程序。 - + 通常,您需要寻找Linux程序依赖的共享库。 此后, + 你的系统上就会有一组 Linux 共享库, + 这组共享库足以用来运行新安装的 Linux 二进制程序。 如何安装额外的共享库 共享库 如果您安装了linux_base port,但是您的 您的应用程序仍会报告丢失共享库的信息?您如何知道Linux程序需要哪个共享库? 基本上,有两种可能性(接下来的指令需要root权限): 如果您有可以访问的Linux系统, 看看应用程序需要什么共享库, 把它们拷贝到您的FreeBSD系统。看下面的例子: 我们假设您通过FTP得到Linux程序Doom, 并把它放在您能访问的Linux系统上。然后您可以通过ldd linuxdoom来检查需要哪些共享库, 就像这样: &prompt.user; ldd linuxdoom libXt.so.3 (DLL Jump 3.1) => /usr/X11/lib/libXt.so.3.1.0 libX11.so.3 (DLL Jump 3.1) => /usr/X11/lib/libX11.so.3.1.0 libc.so.4 (DLL Jump 4.5pl26) => /lib/libc.so.4.6.29 符号链接 您需要得到上面输出的右列的所有文件,并把他们拷贝到/compat/linux, 第一列的名字用符号连接指向它们。这样您的FreeBSD系统上就有了这些文件: /compat/linux/usr/X11/lib/libXt.so.3.1.0 /compat/linux/usr/X11/lib/libXt.so.3 -> libXt.so.3.1.0 /compat/linux/usr/X11/lib/libX11.so.3.1.0 /compat/linux/usr/X11/lib/libX11.so.3 -> libX11.so.3.1.0 /compat/linux/lib/libc.so.4.6.29 /compat/linux/lib/libc.so.4 -> libc.so.4.6.29
如果您已经有了一个与ldd 输出的第一列的主修订号相匹配的Linux共享库, 您将不需要把右列命名的文件拷贝到您的系统,您已经完成了工作。 如果有一个新的版本,那无论如何都要拷贝一个共享库。 您可以删掉旧的,您只要做一个符号连接到新的版本。 所以,如果有这些库在您的系统上: /compat/linux/lib/libc.so.4.6.27 /compat/linux/lib/libc.so.4 -> libc.so.4.6.27 如果您根据ldd输出的发现需要一个更新版本的库: libc.so.4 (DLL Jump 4.5pl26) -> libc.so.4.6.29 如果结尾的数字只有一到两个版本过期,那也不要担心拷贝/lib/libc.so.4.6.29, 因为程序在稍微旧一些的版本上也能很好地工作。 然而,如果喜欢的话,您可以替换libc.so,变成这样: /compat/linux/lib/libc.so.4.6.29 /compat/linux/lib/libc.so.4 -> libc.so.4.6.29
符号链接机制仅仅是Linux程序需要的。 FreeBSD的运行时连接器会自己寻找匹配的主修订号,您不需要为此担心。
安装Linux ELF程序 Linux ELF程序 ELF格式的程序需要一步额外的步骤标记。如果您尝试运行没有标记的ELF程序, 您会得到像下面这样的错误信息: &prompt.user; ./my-linux-elf-binary ELF binary type not known Abort 为了帮助FreeBSD内核分辨FreeBSD ELF程序和Linux程序,要使用&man.brandelf.1;工具: &prompt.user; brandelf -t Linux my-linux-elf-binary GNU工具 GNU工具现在会自动把适当的标记信息放到ELF程序中,您以后遇到这个问题的机会越来越少。 配置主机名解析器 如果DNS不能正常工作或是您得到下列信息: resolv+: "bind" is an invalid keyword resolv+: "hosts" is an invalid keyword 您就需要配置/compat/linux/etc/host.conf文件,此文件包含: order hosts, bind multi on order这一行指出/etc/hosts先被搜索再接着搜索DNS。 如果/compat/linux/etc/host.conf没有被安装,Linux程序会读取FreeBSD的 /etc/host.conf然后提示不兼容的FreeBSD语法。 如果您没有使用/etc/resolv.conf 文件设置DNS,应该删除bind
Murray Stokely Updated for Mathematica 4.X by Bojan Bistrovic Merged with work by 安装&mathematica; applications Mathematica 这节描述在FreeBSD系统上安装Linux版的&mathematica; 4.X Linux版&mathematica;在FreeBSD下运行的很好,但是 由Wolfram打包的二进制程序需要标记才能让FreeBSD知道需要使用Linux ABI来执行它们。 Linux版的&mathematica;&mathematica; for Students 可以从直接定购。 标记Linux程序 Linux程序可以在Wolfram发布的CDROM的&mathematica; Unix目录中找到。 您必须将这个目录树拷贝到本地硬盘上,以便您能在运行安装程序之前用&man.brandelf.1; 来标记Linux程序: &prompt.root; mount /cdrom &prompt.root; cp -rp /cdrom/Unix/ /localdir/ &prompt.root; brandelf -t Linux /localdir/Files/SystemFiles/Kernel/Binaries/Linux/* &prompt.root; brandelf -t Linux /localdir/Files/SystemFiles/FrontEnd/Binaries/Linux/* &prompt.root; brandelf -t Linux /localdir/Files/SystemFiles/Installation/Binaries/Linux/* &prompt.root; brandelf -t Linux /localdir/Files/SystemFiles/Graphics/Binaries/Linux/* &prompt.root; brandelf -t Linux /localdir/Files/SystemFiles/Converters/Binaries/Linux/* &prompt.root; brandelf -t Linux /localdir/Files/SystemFiles/LicenseManager/Binaries/Linux/mathlm &prompt.root; cd /localdir/Installers/Linux/ &prompt.root; ./MathInstaller 另外,您也可以简单地用下面的命令将默认的ELF标记成Linux: &prompt.root; sysctl kern.fallback_elf_brand=3 这将让FreeBSD知道没有标记的ELF程序使用Linux ABI,所以您将可以直接从CDROM来运行安装程序。 获得您的&mathematica; 密码 在您运行&mathematica;之前,您必须从Wolfram获得对应您的机器ID的密码。 以太网 MAC地址 一旦您安装了Linux运行时库,并把&mathematica;解包开了, 您可以在安装目录通过运行mathinfo来获得您的机器ID。 这个机器ID是以您的第一块以太网卡的MAC地址为基础的。 &prompt.root; cd /localdir/Files/SystemFiles/Installation/Binaries/Linux &prompt.root; mathinfo disco.example.com 7115-70839-20412 当您用email,电话或者传真向Wolfram注册时,给他们您的机器ID,就会返回一个包含一组数字的密码。 当您第一次运行&mathematica;时就需要得到的密码。 通过网络来运行&mathematica; &mathematica; 使用一些特殊的字体来显示字符, 与现在使用的标准字体不一样(integrals, sums, Greek letters,等等)。 X协议要求将这些字体安装在 本地。 这意味着您需要从&mathematica;的CDROM里面拷贝这些字体并安装到本地。 这些字体一般在CDROM的/cdrom/Unix/Files/SystemFiles/Fonts里面, 或本地硬盘的/usr/local/mathematica/SystemFiles/Fonts。 实际的字体在Type1X子目录。有很多种方法来使用它们。 第一种方法是把字体拷贝到一个已存在的目录/usr/X11R6/lib/X11/fonts。 这需要编辑fonts.dir文件。添加字体名字进去,并改变第一行的字体数目。 另外,您也需要在拷贝字体的目录下执行&man.mkfontdir.1;。 第二种方法是拷贝目录到/usr/X11R6/lib/X11/fonts &prompt.root; cd /usr/X11R6/lib/X11/fonts &prompt.root; mkdir X &prompt.root; mkdir MathType1 &prompt.root; cd /cdrom/Unix/Files/SystemFiles/Fonts &prompt.root; cp X/* /usr/X11R6/lib/X11/fonts/X &prompt.root; cp Type1/* /usr/X11R6/lib/X11/fonts/MathType1 &prompt.root; cd /usr/X11R6/lib/X11/fonts/X &prompt.root; mkfontdir &prompt.root; cd ../MathType1 &prompt.root; mkfontdir 现在,添加新的字体目录到您的字体目录: &prompt.root; xset fp+ /usr/X11R6/lib/X11/fonts/X &prompt.root; xset fp+ /usr/X11R6/lib/X11/fonts/MathType1 &prompt.root; xset fp rehash - 如果您正在使用&xfree86;服务器,您可以把它们添加到您的 - XF86Config文件来自动加载。 + 如果您正使用 &xorg; 服务器, 则可以通过修改 + xorg.conf 文件来自动加载它们。 + + 对于 &xfree86; 服务器, + 配置文件的名字是 XF86Config fonts 如果您没有一个叫/usr/X11R6/lib/X11/fonts/Type1的目录, 您可以把MathType1改成Type1 Aaron Kaplan Contributed by Robert Getschmann Thanks to 安装&maple; 应用程序 Maple &maple;是一个类似于&mathematica;的商业数学软件。 您可以从买到这个软件并注册得到一个使用许可。 要在FreeBSD上安装这个软件,请按照下面的步骤: 从软件的发行包执行INSTALL shell脚本。当进入安装程序的提示符时, 选择RedHat 选项。典型的安装目录是/usr/local/maple 如果您不这样做,可以从Maple Waterloo Software () 为&maple;订购一个许可。 然后拷贝到/usr/local/maple/license/license.dat 通过运行&maple;中的INSTALL_LIC安装shell脚本来 安装FLEXlm许可管理器。 指定许可服务器为您的机器名。 像下面这样Patch您的/usr/local/maple/bin/maple.system.type 文件: ----- snip ------------------ *** maple.system.type.orig Sun Jul 8 16:35:33 2001 --- maple.system.type Sun Jul 8 16:35:51 2001 *************** *** 72,77 **** --- 72,78 ---- # the IBM RS/6000 AIX case MAPLE_BIN="bin.IBM_RISC_UNIX" ;; + "FreeBSD"|\ "Linux") # the Linux/x86 case # We have two Linux implementations, one for Red Hat and ----- snip end of patch ----- 请注意"FreeBSD"|\后面没有空格。 这个补丁指示&maple;FreeBSD识别为一种Linux系统。 bin/maple shell脚本调用bin/maple.system.type 脚本执行uname -a来查找操作系统名,根据操作系统名,就知道该使用哪个程序。 启动许可服务器。 下面的脚本,安装成/usr/local/etc/rc.d/lmgrd.sh, 是很方便的启动lmgrd的方法: ----- snip ------------ #! /bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin PATH=${PATH}:/usr/local/maple/bin:/usr/local/maple/FLEXlm/UNIX/LINUX export PATH LICENSE_FILE=/usr/local/maple/license/license.dat LOG=/var/log/lmgrd.log case "$1" in start) lmgrd -c ${LICENSE_FILE} 2>> ${LOG} 1>&2 echo -n " lmgrd" ;; stop) lmgrd -c ${LICENSE_FILE} -x lmdown 2>> ${LOG} 1>&2 ;; *) echo "Usage: `basename $0` {start|stop}" 1>&2 exit 64 ;; esac exit 0 ----- snip ------------ 开始测试&maple; &prompt.user; cd /usr/local/maple/bin &prompt.user; ./xmaple 您应该成功启动起来了。记得写信告诉Maplesoft您想要一个本地FreeBSD版本! 一些缺陷 FLEXlm许可管理器可能是一个使用比较困难的工具。 关于它的额外的文档可以在找到。 lmgrd对许可文件非常挑剔,有一点问题就会core dump。 正确的许可文件看起来像下面这样: # ======================================================= # 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 序列号被'X'代替了。 chillig是主机名。 只要不修改FEATURE行,编辑后一般都能工作。 Dan Pelleg Contributed by 安装&matlab; 应用程序 MATLAB 这一节描述在一个 &os; 上安装Linux版本的&matlab; version 6.5。 它工作的很好,除了&java.virtual.machine;例外(参考 )。 Linux版本的&matlab;可以从MathWorks订购。请确定您也得到了许可文件或安装说明。 等您成功后,让他们知道您想要一个本地&os;版本。 安装&matlab; 请按照下面的步骤安装&matlab; root身份插入安装CD并挂载上。 推荐使用安装脚本,为了启动安装脚本,键入: &prompt.root; /compat/linux/bin/sh /cdrom/install 安装程序是图形的。如果您得到不能打开显示的错误,可以键入 setenv HOME ~USERUSER是您&man.su.1;成的用户。 当问&matlab;的根目录时,键入: /compat/linux/usr/local/matlab 为了下面的安装过程更方便,在shell提示符下键入 set MATLAB=/compat/linux/usr/local/matlab 根据获得&matlab;许可时的指示来编辑许可文件。 您可以用您喜欢的编辑器提前准备这个文件,并在安装程序要您编辑它之前拷贝到 $MATLAB/license.dat 完成安装过程 到这里,您的&matlab;安装已经完成了。 接下来的步骤是让它和您的&os; 系统胶合在一起。 许可管理器的启动 为许可管理器建立符号链接的脚本: &prompt.root; ln -s $MATLAB/etc/lmboot /usr/local/etc/lmboot_TMW &prompt.root; ln -s $MATLAB/etc/lmdown /usr/local/etc/lmdown_TMW 建立启动文件/usr/local/etc/rc.d/flexlm.sh。 下面的例子是一个$MATLAB/etc/rc.lm.glnx86的修改版本。 变化的是文件的位置,和模拟Linux下许可管理器的启动。 #!/bin/sh case "$1" in start) if [ -f /usr/local/etc/lmboot_TMW ]; then /compat/linux/bin/sh /usr/local/etc/lmboot_TMW -u username && echo 'MATLAB_lmgrd' fi ;; stop) if [ -f /usr/local/etc/lmdown_TMW ]; then /compat/linux/bin/sh /usr/local/etc/lmdown_TMW > /dev/null 2>&1 fi ;; *) echo "Usage: $0 {start|stop}" exit 1 ;; esac exit 0 必须使脚本文件可执行: &prompt.root; chmod +x /usr/local/etc/rc.d/flexlm.sh 您也必须替换username为机器上的一个用户(不要是root)。 用命令启动许可管理器: &prompt.root; /usr/local/etc/rc.d/flexlm.sh start 链接&java;运行时环境 改变&java;运行时环境(JRE),链接到一个可以工作的版本: &prompt.root; cd $MATLAB/sys/java/jre/glnx86/ &prompt.root; unlink jre; ln -s ./jre1.1.8 ./jre 创建&matlab;启动脚本 把下面的启动脚本放到/usr/local/bin/matlab #!/bin/sh /compat/linux/bin/sh /compat/linux/usr/local/matlab/bin/matlab "$@" 然后输入命令chmod +x /usr/local/bin/matlab 依赖于您的emulators/linux_base版本, 您在运行这个脚本时可能会出错,为了避免错误,编辑/compat/linux/usr/local/matlab/bin/matlab, 把这行: if [ `expr "$lscmd" : '.*->.*'` -ne 0 ]; then (在13.0.1版本是在第410行)改成: if test -L $newbase; then Creating a &matlab; Shutdown Script The following is needed to solve a problem with &matlab; not exiting correctly. Create a file $MATLAB/toolbox/local/finish.m, and in it put the single line: ! $MATLAB/bin/finish.sh The $MATLAB is literal. In the same directory, you will find the files finishsav.m and finishdlg.m, which let you save your workspace before quitting. If you use either of them, insert the line above immediately after the save command. Create a file $MATLAB/bin/finish.sh, which will contain the following: #!/usr/compat/linux/bin/sh (sleep 5; killall -1 matlab_helper) & exit 0 Make the file executable: &prompt.root; chmod +x $MATLAB/bin/finish.sh 使用&matlab; 现在您已经可以键入 matlab 并开始使用它了。 Marcel Moolenaar Contributed by 安装&oracle; 应用程序 Oracle 前言 这节描述在FreeBSD上安装Linux版的&oracle; 8.0.5&oracle; 8.0.5.1 Enterprise Edition 安装Linux环境 - 确信您已经从ports collection安装了emulators/linux_base - 和devel/linux_devtools。如果运行这些ports有困难, - 您可能不得不使用packages或老版本的ports collection。 + 确信您已经从 Ports Collection 安装了 emulators/linux_base 和 + devel/linux_devtools。 如果在使用这些 port + 时遇到困难, 您可能就不得不从 package, 或使用较早版本的 Ports Collection + 来安装。 - 如果您想运行智能代理,您还需要安Red Hat Tcl package: - tcl-8.0.3-20.i386.rpm。安装这些包的命令是使用官方安装程序 - RPM(ports里面archivers/rpm): + 如果要运行智能代理, 您还需要安装 Red Hat Tcl 软件包: + tcl-8.0.3-20.i386.rpm。 + 用于安装官方的 RPM + (archivers/rpm) 软件包的命令是: &prompt.root; rpm -i --ignoreos --root /compat/linux --dbpath /var/lib/rpm package 的安装通常不会出错。 创建&oracle;环境 安装&oracle;之前,您需要设置正确的环境。 这节只描述了在FreeBSD下安装Linux版本&oracle;需要特别注意的地方。 不像在&oracle;安装指南中所描述的那样。 调整内核 调整内核 正如&oracle;安装指南描述的那样,您需要设置共享内存的最大值。 不要在FreeBSD下使用SHMMAXSHMMAX 只是用来计算SHMMAXPGSPGSIZE的。 因此要使用SHMMAXPGS。所有其他要使用的选项可以参考指南,例如: options SHMMAXPGS=10000 options SHMMNI=100 options SHMSEG=10 options SEMMNS=200 options SEMMNI=70 options SEMMSL=61 设置这些选项来适应 &oracle;的使用。 当然,确信您的内核配置文件中有下面这些选项: options SYSVSHM #SysV shared memory options SYSVSEM #SysV semaphores options SYSVMSG #SysV interprocess communication &oracle;帐号 创建一个oracle帐号,正如您创建其他帐号一样。 oracle 帐号特殊的地方是您需要给它一个Linux shell。 添加/compat/linux/bin/bash/etc/shells, 然后设置oracle帐号的shell为/compat/linux/bin/bash 环境 除了普通的&oracle;变量外, 比如ORACLE_HOMEORACLE_SID,您还必须设置下面的环境变量: - + 变量 LD_LIBRARY_PATH $ORACLE_HOME/lib CLASSPATH $ORACLE_HOME/jdbc/lib/classes111.zip PATH /compat/linux/bin /compat/linux/sbin /compat/linux/usr/bin /compat/linux/usr/sbin /bin /sbin /usr/bin /usr/sbin /usr/local/bin $ORACLE_HOME/bin 建议在.profile里面设置所有的环境变量。一个完整的例子是: ORACLE_BASE=/oracle; export ORACLE_BASE ORACLE_HOME=/oracle; export ORACLE_HOME LD_LIBRARY_PATH=$ORACLE_HOME/lib export LD_LIBRARY_PATH ORACLE_SID=ORCL; export ORACLE_SID ORACLE_TERM=386x; export ORACLE_TERM CLASSPATH=$ORACLE_HOME/jdbc/lib/classes111.zip export CLASSPATH PATH=/compat/linux/bin:/compat/linux/sbin:/compat/linux/usr/bin PATH=$PATH:/compat/linux/usr/sbin:/bin:/sbin:/usr/bin:/usr/sbin PATH=$PATH:/usr/local/bin:$ORACLE_HOME/bin export PATH 安装&oracle; - 由于linux模拟器的一个小错误,在启动安装程序之前,您必须在/var/tmp下 - 创建.oracle目录。您可以把它设为所有人可写,或者由oracle用户拥有。 - 您必须没有问题的安装&oracle;,如果有问题,请检查一下&oracle; - 发行包,或先配置它。安装完&oracle;后,执行下面两步的修补工作。 - + 由于 Linux 模拟器的一处小小的差异, 您必须在 /var/tmp + 中创建一个名为 .oracle 的目录才能够启动安装程序。 + 需要把它设置为属于 oracle 用户。 接下来, + 您就可以毫无问题地安装 &oracle; 了。 + 如果您遇到问题, 请首先检查 &oracle; + 软件包和/或配置文件!安装完 &oracle; + 之后, 使用下面两节中所说的补丁。 - 一个经常出现的问题是TCP协议的适配器没有安装好。结果您不能启动任何TCP监听。下面的工作将帮助您解决这个问题: - + 一个比较常见的问题是 TCP 协议适配器安装不正确。 + 其结果是将无法进行任何的 TCP 侦听。 下面的操作将帮助解决此问题: &prompt.root; cd $ORACLE_HOME/network/lib &prompt.root; make -f ins_network.mk ntcontab.o &prompt.root; cd $ORACLE_HOME/lib &prompt.root; ar r libnetwork.a ntcontab.o &prompt.root; cd $ORACLE_HOME/network/lib &prompt.root; make -f ins_network.mk install 不要忘记了再运行一下root.sh 修补root.sh 从CD安装&oracle;时,一些工作需要在root下执行, 这些工作都被记录在一个叫root.sh的脚本里面。这个脚本被写在orainst目录。 为了使用root.sh来正确定位chown或在Linux本地shell下执行脚本, 应该对它进行修补。 *** 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 当您不从CD安装&oracle;时, 您可以从源代码来修补root.sh。 它叫做rthd.sh,定位在源代码树的orainst目录。 修补genclntsh genclntsh脚本用来创建一个简单的共享客户端库。在建立demos时被使用。 完成补丁后就注释掉了下面的PATH变量: *** bin/genclntsh.orig Wed Sep 30 07:37:19 1998 --- bin/genclntsh Tue Dec 22 15:36:49 1998 *************** *** 32,38 **** # # Explicit path to ensure that we're using the correct commands #PATH=/usr/bin:/usr/ccs/bin export PATH ! PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin export PATH # # each product MUST provide a $PRODUCT/admin/shrept.lst --- 32,38 ---- # # Explicit path to ensure that we're using the correct commands #PATH=/usr/bin:/usr/ccs/bin export PATH ! #PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin export PATH # # each product MUST provide a $PRODUCT/admin/shrept.lst 运行&oracle; 如果您已经按上面的指示去操作,您应该可以像在Linux下运行&oracle;了。 Holger Kipp Contributed by Valentino Vaschetto Original version converted to SGML by 安装&sap.r3; 应用程序 SAP R/3 在FreeBSD上安装的&sap;系统不会被&sap; 支持团队— 所支持——他们只支持某些特定的平台。 前言 这篇文章描述了在FreeBSD系统上安装一个带有&oracle; Database for Linux的&sap.r3; System,包括 FreeBSD的安装和&oracle;的安装。 下面将描述两个不同的配置: 在FreeBSD 4.3-STABLE上安装带有&oracle; 8.0.5&sap.r3; 4.6B (IDES) 在FreeBSD 4.5-STABLE上安装带有&oracle; 8.1.7&sap.r3; 4.6C 虽然这篇文章深入地描述了许多重要的安装步骤,但它不能取代&oracle;&sap.r3;的安装指南。 请参考&sap.r3; Linux edition自带的文档和 &oracle;的特殊问题。 软件 下面的CD-ROMs被用作&sap;的安装: &sap.r3; 4.6B, &oracle; 8.0.5 - + 名称 号码 描述 KERNEL 51009113 SAP Kernel Oracle / Installation / AIX, Linux, Solaris RDBMS 51007558 Oracle / RDBMS 8.0.5.X / Linux EXPORT1 51010208 IDES / DB-Export / Disc 1 of 6 EXPORT2 51010209 IDES / DB-Export / Disc 2 of 6 EXPORT3 51010210 IDES / DB-Export / Disc 3 of 6 EXPORT4 51010211 IDES / DB-Export / Disc 4 of 6 EXPORT5 51010212 IDES / DB-Export / Disc 5 of 6 EXPORT6 51010213 IDES / DB-Export / Disc 6 of 6 此外,我们使用&oracle; 8 Server (Linux版本的8.0.5预览版,Linux内核是2.0.33)和 FreeBSD 4.3-STABLE。 &sap.r3; 4.6C SR2, &oracle; 8.1.7 - + 名称 号码 描述 KERNEL 51014004 SAP Kernel Oracle / SAP Kernel Version 4.6D / DEC, Linux RDBMS 51012930 Oracle 8.1.7/ RDBMS / Linux EXPORT1 51013953 Release 4.6C SR2 / Export / Disc 1 of 4 EXPORT1 51013953 Release 4.6C SR2 / Export / Disc 2 of 4 EXPORT1 51013953 Release 4.6C SR2 / Export / Disc 3 of 4 EXPORT1 51013953 Release 4.6C SR2 / Export / Disc 4 of 4 LANG1 51013954 Release 4.6C SR2 / Language / DE, EN, FR / Disc 1 of 3 依赖于您要安装的语言,可能需要额外的语言CDs。 这儿我们只使用DE和EN,所以只需要第一张语言CD。 还要注意的是所有EXPORT CDs的号码是一样的。 其他3张语言CDs的号码也一样(这和4.6B IDES release CD的号码不同)。 &sap; Notes 安装使用&sap.r3;之前,请先看看下面的注释: &sap.r3; 4.6B, &oracle; 8.0.5 - + 号码 标题 0171356 SAP Software on Linux: Essential Comments 0201147 INST: 4.6C R/3 Inst. on UNIX - Oracle 0373203 Update / Migration Oracle 8.0.5 --> 8.0.6/8.1.6 LINUX 0072984 Release of Digital UNIX 4.0B for Oracle 0130581 R3SETUP step DIPGNTAB terminates 0144978 Your system has not been installed correctly 0162266 Questions and tips for R3SETUP on Windows NT / W2K &sap.r3; 4.6C, &oracle; 8.1.7 - + 号码 标题 0015023 Initializing table TCPDB (RSXP0004) (EBCDIC) 0045619 R/3 with several languages or typefaces 0171356 SAP Software on Linux: Essential Comments 0195603 RedHat 6.1 Enterprise version: Known problems 0212876 The new archiving tool SAPCAR 0300900 Linux: Released DELL Hardware 0377187 RedHat 6.2: important remarks 0387074 INST: R/3 4.6C SR2 Installation on UNIX 0387077 INST: R/3 4.6C SR2 Inst. on UNIX - Oracle 0387078 SAP Software on UNIX: OS Dependencies 4.6C SR2 硬件要求 下面的设备配置对&sap.r3; System来说已经足够了。如果 用于生产用途,就需要更强的配置: - + 组件 4.6B 4.6C 处理器 2 x 800MHz &pentium; III 2 x 800MHz &pentium; III 内存 1GB ECC 2GB ECC Hard Disk Space 50-60GB (IDES) 50-60GB (IDES) 用于生产使用,就需要使用带大缓存的&xeon;处理器,和高速大容量磁盘(SCSI, RAID hardware controller),以及USV 和ECC-RAM内存。 配置IDES System前需要大量的硬盘空间,因为安装时将创建27 GB的数据库文件。 这些空间用于系统和数据的初始化也是足够的。 &sap.r3; 4.6B, &oracle; 8.0.5 对于这个安装,我的硬件配置如下:带2个800 MHz &pentium; III处理器的主板, &adaptec; 29160 Ultra160 SCSI适配器(能够访问40/80 GB DLT磁带机和CDROM), &mylex; &acceleraid; (2个通道, firmware 6.00-1-00 with 32 MB RAM)。 &mylex; RAID controller被挂上2个17 GB(mirrored)硬盘和4个36 GB硬盘(RAID level 5)。 &sap.r3; 4.6C, &oracle; 8.1.7 对于这个安装,配置是&dell; &poweredge; 2500,带2个1000 MHz &pentium; III处理器的 主板(256 kB Cache), 2 GB PC133 ECC SDRAM, PERC/3 DC PCI RAID Controller with 128 MB,和一个EIDE DVD-ROM驱动器。RAID controller被挂上2个18 GB硬盘(mirrored) 和4个36 GB硬盘(RAID level 5)。 安装FreeBSD - 首先需要安装FreeBSD。有几种方法来装(FreeBSD 4.3通过FTP安装, FreeBSD 4.5直接从RELEASE CD安装)。 - 更多信息参考首先需要安装 FreeBSD。 + 有很多方法来完成这个工作 (FreeBSD 4.3 通过 FTP + 安装, 而 FreeBSD 4.5 则是从 RELEASE CD + 安装的)。 要了解进一步的情况请参考 磁盘划分 为了简单,对&sap.r3; 46B&sap.r3; 46C SR2的安装使用相同的磁盘划分。只是设备名换了,因为是安装在不同的硬件上 (/dev/da/dev/amr, 所以如果是使用AMI &megaraid;,我们能看到 /dev/amr0s1a 代替了 /dev/da0s1a): - + 文件系统 尺寸(1k-blocks) 尺寸(GB) 挂载点 /dev/da0s1a 1.016.303 1 / /dev/da0s1b 6 swap /dev/da0s1e 2.032.623 2 /var /dev/da0s1f 8.205.339 8 /usr /dev/da1s1e 45.734.361 45 /compat/linux/oracle /dev/da1s1f 2.032.623 2 /compat/linux/sapmnt /dev/da1s1g 2.032.623 2 /compat/linux/usr/sap 预先用&mylex; 或PERC/3 RAID 软件配置和初始化这两个逻辑驱动器。 改变BIOS的引导顺序来启动软件。 请注意这里的磁盘划分和&sap;推荐的是不一样的,&sap;建议把 &oracle;子目录(及其他子目录)分离开来, 我决定只简单的创建几个子目录。 <command>make world</command>和建立新内核 下载最新的-STABLE源代码,配置完内核配置文件后重建系统和新内核。 这儿当然要包括 &sap.r3;&oracle;需要的内核参数。 安装Linux环境 安装Linux基本系统 首先linux_base port需要安装(以root身份): &prompt.root; cd /usr/ports/emulators/linux_base &prompt.root; make install distclean 安装Linux开发环境 如果您想根据在FreeBSD上安装 &oracle; &prompt.root; cd /usr/ports/devel/linux_devtools &prompt.root; make install distclean Linux开发环境只是安装给&sap.r3; 46B IDES的,如果&oracle; DB不是在这个 FreeBSD系统上重新链接,它就不需要了。 安装必需的RPMs RPMs 为了启动R3SETUP程序, PAM支持是必需的。 第一次安装&sap;到FreeBSD 4.3-STABLE时我们先安装了 PAM的所有依赖包再安装PAM包,它可以工作。对于&sap.r3; 4.6C SR2我们 直接安装PAM RPM也可以工作,所以依赖包不是必需的: &prompt.root; rpm -i --ignoreos --nodeps --root /compat/linux --dbpath /var/lib/rpm \ pam-0.68-7.i386.rpm 要让&oracle; 8.0.5运行智能代理, 我们需要安装RedHat Tcl包tcl-8.0.5-30.i386.rpm (否则重新链接&oracle;不能工作)。 重新链接&oracle;时还有其他要注意的地方, 但那是&oracle; Linux的问题,不是FreeBSD的问题。 其它一些注意的地方 - 添加linprocfs/etc/fstab是个好主意, - 更多信息看&man.linprocfs.5;手册页。 - 另一个要设置的参数是kern.fallback_elf_brand=3, - 在/etc/sysctl.conf里面设置。 + 添加 linprocfs + 到 /etc/fstab 是个好主意。 + 要了解进一步的细节, 请参考 &man.linprocfs.5; 联机手册。 + 另一个是设置 kern.fallback_elf_brand=3, + 这可以通过 /etc/sysctl.conf 文件来完成。 创建&sap.r3;环境 创建必需的文件系统和挂载点 对简单的安装,创建下面的文件系统就够了: - + mount point size in GB /compat/linux/oracle 45 GB /compat/linux/sapmnt 2 GB /compat/linux/usr/sap 2 GB 创建一些链接也是必要的,否则&sap;安装程序在检查创建的链接时 会报错: &prompt.root; ln -s /compat/linux/oracle /oracle &prompt.root; ln -s /compat/linux/sapmnt /sapmnt &prompt.root; ln -s /compat/linux/usr/sap /usr/sap 安装时可能出现的错误(对于PRD系统和&sap.r3; 4.6C SR2 的安装): 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' 创建用户和目录 &sap.r3;需要两个用户和3个组。 用户名依赖于包含3个字母的&sap;系统ID(SID)。一些SIDs 被&sap;保留(例如SAPNIX)。 完成的列表参考&sap;文档。对于IDES的安装,我们使用IDS, 对于4.6C SR2安装,使用PRD。 这样我们定义了下面的几个组: - + 组ID 组名 描述 100 dba Data Base Administrator 101 sapsys &sap; System 102 oper Data Base Operator 对于默认的&oracle;安装,只有dba组被使用。 和oper组一样,我们也可以使用dba组 (更详细的信息参考&oracle;&sap;文档)。 我们也需要下面的用户 - + 用户ID 用户名 普通名称 附加组 描述 1000 idsadm/prdadm sidadm sapsys oper &sap; Administrator 1002 oraids/oraprd orasid dba oper &oracle; Administrator 使用&man.adduser.8;添加用户要求&sap; Administrator有下面的记录 (请注意shell和home目录): Name: sidadm Password: ****** Fullname: SAP Administrator SID Uid: 1000 Gid: 101 (sapsys) Class: Groups: sapsys dba HOME: /home/sidadm Shell: bash (/compat/linux/bin/bash) 对于&oracle; Administrator: Name: orasid Password: ****** Fullname: Oracle Administrator SID Uid: 1002 Gid: 100 (dba) Class: Groups: dba HOME: /oracle/sid Shell: bash (/compat/linux/bin/bash) 在您使用组dbaoper的情况下您也应该包括 oper 创建目录 这些目录通常建立在不同的文件系统上。这完全依赖于您的需求。 我们选择把它们建立在同一个目录: 首先我们将设置一些目录的所有者和权限(以root身份设置): &prompt.root; chmod 775 /oracle &prompt.root; chmod 777 /sapmnt &prompt.root; chown root:dba /oracle &prompt.root; chown sidadm:sapsys /compat/linux/usr/sap &prompt.root; chmod 775 /compat/linux/usr/sap 然后我们以orasid身份创建目录, 这些目录将成为/oracle/SID的子目录: &prompt.root; su - orasid &prompt.root; cd /oracle/SID &prompt.root; mkdir mirrlogA mirrlogB origlogA origlogB &prompt.root; mkdir sapdata1 sapdata2 sapdata3 sapdata4 sapdata5 sapdata6 &prompt.root; mkdir saparch sapreorg &prompt.root; exit 对于&oracle; 8.1.7的安装,需要一些额外的目录: &prompt.root; su - orasid &prompt.root; cd /oracle &prompt.root; mkdir 805_32 &prompt.root; mkdir client stage &prompt.root; mkdir client/80x_32 &prompt.root; mkdir stage/817_32 &prompt.root; cd /oracle/SID &prompt.root; mkdir 817_32 目录client/80x_32必须是这个名字,不要用其他数字或字母来替换x 第三步我们要以sidadm身份创建目录: &prompt.root; su - sidadm &prompt.root; cd /usr/sap &prompt.root; mkdir SID &prompt.root; mkdir trans &prompt.root; exit <filename>/etc/services</filename>中的条目 &sap.r3;/etc/services里面需要一些条目, 这些不会在安装过程中被正确设置,请添加下面的条目: sapdp00 3200/tcp # SAP Dispatcher. 3200 + Instance-Number sapgw00 3300/tcp # SAP Gateway. 3300 + Instance-Number sapsp00 3400/tcp # 3400 + Instance-Number sapms00 3500/tcp # 3500 + Instance-Number sapmsSID 3600/tcp # SAP Message Server. 3600 + Instance-Number sapgw00s 4800/tcp # SAP Secure Gateway 4800 + Instance-Number 必要的本地化 本地化 &sap;至少要求两个本地化设置,它不是RedHat的默认安装。 &sap;提供从他们的FTP服务器下载必需的RPMs(只有您是OSS的客户才能访问)。 看注解0171356查找您需要的RPMs列表。 也可以只创建适当的链接(例如从de_DEen_US), 但是我们不推荐在生产系统上这样做(尽管它让IDES system工作的没有一点问题)。 下面的本地化设置是必需的: de_DE.ISO-8859-1 en_US.ISO-8859-1 像这样创建链接 &prompt.root; cd /compat/linux/usr/share/locale &prompt.root; ln -s de_DE de_DE.ISO-8859-1 &prompt.root; ln -s en_US en_US.ISO-8859-1 如果他们不出现,在安装时可能会有问题。如果忽略这些问题(通过设置CENTRDB.R3S文件 里面的STATUSOK),不费一番周折, 您就别想登陆进&sap;系统。 内核调整 内核调整 &sap.r3; 需要许多资源。我因此添加了下面的参数在我的内核配置文件中: # 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 这篇文档中指定的最小值是来自&sap;。没有针对Linux的描述,看看HP-UX的相关介绍了解更多信息 。 安装4.6C SR2需要更多的内存,共享内存比&sap;&oracle;需要的还多,所以尽量为共享内存选一个大值。 FreeBSD 4.5在&i386;上缺省应该设置MAXDSIZDFLDSIZ到1 GB。否则,奇怪的错误像 ORA-27102: out of memoryLinux Error: 12: Cannot allocate memory 会出现。 安装&sap.r3; 准备&sap; CDROMs 在安装过程中,有许多CDROM要被挂上和卸下。建议您有多个CDROM驱动器, 您可以把它们都挂上。我决定拷贝CDROM的内容到相应的目录: /oracle/SID/sapreorg/cd-name 对于4.6B/IDES的安装,cd-nameKERNELRDBMSEXPORT1EXPORT2EXPORT3, EXPORT4, EXPORT5EXPORT6中的一个,对于4.6C SR2的安装,是 KERNELRDBMSDISK1DISK2DISK3DISK4LANG中的一个。 所有挂载上的CDs里面的文件名都应该是大写, 否则要用选项来挂载。所以使用下面的命令: &prompt.root; mount_cd9660 -g /dev/cd0a /mnt &prompt.root; cp -R /mnt/* /oracle/SID/sapreorg/cd-name &prompt.root; umount /mnt 运行安装脚本 首先您需要准备一个install目录: &prompt.root; cd /oracle/SID/sapreorg &prompt.root; mkdir install &prompt.root; cd install 然后运行安装脚本,他会拷贝所有相关的文件到install目录: &prompt.root; /oracle/SID/sapreorg/KERNEL/UNIX/INSTTOOL.SH 由于这是一个完全定制化的&sap.r3;演示系统的IDES安装(4.6B), 我们有6个而不仅仅是3个EXPORT CDs。 基于这点,安装模板CENTRDB.R3S是用来安装一个标准的中央环境 (&r3;和数据库),而不是IDES中央环境, 所以从EXPORT1目录拷贝相应的CENTRDB.R3S, 否则R3SETUP只要求3个EXPORT CDs。 新的&sap; 4.6C SR2发行版带有4张EXPORT CDs。 控制安装步骤的参数文件是CENTRAL.R3S。 和早期发行版不同,它没有分开的中央环境的安装模板。 安装完后,使用hostname命令得到&sap;需要的主机名, 不需要完整的域名。 所以为orasidsidadm 直接设置主机名,或设置别名alias hostname='hostname -s'。 可以在.profile.login里面为这两个用户设置。 启动<command>R3SETUP</command> 4.6B 确定LD_LIBRARY_PATH设置正确: &prompt.root; export LD_LIBRARY_PATH=/oracle/IDS/lib:/sapmnt/IDS/exe:/oracle/805_32/lib 从安装目录以root身份启动R3SETUP &prompt.root; cd /oracle/IDS/sapreorg/install &prompt.root; ./R3SETUP -f CENTRDB.R3S 这个脚本会问一些问题(括号里面是缺省值,后面是实际输入): - + 问题 缺省值 输入 Enter SAP System ID [C11] IDSEnter Enter SAP Instance Number [00] Enter Enter SAPMOUNT Directory [/sapmnt] Enter Enter name of SAP central host [troubadix.domain.de] Enter Enter name of SAP db host [troubadix] Enter Select character set [1] (WE8DEC) Enter Enter Oracle server version (1) Oracle 8.0.5, (2) Oracle 8.0.6, (3) Oracle 8.1.5, (4) Oracle 8.1.6 1Enter Extract Oracle Client archive [1] (Yes, extract) Enter Enter path to KERNEL CD [/sapcd] /oracle/IDS/sapreorg/KERNEL Enter path to RDBMS CD [/sapcd] /oracle/IDS/sapreorg/RDBMS Enter path to EXPORT1 CD [/sapcd] /oracle/IDS/sapreorg/EXPORT1 Directory to copy EXPORT1 CD [/oracle/IDS/sapreorg/CD4_DIR] Enter Enter path to EXPORT2 CD [/sapcd] /oracle/IDS/sapreorg/EXPORT2 Directory to copy EXPORT2 CD [/oracle/IDS/sapreorg/CD5_DIR] Enter Enter path to EXPORT3 CD [/sapcd] /oracle/IDS/sapreorg/EXPORT3 Directory to copy EXPORT3 CD [/oracle/IDS/sapreorg/CD6_DIR] Enter Enter path to EXPORT4 CD [/sapcd] /oracle/IDS/sapreorg/EXPORT4 Directory to copy EXPORT4 CD [/oracle/IDS/sapreorg/CD7_DIR] Enter Enter path to EXPORT5 CD [/sapcd] /oracle/IDS/sapreorg/EXPORT5 Directory to copy EXPORT5 CD [/oracle/IDS/sapreorg/CD8_DIR] Enter Enter path to EXPORT6 CD [/sapcd] /oracle/IDS/sapreorg/EXPORT6 Directory to copy EXPORT6 CD [/oracle/IDS/sapreorg/CD9_DIR] Enter Enter amount of RAM for SAP + DB 850Enter (in Megabytes) Service Entry Message Server [3600] Enter Enter Group-ID of sapsys [101] Enter Enter Group-ID of oper [102] Enter Enter Group-ID of dba [100] Enter Enter User-ID of sidadm [1000] Enter Enter User-ID of orasid [1002] Enter Number of parallel procs [2] Enter 如果没有把CD拷贝到不同的位置,那么&sap;安装程序就不能 找到需要的CD(通过CD上的LABEL.ASC来辨别), 它会要求您挂上CD,或键入加载路径。 CENTRDB.R3S不可能是自由出错的, 它再次请求EXPORT4 CD,但是正确的值是6_LOCATI ON,然后7_LOCATION 等,所以您可以键入正确的值。 处理下面提到的问题,一样东西都要直接通过&oracle;数据库软件安装的地方。 Start <command>R3SETUP</command> 4.6C SR2 确定LD_LIBRARY_PATH设置正确。 这和带&oracle; 8.0.5的4.6B的安装是不同的: &prompt.root; export LD_LIBRARY_PATH=/sapmnt/PRD/exe:/oracle/PRD/817_32/lib root身份从安装目录启动R3SETUP &prompt.root; cd /oracle/PRD/sapreorg/install &prompt.root; ./R3SETUP -f CENTRAL.R3S 这个脚本会问一些问题(括号里面是缺省值,后面是实际输入): - + 问题 缺省值 输入 Enter SAP System ID [C11] PRDEnter Enter SAP Instance Number [00] Enter Enter SAPMOUNT Directory [/sapmnt] Enter Enter name of SAP central host [majestix] Enter Enter Database System ID [PRD] PRDEnter Enter name of SAP db host [majestix] Enter Select character set [1] (WE8DEC) Enter Enter Oracle server version (2) Oracle 8.1.7 2Enter Extract Oracle Client archive [1] (Yes, extract) Enter Enter path to KERNEL CD [/sapcd] /oracle/PRD/sapreorg/KERNEL Enter amount of RAM for SAP + DB 2044 1800Enter (in Megabytes) Service Entry Message Server [3600] Enter Enter Group-ID of sapsys [100] Enter Enter Group-ID of oper [101] Enter Enter Group-ID of dba [102] Enter Enter User-ID of oraprd [1002] Enter Enter User-ID of prdadm [1000] Enter LDAP support 3Enter (no support) Installation step completed [1] (continue) Enter Choose installation service [1] (DB inst,file) Enter 到目前为止, 安装阶段只在创建用户时给出了一个错误OSUSERDBSID_IND_ORA(创建 用户orasid)和 OSUSERSIDADM_IND_ORA(创建用户sidadm)。 处理下面提到的问题,一样东西都要直接通过&oracle;数据库软件安装的地方。 安装&oracle; 8.0.5 请看相应的&sap;注释和 &oracle;的关于Linux的Readme 以及&oracle; DB可能出现的问题。不是所有的问题都和不兼容库有关。 关于&oracle;更多的安装信息,请参考安装&oracle;。 用<command>orainst</command>安装&oracle; 8.0.5 如果&oracle; 8.0.5要被使用,一些其他的库需要被成功地重新链接, 因为&oracle; 8.0.5是与一个老的glibc连接的(Redhat 6.0), 但RedHat 6.1已经使用了一个新的glibc。所以您必须安装下面额外的软件包来保证链接正常: compat-libs-5.2-2.i386.rpm compat-glibc-5.2-2.0.7.2.i386.rpm compat-egcs-5.2-1.0.3a.1.i386.rpm compat-egcs-c++-5.2-1.0.3a.1.i386.rpm compat-binutils-5.2-2.9.1.0.23.1.i386.rpm 更多的信息,看相应的&sap;注释和&oracle;的Readme。 如果这不是选项,您可以使用最初的程序,或使用与最初的Redhat系统重链接的程序。 要编译智能代理,必须安装RedHat Tcl包。如果您不能得到 tcl-8.0.3-20.i386.rpm,一个更新的 tcl-8.0.5-30.i386.rpm也可以用。 除了重新链接,安装是直截了当的: &prompt.root; su - oraids &prompt.root; export TERM=xterm &prompt.root; export ORACLE_TERM=xterm &prompt.root; export ORACLE_HOME=/oracle/IDS -&prompt.root; cd /ORACLE_HOME/orainst_sap +&prompt.root; cd $ORACLE_HOME/orainst_sap &prompt.root; ./orainst Enter来确认所有的屏幕直到安装完成,除了您必须取消 &oracle; On-Line Text Viewer选项,因为当前Linux下不可用。 &oracle;会要求用i386-glibc20-linux-gcc重新链接来 代替gccegcs或者i386-redhat-linux-gcc 由于时间紧迫,我决定使用&oracle; 8.0.5 PreProduction版本。 安装&oracle; 8.0.5 Pre-production Release for Linux (Kernel 2.0.33) 个安装很容易。挂上CD,启动安装程序。它就会要求&oracle;home目录的定位, 然后拷贝那儿所有的程序。我不删除先前安装的RDBMS。 然后,&oracle;数据库就可以毫无问题地运行了。 安装&oracle; 8.1.7 Linux压缩包 拷贝oracle81732.tgz到您要安装的目录, 然后解压到/oracle/SID/817_32/ 继续&sap.r3;安装 首先检查用户idsamd (sidadm)和 oraids(orasid)的环境变量。 他们现在都有使用主机名的.profile.login.cshrc文件。在这个例子中,系统的主机名是没有限制的名称, 您必须在所有三个文件中改变hostname为hostname -s。 加载数据库 然后,可以重新启动或继续R3SETUPR3SETUP就使用R3load 创建表空间加载数据(对46B IDES,从EXPORT1到EXPORT6,对46C从DISK1到DISK4)。 数据加载完后(可能需要一些时间),需要创建一些口令。对于测试安装,可以使用缺省口令: - + 问题 输入 Enter Password for sapr3 sapEnter Confirum Password for sapr3 sapEnter Enter Password for sys change_on_installEnter Confirm Password for sys change_on_installEnter Enter Password for system managerEnter Confirm Password for system managerEnter 到目前为止,我们只在安装4.6B的过程中dipgntab出现了几个问题。 监听 像下面这样用orasid用户启动 &oracle; &prompt.user; umask 0; lsnrctl start 另外您可能得到ORA-12546错误,因为sockets没有正确的权限。 看&sap;注释072984。 更新MNLS表 如果您打算倒入non-Latin-1 languages到&sap;系统, 您必须更新表的多语言支持。这在&sap; OSS注释15023和45619有描述。否则, 您可以在安装&sap;的时候忽略这个问题。 如果您不需要MNLS,还是需要检查表TCPDB和初始化工作是否做了。 更多信息参考&sap;注释0015023和0045619。 快速安装步骤 需要&sap.r3;许可密钥 您不得不要&sap.r3;许可密钥。这是必需的, 因为临时许可只能用4个星期。 首先得到硬件的密匙。以用idsadm登入, 然后调用saplicense &prompt.root; /sapmnt/IDS/exe/saplicense -get 不带参数调用saplicense会给出一系列选项。 要安装上面的许可密钥,可以这样: &prompt.root; /sapmnt/IDS/exe/saplicense -install 您要输入下面的值: SAP SYSTEM ID = SID, 3 chars CUSTOMER KEY = hardware key, 11 chars INSTALLATION NO = installation, 10 digits EXPIRATION DATE = yyyymmdd, usually "99991231" LICENSE KEY = license key, 24 chars 创建用户 在客户机000中创建一个用户(有些工作需用客户机000来完成,但与用户sap*ddic有些不同)。 作为一个用户名,我通常选择wartung (或英语中的service)。 配置文件需要sap_newsap_all。对于额外的安全的默认用户口令应当被改变(这包括用户sap*ddic)。 配置传送系统,配置,操作模式等 在客户端000,用户不同于ddicsap*,做下面的工作: - + 任务 处理 Configure Transport System, e.g. as Stand-Alone Transport Domain Entity STMS Create / Edit Profile for System RZ10 Maintain Operation Modes and Instances RZ04 些和所有其他的快速安装步骤在&sap;安装指南里面有描述。 编辑<filename>init<replaceable>sid</replaceable>.sap</filename>(<filename>initIDS.sap</filename>) 文件/oracle/IDS/dbs/initIDS.sap 包含了&sap;备份配置。 这儿是使用的磁带机的大小,压缩的类型。要使用sapdba / brbackup来得到这些。 我们可以改变下面的值: compress = hardware archive_function = copy_delete_save cpio_flags = "-ov --format=newc --block-size=128 --quiet" cpio_in_flags = "-iuv --block-size=128 --quiet" tape_size = 38000M tape_address = /dev/nsa0 tape_address_rew = /dev/sa0 解释 compress:我使用的磁带机是HP DLT1,它支持硬件压缩。 archive_function: 这个定义了保存&oracle;文件日志的默认行为:新的日志文件被保存到磁带机上, 保存的日志文件会被再次保存然后再删除。如果您需要恢复数据库, 而其中一个磁带机已经损坏了,这可以防止出现麻烦。 cpio_flags:缺省使用来设置块大小为 5120 Bytes。对于DLT-Tapes,HP建议至少32 K,所以我们使用 设置64 K。 是必需的,因为我的inode数目超过了65535。 最后一个选项是必需的,否则brbackup会在用 cpio来输出的时候报错。 cpio_in_flags: 这个标志从磁带机加载回数据。格式是自动验证的。 tape_size: 通常给出了磁带机的存储容量。出于安全原因,这个值要比实际的值要小一些。 tape_address:被cpio使用的非rewindable的设备。 tape_address_rew:被cpio使用的非rewindable的设备。 安装后的配置 下面的&sap;参数应该在安装以后调整(例子是IDES 46B, 1 GB内存): - + 名称 ztta/roll_extension 250000000 abap/heap_area_dia 300000000 abap/heap_area_nondia 400000000 em/initial_size_MB 256 em/blocksize_kB 1024 ipc/shm_psize_40 70000000 &sap;注释0013026: - + 名称 ztta/dynpro_area 2500000 &sap;注释0157246: - + Name Value rdisp/ROLL_MAXFS 16000 rdisp/PG_MAXFS 30000 根据上面的参数,在使用1 GB内存的系统上,可以像下面这样找到内存消耗: Mem: 547M Active, 305M Inact, 109M Wired, 40M Cache, 112M Buf, 3492K Free 安装过程出现的问题 修复一个问题后重起<command>R3SETUP</command> 如果出现问题R3SETUP会停止。如果您找到相关的日志文件并修复了问题。 您需要再次重起R3SETUP,对于R3SETUP报的最后一个错误可以使用 REPEAT选项。 要重起R3SETUP,只要使用相应的R3S文件重起: &prompt.root; ./R3SETUP -f CENTRDB.R3S for 4.6B, or with &prompt.root; ./R3SETUP -f CENTRAL.R3S 对4.6C,不管有没有错误都使用CENTRAL.R3SDATABASE.R3S 在某些阶段,R3SETUP假设database和&sap; 进程都启动了。但是如果发生错误使得database没有启动,您就必须手动启动database和&sap;。 修复错误后,还需要再次重起R3SETUP 也不要忘记再次重起&oracle;监听。 OSUSERSIDADM_IND_ORA during <command>R3SETUP</command> 如果在这阶段R3SETUP报错,编辑R3SETUP使用的模板文件 (CENTRDB.R3S (4.6B)或者CENTRAL.R3S或者DATABASER3S (4.6C))。定位到[OSUSERSIDADM_IND_ORA]或者搜索STATUS=ERROR条目 然后像下面这样编辑它: HOME=/home/sidadm (was empty) STATUS=OK (had status ERROR) 然后重起R3SETUP OSUSERDBSID_IND_ORA during <command>R3SETUP</command> R3SETUP也可能在这个阶段报错。修正方法和上面的OSUSERSIDADM_IND_ORA一样。 编辑下面的值: STATUS=OK 重起R3SETUP &oracle;安装找不到<errorname>oraview.vrf文件</errorname> 开始安装之前没有取消&oracle; On-Line Text Viewer 既然这个选项当前没有用于Linux,这在安装时是需要标记的,在&oracle; 安装中取消它,然后重新安装。 <errorname>TEXTENV_INVALID</errorname> during <command>R3SETUP</command>, RFC or SAPgui Start 如果这个错误还出现,正确的本地化可能已经丢了。 &sap;注释0171356列出了必须的RPMs (比如saplocales-1.0-3, saposcheck-1.0-1 for RedHat 6.1)。 在这个例子中,您忽略了所有相关的错误, STATUSERROROK然后重起 R3SETUP&sap;系统不会被正确地配置, 您就不能用一个SAPgui连接到系统。 设法使用一个旧的Linux sapgui连接会得到下面的信息: Sat May 5 14:23:14 2001 *** ERROR => no valid userarea given [trgmsgo. 0401] Sat May 5 14:23:22 2001 *** ERROR => ERROR NR 24 occured [trgmsgi. 0410] *** ERROR => Error when generating text environment. [trgmsgi. 0435] *** ERROR => function failed [trgmsgi. 0447] *** ERROR => no socket operation allowed [trxio.c 3363] Speicherzugriffsfehler 这个问题归咎于&sap.r3;不能正确地本地化,也不能自己正确地配置。 要能够连接到&sap;, 需要在 DEFAULT.PFL(看注释0043288) 文件中添加下面的记录: abap/set_etct_env_at_new_mode = 0 install/collate/active = 0 rscp/TCP0B = TCP0B 重起&sap;系统。现在,您可以连接到系统, 即使您指定的国家语言不能正常工作。设置完国家后,这些记录会从DEFAULT.PFL文件 删除。然后重新启动&sap;系统。 <errorcode>ORA-00001</errorcode> 这个错误只会在FreeBSD 4.5上安装&oracle; 8.1.7 的时候出现。因为&oracle;database不能自己正确初始化。 在系统上保留semaphores和shared memory。 然后再次启动数据库会出现ORA-00001错误。 ipcs -a找到再用ipcrm去掉。 <errorcode>ORA-00445</errorcode> (后台进程PMON没有启动) 这个错误发生在&oracle; 8.1.7上。 如果没有用prdadm用户启动startsap脚本 (例如startsap_majestix_00)会报这个错误。 一种可能的解决方法是用oraprd用户使用svrmgrl &prompt.user; svrmgrl SVRMGR> connect internal; SVRMGR> startup; SVRMGR> exit <errorcode>ORA-12546</errorcode>(用正确的权限启动监听) oraids用户启动&oracle;监听: &prompt.root; umask 0; lsnrctl start 如果您得到ORA-12546错误,没有权限连接到sockets。 请看&sap;注释0072984。 <errorcode>ORA-27102</errorcode> (Out of Memory) 这个错误发生在使用MAXDSIZDFLDSIZ大于 1 GB(1024x1024x1024)。 我们一般得到错误Linux Error 12: Cannot allocate memory [DIPGNTAB_IND_IND] during <command>R3SETUP</command> 通常,看&sap;注释0130581 (R3SETUP步骤里面的 DIPGNTAB终止)。在IDES-specific安装的时候,因为某些原因 安装过程没有使用正确的&sap;系统名IDS,而是用空字符 ""代替。 这会导致一些访问目录的小问题,因为路径是动态使用 SID来创建的(这里是IDS)。所以用下面的方法代替: /usr/sap/IDS/SYS/... /usr/sap/IDS/DVMGS00 下面的路径被使用 /usr/sap//SYS/... /usr/sap/D00 为了继续安装,我们创建了一个附加的目录: &prompt.root; pwd /compat/linux/usr/sap &prompt.root; ls -l total 4 drwxr-xr-x 3 idsadm sapsys 512 May 5 11:20 D00 drwxr-x--x 5 idsadm sapsys 512 May 5 11:35 IDS lrwxr-xr-x 1 root sapsys 7 May 5 11:35 SYS -> IDS/SYS drwxrwxr-x 2 idsadm sapsys 512 May 5 13:00 tmp drwxrwxr-x 11 idsadm sapsys 512 May 4 14:20 trans 我们也发现在&sap;注释(0029227和0008401)里面描述了这个行为。 我们没有在&sap; 4.6C安装里面遭遇这些问题。 [RFCRSWBOINI_IND_IND] during <command>R3SETUP</command> 安装&sap; 4.6C时,这个错误是前面发生过的一个错误的 结果。所以,您不得不查看相应的日志文件并修复错误。 如果查看完日志文件后这个错误确实存在(看&sap;注释),您可以设置STATUSERROROKCENTRDB.R3S文件里面) 然后重起R3SETUP。安装完后,您必须从事务SE38执行 RSWBOINS。关于RFCRSWBOINIRFCRADDBDIF的更多信息 查看&sap;注释0162266。 [RFCRADDBDIF_IND_IND] during <command>R3SETUP</command> 通过查看日志文件确定这个错误,它不是由于前面的问题导致的。 如果您确定已经应用了&sap;注释0162266,就只要设置 STATUSERROROKCENTRDB.R3S文件里面)。然后重起R3SETUP。 安装完后,您必须从事务SE38执行RADDBDIF <errorcode>sigaction sig31: File size limit exceeded</errorcode> 这个错误在启动&sap;进程disp+work时出现。 如果用startsap脚本启动&sap;, 就会启动子进程,并由它启动后面所有的其他&sap;进程。 所以脚本本身不会注意到有错误发生。 为了检查&sap;进程是否正确启动,可以用 ps ax | grep SID查看进程的状态。 您会得到所有&oracle;&sap;进程列表。 如果看起来有些进程没有启动,或者您不能正确连接到&sap;系统。 查看相应的日志文件,可以在 /usr/sap/SID/DVEBMGSnr/work/ 下找到, 一般查看 dev_msdev_disp 文件。 如果&oracle;&sap;的共享内存总量超过了 内核配置文件定义的大小就会出现signal 31错误,并且不能解析大的内存地址: # larger value for 46C production systems: options SHMMAXPGS=393216 # smaller value sufficient for 46B: #options SHMMAXPGS=262144 启动<command>saposcol</command>失败 使用saposcol (version 4.6D)会出现一些问题。 &sap;系统使用saposcol收集系统性能数据。 这个程序不是必需的。所以这些问题可以看作是小问题。 老版本(4.6B)可以工作,但是不能收集所有的性能数据(很多调用只返回0,像CPU使用率)。 高级主题 如果您对Linux兼容模式是如何工作的感到好奇,这节正是您所需要的。 下面的绝大部分内容是由 Terry Lamberttlambert@primenet.com (Message ID: <199906020108.SAA07001@usr09.primenet.com>)发表在邮件列表&a.chat;上的内容组成的。 它是如何工作的? 可执行类加载器 FreeBSD有一个可执行类加载器。它主要是嵌入了&man.execve.2;系统调用。 碰巧的是FreeBSD有一个引导器(loader)的列表,而不是一个简单的返回一个 符号 #!的引导器! 从历史上来讲,只有&unix;平台的引导器会检查魔术(magic)数 (通常是文件的前4个或8个字节)是否是二进制的, 如果是,就调用二进制引导程序。 如果它不是二进制类型的&man.execve.2;调用就会返回一个错误,shell就试图用shell命令执行它。 缺省是使用当前设定的shell 随后,进行了一些hack, &man.sh.1;开始检查前两个字符,如果它们是:\n, 那它就调用&man.csh.1;(我们相信是SCO最先做这个hack的)。 FreeBSD现在所做的是用一个普通的#!引导器仔细检查引导器的列表, 然后由解释程序一个接一个地解释,返回给/bin/sh ELF 为了支持Linux ABI,FreeBSD就把魔术数看作为一个二进制ELF程序。( 这样一来,它就使得在FreeBSD, &solaris;,Linux和其他任何操作系统之间只要使用ELF格式就都可以顺利运行)。 Solaris ELF引导器会寻找一个专门的标记, 它是在ELF映像中的一个注释部分,但在SVR4/&solaris;的ELF中没有。 为了执行Linux程序,它们必须被打上Linux类型的标记; 使用&man.brandelf.1;: &prompt.root; brandelf -t Linux file 做完之后,ELF引导器就会看到文件上的Linux的标记。 ELF 标记 当ELF引导器看到Linux的标记, 引导器就会在proc结构中替换一个指示器。 所有的系统调用就会通过这个指示器来索引(在一个传统的 &unix;系统中, 这就是sysent[]结构队列,包含系统调用)。 此外,为了解决由于信号杂乱所造成的陷阱向量的问题,会造成线程的剧增, 需要切断其他(或较小的)由Linux内核模块产生的修正。 Linux系统调用向量包含一个sysent[]记录的列表, 它的地址位于内核模块之中。 当一个系统调用被Linux程序调用时,有缺陷的代码会把系统调用功能的指示器从proc结构中解除, 然后获得Linux,而不是FreeBSD,系统调用入口点。 另外,Linux模式动态地reroots查找;这和启动文件系统的 选项是等效的(即时不是unionfs文件系统)。 首先会试图在/compat/linux/original-path 目录查找文件,如果失败了,就会在/original-path 目录下查找。这使得需要其它程序的程序可以运行(例如,Linux工具链都可以在Linux ABI的支持下工作)。 也就是说Linux程序可以加载和执行FreeBSD程序,如果当前没有相应的Linux程序, 那您可以在/compat/linux目录树中放置一个&man.uname.1;,来确保Linux程序不提示它们不能运行在Linux上。 在FreeBSD内核中有一个Linux内核;由内核提供的能够提供所有服务的各种潜在功能 在FreeBSD系统调用表记录和Linux系统调用表记录之间是一样的: 文件系统操作,虚拟内存操作,信号发送,System V IPC,…等等。 唯一的不同是FreeBSD会得到FreeBSD的胶合功能, 而Linux程序会得到Linux的胶合功能 (大部分老的操作系统只有它们自己的胶合函数, 函数地址在静态全局变量sysent[]结构数据里面, 而不是动态的初始化到进程的proc结构)。 哪一个是FreeBSD自己的ABI呢?这无关紧要。基本上, 唯一的不同是FreeBSD的胶合功能是被静态连接到内核, 而Linux的胶合功能可能是被静态连接到内核, 也可能它们通过一个内核模块来访问。 有一个真正的模拟器吗?没有,它只不过是一个ABI执行机制,不是一个模拟器。 为什么有时它被叫做Linux模拟器? 只是为了更容易地卖出FreeBSD罢了! 实际上,历史上从来没有描述这样一种执行机制的名字,FreeBSD并不是真正地运行Linux程序,如果您不编译进代码, 或加载一个模块。 就需要有一个名字来描述这样一种加载功能--因此就想出了Linux模拟器这样一个名字。