Apache HTTP Server 版本2.2
在你開始編譯Apache之前有許多重要問題需要注意。開始之前請(qǐng)先看看在Microsoft Windows上使用Apache 。
編譯Apache需要正確安裝以下環(huán)境:
磁盤空間
確保至少有50MB空閑磁盤空間可用。安裝以后Apache使用大約10MB磁盤空間,再加上會(huì)快速增長(zhǎng)的日志和緩存文件需要的空間。 實(shí)際需要的空間大小會(huì)在相當(dāng)大程度上取決于你選擇的配置以及使用的第三方模塊和庫(kù)。
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的某些特性。 對(duì)于命令行編譯,用setenv
批處理文件來設(shè)置環(huán)境變量:
"c:\Program Files\Platform SDK\setenv.bat"
隨Visual C++ 6.0 及以后版本發(fā)布的Platform SDK文件足以滿足要求,所以新版本的用戶可以略過這個(gè)要求。
mod_isapi
特性可用。沒有新版SDK的話,在 MSVC++ 5.0 下編譯Apache會(huì)出現(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
工具修改了幾個(gè)文件。選擇awk是因?yàn)樗苄,易于下載(與Perl或者WSH/VB相比),而且能夠完成生成文件的任務(wù)。Brian Kernighan的http://cm.bell-labs.com/cm/cs/who/bwk/站點(diǎn)有一個(gè)編譯好的本地Win32代碼版本,這個(gè)文件http://cm.bell-labs.com/cm/cs/who/bwk/awk95.exe你必須將它名字保存為awk.exe
而不是awk95.exe
。
awk.exe
(對(duì)于Developer Studio 7.0 是在the Projects - VC++ Directories 面板)。 把awk.exe
的路徑加入到列表中,并按要求加入到系統(tǒng)PATH
環(huán)境變量里。gawk.exe
而文件awk.exe
實(shí)際上是gawk.exe
的一個(gè)符號(hào)連接。 而Windows命令行解釋程序不認(rèn)識(shí)符號(hào)連接,因此編譯二進(jìn)制安裝文件會(huì)失敗?尚械淖兺ㄞk法是從cygwin安裝目錄刪除文件awk.exe
并把gawk.exe
改名為awk.exe
。[可選] OpenSSL庫(kù)(因?yàn)?code class="module">mod_ssl和ab.exe
用到ssl支持)
警告:在整個(gè)世界范圍使用和發(fā)布高強(qiáng)度密碼體系與專利知識(shí)產(chǎn)權(quán)都有相當(dāng)大的限制和嚴(yán)格的禁令。OpenSSL包括了在美國(guó)及其他國(guó)家和地區(qū)受到出口條例、國(guó)內(nèi)法律以及受專利保護(hù)的知識(shí)產(chǎn)權(quán)所限制的高強(qiáng)度密碼體系。對(duì)于OpenSSL項(xiàng)目提供的代碼,不管是Apache軟件基金會(huì)還是OpenSSL項(xiàng)目都不能提供關(guān)于擁有、使用和發(fā)布該代碼的法律建議。向你自己的法律顧問咨詢,你需要為你自己的行為負(fù)責(zé)。
為了編譯 mod_ssl
或abs項(xiàng)目(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)會(huì)直接把壓縮源碼編譯到mod_deflate
模塊中去。 Zlib可以從http://www.gzip.org/zlib/獲得 -- mod_deflate
已經(jīng)經(jīng)過驗(yàn)證可以使用版本 1.1.4 正確編譯。
首先,將Apache源碼包解壓到合適的目錄。打開一個(gè)命令提示符窗口并用cd
切換到那個(gè)目錄。
主要的Apache make文件命令都包含在文件Makefile.win
中。要在Windows NT上編譯Apache ,只需要簡(jiǎn)單地使用下列命令之一就可以編譯release
或debug
版本,分別是:
nmake /f Makefile.win _apacher nmake /f Makefile.win _apached
兩條命令都可以編譯Apache 。后者會(huì)在編譯結(jié)果文件中包含調(diào)試信息,使發(fā)現(xiàn)bugs和跟蹤問題更容易。
Apache也能夠用VC++的Visual Studio集成開發(fā)環(huán)境編譯。為了簡(jiǎn)化過程,提供了一個(gè)Visual Studio工作區(qū)文件:Apache.dsw
。
它闡述了完整的Apache二進(jìn)制發(fā)行版需要的全部.dsp
項(xiàng)目列表。
它包含了項(xiàng)目之間的依存關(guān)系來保證編譯按合適的順序進(jìn)行。
打開 Apache.dsw
工作區(qū)文件,選擇
InstallBin
(根據(jù)需要選擇編譯Release
或者Debug
版本)
為活動(dòng)項(xiàng)目。InstallBin
會(huì)引發(fā)編譯相關(guān)的項(xiàng)目并調(diào)用 Makefile.win
移動(dòng)編譯后的可執(zhí)行文件和動(dòng)態(tài)鏈接庫(kù)。你可以改變InstallBin
項(xiàng)目的設(shè)置來定制
INSTDIR=
選項(xiàng),修改設(shè)置中General頁(yè)里面的Build Command line條目。INSTDIR
的缺省值是
/Apache2
目錄。如果你只是想要測(cè)試編譯(不安裝),就用
BuildBin
項(xiàng)目代替。
.dsp
項(xiàng)目文件使用Visual C++ 6.0格式發(fā)行。Visual C++ 5.0 (97)也能識(shí)別這種格式。而Visual C++
7.0 (.net)必須把Apache.dsw
和.dsp
文件轉(zhuǎn)換成Apache.sln
和.msproj
文件,
如果有任何一個(gè).dsp
源文件改變了,必須重新轉(zhuǎn)換相應(yīng)的.msproj
文件!
這很容易,只需要在VC++ 7.0 集成開發(fā)環(huán)境中重新打開
Apache.dsw
文件。
Visual C++ 7.0 (.net)的用戶還應(yīng)該使用Build
菜單下的Configuration Manager對(duì)話框來不選中模塊abs ,mod_ssl
和mod_deflate
,
對(duì)編譯Debug
和Release
版本都是。
僅當(dāng)srclib
目錄下至少存在openssl
或者zlib
子目錄二者之一,
才能調(diào)用nmake
或者明白地使用BinBuild
目標(biāo)直接從集成開發(fā)環(huán)境來編譯這幾個(gè)模塊。
導(dǎo)出的那些.mak
文件造成很大的爭(zhēng)議,但對(duì)于
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)境編譯所有項(xiàng)目,再使用Project菜單 - Export導(dǎo)出所有make文件。
為了創(chuàng)建全部自動(dòng)產(chǎn)生的動(dòng)態(tài)目標(biāo)你必須首先編譯項(xiàng)目,以便互相之間的依存關(guān)系可以被正確解析。運(yùn)行下面命令修正路徑使之能編譯到任何位置:
perl srclib\apr\build\fixwin32mak.pl
你必須在httpd
源碼樹的頂層目錄輸入這個(gè)命令。
當(dāng)前目錄及其子目錄下所有的.mak
和 .dep
項(xiàng)目文件都將被改正,并且時(shí)間戳被調(diào)節(jié)到與.dsp
一致。
如果你貢獻(xiàn)修正項(xiàng)目文件的補(bǔ)丁,我們必須以Visual Studio 6.0 格式來確認(rèn)項(xiàng)目文件。 改動(dòng)應(yīng)該簡(jiǎn)單而且只帶有最少的編譯和連接標(biāo)記以便能夠被從VC++ 5.0 到 7.0 的所有環(huán)境識(shí)別。
Apache.dsw
工作區(qū)文件和makefile.win
nmake
腳本都是以下列順序編譯Apache服務(wù)器的.dsp
項(xiàng)目文件:
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ù)模塊的項(xiàng)目文件。
support\
子目錄包含了一些附加程序的項(xiàng)目文件,它們運(yùn)行時(shí)不是Apache的一部分,
但是管理員要使用它們來測(cè)試Apache和維護(hù)密碼與日志文件。
Windows平臺(tái)特有的支持項(xiàng)目在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ù)器根目錄,缺省是在同一個(gè)盤符下的\Apache2
目錄。
要自動(dòng)編譯和安裝所有文件到指定的目錄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ù)庫(kù)密碼文件工具(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
- 控制臺(tái)窗口工具dir\bin\libapr.dll
- Apache可移植運(yùn)行時(shí)共享庫(kù)dir\bin\libaprutil.dll
- Apache運(yùn)行時(shí)共享庫(kù)工具dir\bin\libhttpd.dll
- Apache核心庫(kù)dir\modules\mod_*.so
- Apache可裝載模塊dir\conf
- 配置目錄dir\logs
- 空日志目錄dir\include
- C語(yǔ)言頭文件dir\lib
- 連接庫(kù)文件發(fā)行
版本之間,只有.dsp
文件被維護(hù)。
考慮到會(huì)對(duì)審閱者的時(shí)間造成巨大浪費(fèi),并不重新產(chǎn)生.mak
文件。
因此,你不能依靠上述的NMAKE
命令來編譯修訂過的.dsp
項(xiàng)目文件,除非你自己從項(xiàng)目中導(dǎo)出全部.mak
文件。如果你在Microsoft Developer Studio環(huán)境中編譯這樣做是不必要的。BuildBin
目標(biāo)項(xiàng)目是非常值得的(或者用命令行目標(biāo)
_apacher
或 _apached
)。
許多文件在編譯過程中自動(dòng)產(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)系時(shí)不掃描列表中的文件,
更新此文件以包含這些頭文件
(同時(shí)包括正斜杠和反斜杠路徑,比如sys/time.h
和sys\time.h
要同時(shí)列出)。
在發(fā)布的.mak
文件中包含一個(gè)本地安裝路徑將使編譯完全失敗,所以不要忘了運(yùn)行srclib/apr/build/fixwin32mak.pl
來修正.mak
文件中的絕對(duì)路徑。