Apache HTTP Server 版本2.2

在你開始編譯Apache之前有許多重要問題需要注意。開始之前請先看看在Microsoft Windows上使用Apache 。
編譯Apache需要正確安裝以下環(huán)境:
磁盤空間
確保至少有50MB空閑磁盤空間可用。安裝以后Apache使用大約10MB磁盤空間,再加上會快速增長的日志和緩存文件需要的空間。 實際需要的空間大小會在相當大程度上取決于你選擇的配置以及使用的第三方模塊和庫。
Microsoft Visual C++ 5.0 或更高版本
可以使用命令行工具,也可以在Visual Studio集成開發(fā)環(huán)境內編譯Apache。使用命令行工具要求環(huán)境變量中包含 PATH, INCLUDE, LIB 和其他一些變量,這些環(huán)境變量可以用vcvars32批處理文件來設置:
"c:\Program Files\DevStudio\VC\Bin\vcvars32.bat"
Windows Platform SDK
Visual C++ 5.0 編譯需要一套新版的Microsoft Windows Platform SDK來允許Apache的某些特性。 對于命令行編譯,用setenv批處理文件來設置環(huán)境變量:
"c:\Program Files\Platform SDK\setenv.bat"
隨Visual C++ 6.0 及以后版本發(fā)布的Platform SDK文件足以滿足要求,所以新版本的用戶可以略過這個要求。
mod_isapi特性可用。沒有新版SDK的話,在 MSVC++ 5.0 下編譯Apache會出現(xiàn)某些mod_isapi特性將被禁止的警告。在http://msdn.microsoft.com/downloads/sdks/platform/platform.asp可以找到新版的Microsoft Winodws Platform SDK。awk工具(awk, gawk或類似軟件)
為了在編譯系統(tǒng)內安裝Apache ,用awk.exe工具修改了幾個文件。選擇awk是因為它很小,易于下載(與Perl或者WSH/VB相比),而且能夠完成生成文件的任務。Brian Kernighan的http://cm.bell-labs.com/cm/cs/who/bwk/站點有一個編譯好的本地Win32代碼版本,這個文件http://cm.bell-labs.com/cm/cs/who/bwk/awk95.exe你必須將它名字保存為awk.exe而不是awk95.exe 。
awk.exe(對于Developer Studio 7.0 是在the Projects - VC++ Directories 面板)。 把awk.exe的路徑加入到列表中,并按要求加入到系統(tǒng)PATH環(huán)境變量里。gawk.exe而文件awk.exe實際上是gawk.exe的一個符號連接。 而Windows命令行解釋程序不認識符號連接,因此編譯二進制安裝文件會失敗?尚械淖兺ㄞk法是從cygwin安裝目錄刪除文件awk.exe并把gawk.exe改名為awk.exe 。[可選] OpenSSL庫(因為mod_ssl和ab.exe用到ssl支持)
警告:在整個世界范圍使用和發(fā)布高強度密碼體系與專利知識產權都有相當大的限制和嚴格的禁令。OpenSSL包括了在美國及其他國家和地區(qū)受到出口條例、國內法律以及受專利保護的知識產權所限制的高強度密碼體系。對于OpenSSL項目提供的代碼,不管是Apache軟件基金會還是OpenSSL項目都不能提供關于擁有、使用和發(fā)布該代碼的法律建議。向你自己的法律顧問咨詢,你需要為你自己的行為負責。
為了編譯 mod_ssl或abs項目(ab.exe用到SSL支持),OpenSSL必須安裝到srclib目錄下名為openssl的子目錄中,openSSL可以從http://www.openssl.org/source/獲得。要是準備既編譯release版本又編譯debug版本,而且要禁止 0.9.7 版中受專利保護的特性,你應該使用下列編譯命令:
perl Configure VC-WIN32
perl util\mkfiles.pl >MINFO
perl util\mk1mf.pl dll no-asm no-mdc2 no-rc5 no-idea VC-WIN32 >makefile
perl util\mk1mf.pl dll debug no-asm no-mdc2 no-rc5 no-idea VC-WIN32 >makefile.dbg
perl util\mkdef.pl 32 libeay no-asm no-mdc2 no-rc5 no-idea >ms\libeay32.def
perl util\mkdef.pl 32 ssleay no-asm no-mdc2 no-rc5 no-idea >ms\ssleay32.def
nmake
nmake -f makefile.dbg
[可選] zlib源碼 (用于mod_deflate)
Zlib必須安裝到srclib目錄下的zlib子目錄,但是你不需要去編譯那些源碼。編譯系統(tǒng)會直接把壓縮源碼編譯到mod_deflate模塊中去。 Zlib可以從http://www.gzip.org/zlib/獲得 -- mod_deflate已經經過驗證可以使用版本 1.1.4 正確編譯。
首先,將Apache源碼包解壓到合適的目錄。打開一個命令提示符窗口并用cd切換到那個目錄。
主要的Apache make文件命令都包含在文件Makefile.win中。要在Windows NT上編譯Apache ,只需要簡單地使用下列命令之一就可以編譯release或debug版本,分別是:
nmake /f Makefile.win _apacher
nmake /f Makefile.win _apached
兩條命令都可以編譯Apache 。后者會在編譯結果文件中包含調試信息,使發(fā)現(xiàn)bugs和跟蹤問題更容易。
Apache也能夠用VC++的Visual Studio集成開發(fā)環(huán)境編譯。為了簡化過程,提供了一個Visual Studio工作區(qū)文件:Apache.dsw 。
它闡述了完整的Apache二進制發(fā)行版需要的全部.dsp項目列表。
它包含了項目之間的依存關系來保證編譯按合適的順序進行。
打開 Apache.dsw 工作區(qū)文件,選擇
InstallBin (根據需要選擇編譯Release 或者Debug 版本)
為活動項目。InstallBin會引發(fā)編譯相關的項目并調用 Makefile.win
移動編譯后的可執(zhí)行文件和動態(tài)鏈接庫。你可以改變InstallBin項目的設置來定制
INSTDIR= 選項,修改設置中General頁里面的Build Command line條目。INSTDIR的缺省值是
/Apache2目錄。如果你只是想要測試編譯(不安裝),就用
BuildBin項目代替。
.dsp項目文件使用Visual C++ 6.0格式發(fā)行。Visual C++ 5.0 (97)也能識別這種格式。而Visual C++
7.0 (.net)必須把Apache.dsw和.dsp
文件轉換成Apache.sln和.msproj文件,
如果有任何一個.dsp源文件改變了,必須重新轉換相應的.msproj文件!
這很容易,只需要在VC++ 7.0 集成開發(fā)環(huán)境中重新打開
Apache.dsw文件。
Visual C++ 7.0 (.net)的用戶還應該使用Build
菜單下的Configuration Manager對話框來不選中模塊abs ,mod_ssl和mod_deflate ,
對編譯Debug和Release版本都是。
僅當srclib目錄下至少存在openssl或者zlib子目錄二者之一,
才能調用nmake或者明白地使用BinBuild目標直接從集成開發(fā)環(huán)境來編譯這幾個模塊。
導出的那些.mak文件造成很大的爭議,但對于
Visual C++ 5.0 的用戶它們是編譯mod_ssl 、abs(帶SSL支持的ab)和mod_deflate是必需的。
VC++ 7.0 (.net)的用戶也能從中受益,用nmake編譯比用
binenv要快。
從VC++ 5.0 或 6.0 集成開發(fā)環(huán)境編譯所有項目,再使用Project菜單 - Export導出所有make文件。
為了創(chuàng)建全部自動產生的動態(tài)目標你必須首先編譯項目,以便互相之間的依存關系可以被正確解析。運行下面命令修正路徑使之能編譯到任何位置:
perl srclib\apr\build\fixwin32mak.pl
你必須在httpd源碼樹的頂層目錄輸入這個命令。
當前目錄及其子目錄下所有的.mak 和 .dep項目文件都將被改正,并且時間戳被調節(jié)到與.dsp一致。
如果你貢獻修正項目文件的補丁,我們必須以Visual Studio 6.0 格式來確認項目文件。 改動應該簡單而且只帶有最少的編譯和連接標記以便能夠被從VC++ 5.0 到 7.0 的所有環(huán)境識別。
Apache.dsw工作區(qū)文件和makefile.win
nmake腳本都是以下列順序編譯Apache服務器的.dsp項目文件:
srclib\apr\apr.dspsrclib\apr\libapr.dspsrclib\apr-util\uri\gen_uri_delims.dspsrclib\apr-util\xml\expat\lib\xml.dspsrclib\apr-util\aprutil.dspsrclib\apr-util\libaprutil.dspsrclib\pcre\dftables.dspsrclib\pcre\pcre.dspsrclib\pcre\pcreposix.dspserver\gen_test_char.dsplibhttpd.dspApache.dsp此外,modules\子目錄樹包含了大多數模塊的項目文件。
support\子目錄包含了一些附加程序的項目文件,它們運行時不是Apache的一部分,
但是管理員要使用它們來測試Apache和維護密碼與日志文件。
Windows平臺特有的支持項目在support\win32\目錄下。
support\ab.dspsupport\htdigest.dspsupport\htpasswd.dspsupport\logresolve.dspsupport\rotatelogs.dspsupport\win32\ApacheMonitor.dspsupport\win32\wintty.dsp一旦編譯了Apache,它需要被安裝在服務器根目錄,缺省是在同一個盤符下的\Apache2目錄。
要自動編譯和安裝所有文件到指定的目錄dir ,使用下列nmake命令之一:
nmake /f Makefile.win installr INSTDIR=dir
nmake /f Makefile.win installd INSTDIR=dir
INSTDIR的dir參數給出了安裝目錄;如果要安裝到\Apache2目錄可以省略。
安裝結果如下列:
dir\bin\Apache.exe - Apache可執(zhí)行文件dir\bin\ApacheMonitor.exe - 服務監(jiān)視器托盤圖表工具dir\bin\htdigest.exe - 摘要授權密碼文件工具(Digest auth
password file utility)dir\bin\htdbm.exe - SDBM授權數據庫密碼文件工具(SDBM auth
database password file utility)dir\bin\htpasswd.exe - 基本授權密碼文件工具(Basic auth
password file utility)dir\bin\logresolve.exe - 日志文件dns名稱查找工具dir\bin\rotatelogs.exe - 日志文件遍歷工具dir\bin\wintty.exe - 控制臺窗口工具dir\bin\libapr.dll - Apache可移植運行時共享庫dir\bin\libaprutil.dll - Apache運行時共享庫工具dir\bin\libhttpd.dll - Apache核心庫dir\modules\mod_*.so - Apache可裝載模塊dir\conf - 配置目錄dir\logs - 空日志目錄dir\include - C語言頭文件dir\lib - 連接庫文件發(fā)行版本之間,只有.dsp文件被維護。
考慮到會對審閱者的時間造成巨大浪費,并不重新產生.mak文件。
因此,你不能依靠上述的NMAKE命令來編譯修訂過的.dsp項目文件,除非你自己從項目中導出全部.mak文件。如果你在Microsoft Developer Studio環(huán)境中編譯這樣做是不必要的。BuildBin目標項目是非常值得的(或者用命令行目標
_apacher 或 _apached)。
許多文件在編譯過程中自動產生。只有一次完全編譯才提供為正確的編譯行為編譯正確的依存關系樹所需要的全部依賴文件。為創(chuàng)建供發(fā)布的.mak文件,一定要檢查.mak
(或.dep)中Platform SDK和其他頭文件的依存性。
DevStudio\SharedIDE\bin\(VC5)或者DevStudio\Common\MSDev98\bin\(VC6)
目錄包含了sysincl.dat文件,其中列出了所有的例外情況來告訴VC++創(chuàng)建依存關系時不掃描列表中的文件,
更新此文件以包含這些頭文件
(同時包括正斜杠和反斜杠路徑,比如sys/time.h和sys\time.h要同時列出)。
在發(fā)布的.mak文件中包含一個本地安裝路徑將使編譯完全失敗,所以不要忘了運行srclib/apr/build/fixwin32mak.pl來修正.mak文件中的絕對路徑。