Apache HTTP Server 版本2.2
在你開始編譯Apache之前有許多重要問題需要注意。開始之前請先看看在Microsoft Windows上使用Apache 。
編譯Apache需要正確安裝以下環(huán)境:
磁盤空間
確保至少有50MB空閑磁盤空間可用。安裝以后Apache使用大約10MB磁盤空間,再加上會快速增長的日志和緩存文件需要的空間。 實際需要的空間大小會在相當(dāng)大程度上取決于你選擇的配置以及使用的第三方模塊和庫。
Microsoft Visual C++ 5.0 或更高版本
可以使用命令行工具,也可以在Visual Studio集成開發(fā)環(huán)境內(nèi)編譯Apache。使用命令行工具要求環(huán)境變量中包含 PATH
, INCLUDE
, LIB
和其他一些變量,這些環(huán)境變量可以用vcvars32
批處理文件來設(shè)置:
"c:\Program Files\DevStudio\VC\Bin\vcvars32.bat"
Windows Platform SDK
Visual C++ 5.0 編譯需要一套新版的Microsoft Windows Platform SDK來允許Apache的某些特性。 對于命令行編譯,用setenv
批處理文件來設(shè)置環(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)內(nèi)安裝Apache ,用awk.exe
工具修改了幾個文件。選擇awk是因為它很小,易于下載(與Perl或者WSH/VB相比),而且能夠完成生成文件的任務(wù)。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命令行解釋程序不認(rèn)識符號連接,因此編譯二進(jìn)制安裝文件會失敗。可行的變通辦法是從cygwin安裝目錄刪除文件awk.exe
并把gawk.exe
改名為awk.exe
。[可選] OpenSSL庫(因為mod_ssl
和ab.exe
用到ssl支持)
警告:在整個世界范圍使用和發(fā)布高強(qiáng)度密碼體系與專利知識產(chǎn)權(quán)都有相當(dāng)大的限制和嚴(yán)格的禁令。OpenSSL包括了在美國及其他國家和地區(qū)受到出口條例、國內(nèi)法律以及受專利保護(hù)的知識產(chǎn)權(quán)所限制的高強(qiáng)度密碼體系。對于OpenSSL項目提供的代碼,不管是Apache軟件基金會還是OpenSSL項目都不能提供關(guān)于擁有、使用和發(fā)布該代碼的法律建議。向你自己的法律顧問咨詢,你需要為你自己的行為負(fù)責(zé)。
為了編譯 mod_ssl
或abs項目(ab.exe
用到SSL支持),OpenSSL必須安裝到srclib
目錄下名為openssl
的子目錄中,openSSL可以從http://www.openssl.org/source/獲得。要是準(zhǔn)備既編譯release
版本又編譯debug
版本,而且要禁止 0.9.7 版中受專利保護(hù)的特性,你應(yīng)該使用下列編譯命令:
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
已經(jīng)經(jīng)過驗證可以使用版本 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 。后者會在編譯結(jié)果文件中包含調(diào)試信息,使發(fā)現(xiàn)bugs和跟蹤問題更容易。
Apache也能夠用VC++的Visual Studio集成開發(fā)環(huán)境編譯。為了簡化過程,提供了一個Visual Studio工作區(qū)文件:Apache.dsw
。
它闡述了完整的Apache二進(jìn)制發(fā)行版需要的全部.dsp
項目列表。
它包含了項目之間的依存關(guān)系來保證編譯按合適的順序進(jìn)行。
打開 Apache.dsw
工作區(qū)文件,選擇
InstallBin
(根據(jù)需要選擇編譯Release
或者Debug
版本)
為活動項目。InstallBin
會引發(fā)編譯相關(guān)的項目并調(diào)用 Makefile.win
移動編譯后的可執(zhí)行文件和動態(tài)鏈接庫。你可以改變InstallBin
項目的設(shè)置來定制
INSTDIR=
選項,修改設(shè)置中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
文件轉(zhuǎn)換成Apache.sln
和.msproj
文件,
如果有任何一個.dsp
源文件改變了,必須重新轉(zhuǎn)換相應(yīng)的.msproj
文件!
這很容易,只需要在VC++ 7.0 集成開發(fā)環(huán)境中重新打開
Apache.dsw
文件。
Visual C++ 7.0 (.net)的用戶還應(yīng)該使用Build
菜單下的Configuration Manager對話框來不選中模塊abs ,mod_ssl
和mod_deflate
,
對編譯Debug
和Release
版本都是。
僅當(dāng)srclib
目錄下至少存在openssl
或者zlib
子目錄二者之一,
才能調(diào)用nmake
或者明白地使用BinBuild
目標(biāo)直接從集成開發(fā)環(huán)境來編譯這幾個模塊。
導(dǎo)出的那些.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導(dǎo)出所有make文件。
為了創(chuàng)建全部自動產(chǎn)生的動態(tài)目標(biāo)你必須首先編譯項目,以便互相之間的依存關(guān)系可以被正確解析。運行下面命令修正路徑使之能編譯到任何位置:
perl srclib\apr\build\fixwin32mak.pl
你必須在httpd
源碼樹的頂層目錄輸入這個命令。
當(dāng)前目錄及其子目錄下所有的.mak
和 .dep
項目文件都將被改正,并且時間戳被調(diào)節(jié)到與.dsp
一致。
如果你貢獻(xiàn)修正項目文件的補(bǔ)丁,我們必須以Visual Studio 6.0 格式來確認(rèn)項目文件。 改動應(yīng)該簡單而且只帶有最少的編譯和連接標(biāo)記以便能夠被從VC++ 5.0 到 7.0 的所有環(huán)境識別。
Apache.dsw
工作區(qū)文件和makefile.win
nmake
腳本都是以下列順序編譯Apache服務(wù)器的.dsp
項目文件:
srclib\apr\apr.dsp
srclib\apr\libapr.dsp
srclib\apr-util\uri\gen_uri_delims.dsp
srclib\apr-util\xml\expat\lib\xml.dsp
srclib\apr-util\aprutil.dsp
srclib\apr-util\libaprutil.dsp
srclib\pcre\dftables.dsp
srclib\pcre\pcre.dsp
srclib\pcre\pcreposix.dsp
server\gen_test_char.dsp
libhttpd.dsp
Apache.dsp
此外,modules\
子目錄樹包含了大多數(shù)模塊的項目文件。
support\
子目錄包含了一些附加程序的項目文件,它們運行時不是Apache的一部分,
但是管理員要使用它們來測試Apache和維護(hù)密碼與日志文件。
Windows平臺特有的支持項目在support\win32\
目錄下。
support\ab.dsp
support\htdigest.dsp
support\htpasswd.dsp
support\logresolve.dsp
support\rotatelogs.dsp
support\win32\ApacheMonitor.dsp
support\win32\wintty.dsp
一旦編譯了Apache,它需要被安裝在服務(wù)器根目錄,缺省是在同一個盤符下的\Apache2
目錄。
要自動編譯和安裝所有文件到指定的目錄dir ,使用下列nmake
命令之一:
nmake /f Makefile.win installr INSTDIR=dir nmake /f Makefile.win installd INSTDIR=dir
INSTDIR
的dir參數(shù)給出了安裝目錄;如果要安裝到\Apache2
目錄可以省略。
安裝結(jié)果如下列:
dir\bin\Apache.exe
- Apache可執(zhí)行文件dir\bin\ApacheMonitor.exe
- 服務(wù)監(jiān)視器托盤圖表工具dir\bin\htdigest.exe
- 摘要授權(quán)密碼文件工具(Digest auth
password file utility)dir\bin\htdbm.exe
- SDBM授權(quán)數(shù)據(jù)庫密碼文件工具(SDBM auth
database password file utility)dir\bin\htpasswd.exe
- 基本授權(quán)密碼文件工具(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
文件被維護(hù)。
考慮到會對審閱者的時間造成巨大浪費,并不重新產(chǎn)生.mak
文件。
因此,你不能依靠上述的NMAKE
命令來編譯修訂過的.dsp
項目文件,除非你自己從項目中導(dǎo)出全部.mak
文件。如果你在Microsoft Developer Studio環(huán)境中編譯這樣做是不必要的。BuildBin
目標(biāo)項目是非常值得的(或者用命令行目標(biāo)
_apacher
或 _apached
)。
許多文件在編譯過程中自動產(chǎn)生。只有一次完全編譯才提供為正確的編譯行為編譯正確的依存關(guān)系樹所需要的全部依賴文件。為創(chuàng)建供發(fā)布的.mak
文件,一定要檢查.mak
(或.dep
)中Platform SDK和其他頭文件的依存性。
DevStudio\SharedIDE\bin\
(VC5)或者DevStudio\Common\MSDev98\bin\
(VC6)
目錄包含了sysincl.dat
文件,其中列出了所有的例外情況來告訴VC++創(chuàng)建依存關(guān)系時不掃描列表中的文件,
更新此文件以包含這些頭文件
(同時包括正斜杠和反斜杠路徑,比如sys/time.h
和sys\time.h
要同時列出)。
在發(fā)布的.mak
文件中包含一個本地安裝路徑將使編譯完全失敗,所以不要忘了運行srclib/apr/build/fixwin32mak.pl
來修正.mak
文件中的絕對路徑。