跳轉到內容

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://: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 - 第一個版本,正在等待透過自檢。

華夏公益教科書