跳转到内容

WebObjects/Web 应用程序/部署/Linux

来自维基教科书,开放的书籍,开放的世界

(修订版 1.5; 2003-03-02,查看完整修订版列表) 此文档的最新版本可以在http://www.tetlabors.de/wo/setup_webobjects_on_linux.html找到。

[编辑 | 编辑源代码]

您可以对本操作指南做任何您想做的事情,但请自行承担风险。我不会承担任何责任。如果您不是这方面的专家,我建议先为测试目的设置一个新系统,然后将您新获得的知识用于实际系统。

本操作指南介绍了如何在 Linux 上设置 WebObjects 部署,大约需要两个小时 - 如果你知道自己在做什么。否则,可能需要更长的时间。:-) 它现在还涵盖了 WebObjects 5.2 的安装(有关更改,请参见本操作指南末尾的修订版列表)。

本操作指南基于 Timo Buhmann 的一篇关于如何在 Linux 下设置 WebObjects 的德文描述。由我进行翻译和重新格式化为 HTML 文档,并参考了 OmniGroup 的 WebObjects 邮件列表和 Jonathan Wolf Rentzsch 的一篇关于 Linux 和 WO 的文章。

我并非 Linux 方面的专家 - 在编写本教程之前,我仅仅使用过它两天左右。幸运的是,这里有足够多的人可以回答我在遇到问题时提出的各种问题。如果您在本文中看到奇怪或笨拙的地方,请发邮件给我并附上更正或改进内容。也许 Apple 会在下一个版本的 WebObjects 中集成 Linux 支持,这样您就不再需要本操作指南。在此之前:让我们开始动手吧!

开始之前

[编辑 | 编辑源代码]

为了最大限度地减少过程中的延迟,您可能需要在开始之前准备所有需要的东西。在本操作指南中,使用了以下软件

我不确定只安装 Linux 版 JRE 是否足够。对于 Windows 部署,它肯定不起作用,因此我也决定选择 Linux 版的 SDK(它稍微大一些)。

有效的部署许可证密钥;对于 WebObjects 5.1,您可以使用 WebObjects 5.0 或 5.1 安装中的许可证密钥。重要提示:对于 WebObjects 5.2,您需要专门为此版本制作的密钥!旧版本的许可证密钥一开始可能有效,但稍后您将无法运行任何应用程序。:-(

如果您不想自己应用步骤 6 中讨论的 makefile 更改,可以从此处下载这些更改。在压缩包内,有针对 WebObjects 5.1 和 5.2 的不同文件夹。

在您的 Linux 安装中,以下软件包应该安装(每行的开头字母列出了 SuSE 7.1 安装的相应软件包系列,对于其他 Linux 发行版可能有所不同)

  • a: compat(运行 Java 所需的库)
  • ap: mc(Midnight Commander,并非必需  :)
  • d: gcc(编译器)
  • d: gdbm-devel(编译 Apache 源代码所需的库)
  • d: linclude(gcc 需要)
  • d: make(make 命令)
  • n: ftp(用于从其他系统获取文件的 ftp 客户端,比 sftp 快得多)
  • n: openssh(ssh 服务器和客户端工具,用于稍后部署应用程序)
  • n: smbclnt(用于挂载来自 Windows 计算机的共享)

以下是不需要的,请在安装之前取消选择(或者如果您已经拥有运行系统,则卸载这些软件包)

  • n: apache(您将自己制作)。
  • d: java(JDK 1.1.8)
  • d: javarunt(Java Runtime 1.1.8)

一个不错的软件包搜索网站是http://rpmfind.net。让安装程序自动解析软件包依赖关系,您就可以开始了...

完成 Linux 安装后,创建以下文件夹;我们稍后将使用它们来存放安装包,并在完成后删除它们

 mkdir -p /opt/install/apache
 
 mkdir -p /opt/install/java
 
 mkdir -p /opt/install/woupdate

安装 Apache

[编辑 | 编辑源代码]

由于 Apache 2.x 版本无法与 WebObjects 适配器一起使用,因此您必须使用 Apache 1.3.x 版本。

重要提示 大约在 2002 年 6 月 20 日,Apache 中的一个安全漏洞被发现,它允许攻击者在服务器上执行代码,甚至可能获取 root 权限。由于所有版本(包括 1.3.24 及更早版本)都受此漏洞影响,因此您应该至少使用 1.3.26 版本,它修复了此安全漏洞。

将下载的 apache 源代码(apache_1.3.27.tar.gz)放入 /opt/install/apache。然后解压

 cd /opt/install/apache
 
 tar xfvz apache_1.3.27.tar.gz
 
 cd apache_1.3.27

配置、构建和安装 Apache。必须安装 gdbm-devel 软件包才能正常运行。

 ./configure --prefix=/usr/local/apache --enable-module=so --enable-module=rewrite --enable-shared=max --enable-rule=SHARED_CORE
 make clean; make; make install

使启动 Apache 更容易

 ln -s /usr/local/apache/bin/apachectl /usr/bin/apachectl

尝试是否可以正常运行

 apachectl start        

现在在浏览器中打开 http://<your-host>。如果您看到了 Apache 默认页面,则一切正常。

重要提示 在默认安装中(如本操作指南中所述),系统应被视为不安全的,在未采取任何保护措施的情况下不要连接到互联网!由于我对 Linux/Apache 安全知之甚少,我强烈建议您参考一些安全操作指南,了解如何提高系统的安全性。

安装 Java2 SDK 1.4

[编辑 | 编辑源代码]

将下载的 SDK(j2sdk-1_4_0_01-linux-i586-rpm.bin)放到 /opt/install/java

 cd /opt/install/java
 
 chmod a+x j2sdk-1_4_1_02-linux-i586-rpm.bin
 
 ./j2sdk-1_4_1_02-linux-i586-rpm.bin

阅读许可协议,并在最后输入 yes。然后脚本将解压缩 RPM 包,因此您现在可以安装它

 rpm -i -vv j2sdk-1_4_1_02-fcs-linux-i386.rpm
 
 ln -s /usr/java/j2sdk1.4.1_02/bin/java /usr/bin/java

要查看是否可以正常运行,请尝试以下操作

 java -version

输出应类似于以下内容

 java version "1.4.1_02"
 Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.1_02-b06)
 Java HotSpot(TM) Client VM (build 1.4.1_02-b06, mixed mode)

安装 WebObjects 5.1 部署版 (Solaris 版)

[编辑 | 编辑源代码]

挂载 WebObjects 5.1 安装光盘

 mount -t iso9660 -o nojoliet -o norock -o map=o /dev/cdrom /cdrom
 
 cd /cdrom
 
 ls

重要: 由于安装脚本区分大小写,CD 上的文件和文件夹必须包含正常大小写字母。如果您看到 /cdrom 中的所有内容都显示为小写或大写,但没有混合,则说明安装失败。:-(

为了解决这个问题,您可以将 CD 的内容复制到 Windows 计算机上的共享文件夹,然后从那里读取。假设 Windows 计算机的地址为 192.168.1.1,共享文件夹名称为 wocd,则您可以这样访问它

 mount -t smbfs //192.168.1.1/wocd /cdrom -o username=smb,password=smb

在这个例子中,您需要在 Windows 计算机上设置一个用户名为 smb、密码为 smb 的用户。如果您在 Windows 上启用了来宾帐户(不推荐),则可以省略挂载命令的用户名/密码。

启动安装脚本并按照说明进行操作。

 cd /cdrom/Deployment/SOLARIS
 
 ./install.sh

对于批处理设置,您可以使用以下方法

 cd /cdrom/Deployment/SOLARIS
 
 ./install.sh -license B-111-AAA-111-AAA-111-AAA-111-AAA-111 -adaptorsOnly NO -minimalInstall NO -cgibin /usr/local/apache/cgi-bin -docroot /usr/local/apache/htdocs -woroot /opt/Apple

首先,请确保在开始安装或许可证密钥检查之前,将目录切换到 /cdrom/Deployment/SOLARIS。其次,您需要提供真实的许可证密钥,而不是 B-111-AAA-111-AAA-111-AAA-111-AAA-111。:-(

按照屏幕上的说明进行操作,等待安装完成。

如果出现错误,请尝试以下操作

 ln -s /usr/bin/uncompress /usr/bin/compress

现在,如果 /etc/profile.local 不存在,请创建它。

 touch /etc/profile.local

要在每次启动时导出 NEXT_ROOT,请将以下行添加到 /etc/profile.local 中

 NEXT_ROOT=/opt/Apple
 export NEXT_ROOT

现在,您需要注销并重新登录,以便 NEXT_ROOT 生效。您也可以手动为当前会话导出 NEXT_ROOT

 export NEXT_ROOT=/opt/Apple

要查看是否有效,请执行以下操作

 echo $NEXT_ROOT

如果回显的是 /opt/Apple,则说明一切正常。:-(

安装 WebObjects 5.1 更新 3

[编辑 | 编辑源代码]

对于 WebObjects 5.2,请跳过此步骤,因为目前没有更新可用。

在开始更新之前,需要从 Web 服务器卸载 mod_WebObjects,并停止所有与 WebObjects 相关的进程。由于我们到目前为止还没有使用过 WebObjects,所以这对于本操作指南来说无关紧要,但为了安全起见,请执行以下操作:apachectl stop

 cd $NEXT_ROOT/Library/WebObjects/Executables
 
 ./WOServices stop

如果您正在运行独立 (EOF/WO) 应用程序,请也将其终止。此外,补丁脚本需要 gnutar。如果没有,您可以创建一个链接

 ln -s /bin/tar /bin/gnutar

要安装更新,您需要下载两个文件:更新本身 (WO51SolarisUpdate3.TAR.Z) 和补丁脚本 (patcher.sh)。将这两个文件放入 /opt/install/woupdate,然后启动更新

 cd /opt/install/woupdate
 cdsfdsfs
 chmod a+x patcher.sh
 
 ./patcher.sh -install WO51SolarisUpdate3.TAR.Z
 
 cd $NEXT_ROOT/Library/WebObjects/WODocumentRoot
 
 cp -R WebObjects /usr/local/apache/htdocs/WebObjects

编辑 $NEXT_ROOT/Library/Frameworks/JavaWebObjects.framework/Resources/WebServerConfig.plist

 line 2: change /Library/WebServer/Documents to /usr/local/apache/htdocs

现在是激动人心的时刻:编译适配器!

为 Linux 编译 Apache 适配器

[编辑 | 编辑源代码]

由于 makefile 不包含 Linux 支持 - 顺便问一下,有充分的理由吗?- 您需要自己添加支持。幸运的是,适配器源代码随 WebObjects 提供。

我之前找到的所有解决方案都以某种方式破坏了脚本。例如,在 Solaris 上运行脚本需要进一步修改。在这里,我们将进行一个“干净”的解决方案,它为 Linux 添加了支持,而不会破坏其他平台的脚本。

首先,导出 OS 变量,以便脚本知道我们正在使用 Linux

 export OS=LINUX

我们只需要在编译时使用它,不需要将其放入 /etc/profile.local(但如果您愿意,可以这样做)。接下来,使用您选择的编辑器打开文件 $NEXT_ROOT/Developer/Examples/WebObjects/Source/Adaptors/make.config,并在 MacOS X Server 条目(大约第 17 行)之前插入(复制并粘贴)以下几行

 # LINUX 
 ifeq "LINUX" "$(OS)" 
 ADAPTORS = CGI Apache 
 # Default path for apxs 
 APXS = /usr/local/apache/bin/apxs 
 endif 

保存并退出。

接下来,这部分对我来说有点棘手,因为 WebObjects 5.1 和 5.2 有所不同。

<WEBOBJECTS 5.1>

打开 $NEXT_ROOT/Developer/Examples/WebObjects/Source/Adaptors/Apache/Makefile,并在最后一个 endif(大约第 66 行)之后复制并粘贴以下几行

 ifeq "LINUX" "$(OS)"
 
 # If Apache is in a nonstandard location, change this
 APACHEINCLUDEFLAGS = -I/usr/local/apache/include
 
 CFLAGS = -O2 -Wall -I../Adaptor ${LDAPACHESSLFLAG} $(DEBUG_FLAG) -DSINGLE_THREADED_ADAPTOR -D$(OS) -DEAPI -DFORKING_WEBSERVER -DAPACHE ${OPENSSLINCLUDEFLAGS} ${APACHEINCLUDEFLAGS} ${OPENSSLLIBFLAGS} -L/lib 
 APXSFLAGS = -i
 LDFLAGS += -G -L/lib -lc ${OPENSSLLIBFLAGS}
 
 all: adaptor
 
 adaptor: mod_WebObjects.so
 ○${APXS} ${APXSFLAGS} mod_WebObjects.so 
 
 mod_WebObjects.so : mod_WebObjects.o ${COMMON_OBJFILES}
 # ${APXS} ${APXSFLAGS} -c mod_WebObjects.c ${COMMON_OBJFILES}
 # ${APXS} ${APXSFLAGS} mod_WebObjects.o ${COMMON_OBJFILES}
 ○ld ${LDFLAGS} mod_WebObjects.o ${COMMON_OBJFILES} -o mod_WebObjects.so
 
 clean:
 ○rm -f mod_WebObjects.so mod_WebObjects.o *.o
 
 #mod_WebObjects.o: mod_WebObjects.c
 # ${APXS} ${APXSFLAGS} -c mod_WebObjects.c
 
 mod_WebObjects.o: mod_WebObjects.c ${COMMON_OBJFILES}
 ○${CC} -c ${CFLAGS} mod_WebObjects.c ${COMMON_OBJFILES}
 endif

注意:这些奇怪的圆圈(例如,在 ○${APXS} ${APXSFLAGS} mod_WebObjects.so 的开头)不是打字错误,而是 TAB(制表符)键。make 进程需要它们才能成功完成,所以不要忘记它们!

</WEBOBJECTS 5.1>

<WEBOBJECTS 5.2> 打开 $NEXT_ROOT/Developer/Examples/WebObjects/Source/Adaptors/Apache/Makefile,将其剪切到大约第 29 行,即 ifeq "SOLARIS" "${OS}" ... endif 块之后,删除所有后续行直至文件末尾。然后将以下几行追加到文件末尾,使其看起来像这样

 ifeq "LINUX" "${OS}"
 ENABLE_SSL_SUPPORT =
 OPENSSL_INCL_FLAGS =
 OPENSSL_LIB_FLAGS =
 APACHE_INCL_FLAGS = -I/usr/local/apache/include
 CFLAGS +=-DEAPI ${APACHE_INCL_FLAGS}
 LDFLAGS += -G -L/lib -lc ${OPENSSL_LIB_FLAGS}
 endif
 
 CFLAGS += ${OPENSSL_INCL_FLAGS}

APXSFLAGS = -i


 all: mod_WebObjects.so
 
 mod_WebObjects.so : mod_WebObjects.o ${COMMON_OBJFILES}
 ○ld ${LDFLAGS} mod_WebObjects.o ${COMMON_OBJFILES} -o mod_WebObjects.so
 ○${APXS} ${APXSFLAGS} mod_WebObjects.so
 
 mod_WebObjects.o : mod_WebObjects.c ${COMMON_OBJFILES}
 ○${CC} -c ${CFLAGS} mod_WebObjects.c ${COMMON_OBJFILES}
 
 clean:
 ○rm -f mod_WebObjects.so mod_WebObjects.o *.o
 
 include ../Adaptor/make.postamble

</WEBOBJECTS 5.2>

从这里开始,两个版本的操作都相同。

需要更改的最后一个文件是 $NEXT_ROOT/Developer/Examples/WebObjects/Source/Adaptors/Adaptor/appcfg.c。搜索以下三行,从大约第 52 行开始

 #ifndef MAXPATHLEN
 #define MAXPATHLEN 255
 #endif

将这三行剪切并粘贴到以下行(大约第 72 行)_之后_,如下所示

 #include <arpa/inet.h> /* inet_addr() */
 #include <sys/param.h>
 #endif
 
 #ifndef MAXPATHLEN
 #define MAXPATHLEN 255
 #endif

应用完这些更改后,执行以下操作

 cd $NEXT_ROOT/Developer/Examples/WebObjects/Source/Adaptors
 
 make clean; make

在编译过程中,mod_WebObjects.so 会自动放置到 /usr/local/apache/libexec 中,无需手动执行此操作。如果您在其中找到了 mod_WebObjects.so,则说明编译成功。CGI 适配器也已构建,可以在 $NEXT_ROOT/Developer/Examples/WebObjects/Source/Adaptors/CGI/WebObjects 中找到,如果您想玩玩的话。

恭喜您,您快完成了!

为 WebObjects 配置 Apache

[编辑 | 编辑源代码]

将 WebObjects 的配置文件复制到 Apache 的 conf 文件夹

 cd $NEXT_ROOT/Developer/Examples/WebObjects/Source/Adaptors/Apache
 
 cp apache.conf /usr/local/apache/conf/webobjects.conf

编辑 /usr/local/apache/conf/httpd.conf。搜索行“LoadModule rewrite_module ...”,并在其_之前_插入以下几行

 Include /usr/local/apache/conf/webobjects.conf 
 <Location /cgi-bin/./>
 SetHandler WebObjects
 </Location>

搜索行“AddModule mod_rewrite.c”,并将以下行放在该行的_之后_

 AddModule mod_WebObjects.c

搜索行“ServerName ...”,并将您的 DNS 主机名放在其中。如果您没有 DNS 主机名,也可以使用您的 IP 地址。httpd.conf 中关于这一点的解释非常好。

 ServerName yourhost.yourdomain.com

现在编辑 /usr/local/apache/conf/webobjects.conf

 line 4: replace SYSTEM_LIBRARY_DIR/WebObjects/Adaptors/Apache/mod_WebObjects.so with /usr/local/apache/libexec/mod_WebObjects.so
 
 line 5: put a # in front of AddModule mod_WebObjects.c to comment it out
 
 line 9: replace LOCAL_LIBRARY_DIR/WebServer/Documents with /usr/local/apache/htdocs

您可以选择更改以下内容

 line 13: /cgi-bin/WebObjects (can be changed to /myFunkyAlias/WebObjects)
 
 line 28: https://127.0.0.1:1085 10 (can be changed to http://host1:1085,http://host2:1085 10, don't put spaces after the comma sign when adding multiple hosts!)

保存并退出。现在,要查看是否一切正常,请尝试

 apachectl configtest

如果显示“Syntax OK”,则说明一切正常。否则,请尝试查找并更正它报告的错误。

启动 Apache 和 WO 服务

[编辑 | 编辑源代码]

启动 Apache 很简单

 apachectl start

启动 wotaskd

 $NEXT_ROOT/Library/WebObjects/JavaApplications/wotaskd.woa/wotaskd &

如果它在一段时间后仍在前台运行,您可以按 CTRL+C 返回到 shell;然后 wotaskd 将在后台继续运行。

启动 JavaMonitor 并测试安装

[编辑 | 编辑源代码]

在添加应用程序之前,最后一步是启动 JavaMonitor,看看它是否有效

 $NEXT_ROOT/Library/WebObjects/JavaApplications/JavaMonitor.woa/JavaMonitor -WOPort 56789 

启动 JavaMonitor 后,您会看到类似以下内容的行

您的应用程序 URL 是

 http://yourhost.yourdomain.com:56789/ 

在 Web 浏览器中打开此 URL。

还记得您在步骤 1 中创建的那些安装文件夹吗?现在您可以安全地删除它们,除非您想再次安装

 rm -rf /opt/install/apache
 
 rm -rf /opt/install/java
 
 rm -rf /opt/install/woupdate

重要:请确保您正确输入了路径名;rm -rf 不会放过任何东西...

故障排除

[编辑 | 编辑源代码]

问:当我尝试编译适配器源代码时,出现了以下错误,编译停止:In file included from ../Adaptor/appcfg.c:64

 /usr/include/unistd.h:734: conflicting types for `gethostname'
 ../Adaptor/appcfg.c:57: previous declaration of `gethostname'
 make[1]: *** [appcfg.o] Error 1
 make: *** [CGI] Error 2

这是什么意思?

答:您忘记导出 OS 变量。在编译之前执行 export OS=LINUX。

问:当我尝试编译适配器源代码时,出现了以下错误,编译停止

 Makefile:79: *** missing separator. Stop.
 make: *** [Apache] Error 2

答:在错误消息指定的行(本例中为 79 行)开头添加一个 TAB 字符。仅添加几个“空格”字符不起作用。TAB 字符(ASCII 字符编号 9)可以通过以下方式输入

  • 按住键盘上的左 ALT 键
  • 按下数字键盘上的“9”键;“Numlock”必须打开。
  • 释放 ALT 键。

问:在编译过程中,显示了许多警告。我需要担心吗?

答:显示了两种不同的内容

 mod_WebObjects.c:242: warning: `setOption3' defined but not used

您可能可以在 Linux 下编译时注释掉此方法,但我不知道您是否需要在 Solaris 或 OSX 上使用它。我的目标是使源代码在每个平台上都兼容。

 cc: <filename>.o: linker input file unused since linking not done

可能是 Linux 下的链接方式不同,或者根本不需要。如果您知道要调整 makefile 中的哪一行,请将更改发送给我,我会更新本操作指南。

问:当我从命令行运行应用程序(即,不是通过 Monitor)时,无法连接到应用程序,我该怎么办?

答:在启动应用程序时,只需添加 -WODirectConnectEnabled YES 作为参数,然后通过 http://host:port 连接。

- 到目前为止,还没有遇到其他需要解决的问题,期待新的问题出现。:-(

修订历史

[编辑 | 编辑源代码]

1.5:2003-03-02 - 添加了对 WebObjects 5.2 安装的支持 - 更新了 Apache 和 Java SDK 版本号以及超链接

1.4:2002-08-01 - 隐藏了大多数“mailto:”链接,以更难被垃圾邮件发送者利用(应该从一开始就这样做)

1.3: 2002-06-30 - 在故障排除部分添加了两个问题 - 添加了关于 Apache 安全漏洞的警告,并更新了 Apache 1.3.26 的操作指南 - 在步骤 2 的末尾添加了安全警告 - 在故障排除部分添加了“如何在键盘上创建标签”。

1.2: 2002-06-18 - 在 appcfg.c 中添加了更改,以避免编译器警告。

1.1: 2002-06-14 - 添加了一些故障排除内容 - 更新了操作指南的相关部分,以使用 WebObjects 的更新 3 而不是更新 2。

1.0: 2002-06-09 - 第一个(工作)版本。

0.9: 2002-06-08 - 第一个版本,正在等待通过自检。

华夏公益教科书