分类: Java
2006-05-19 15:50:33
本文仅阐述Apache在Unix和类Unix系统中的编译和安装,在Windows中的编译和安装可以参考。其他平台可以参见文档。
像其它许多开源项目一样,Apache使用libtool
和autoconf
建立编译环境。
如果你只进行很小的版本升级(比如2.2.54→2.2.55),请直接跳转到下面的部分。
$ lynx | |
$ gzip -d httpd-NN.tar.gz | |
$ ./configure --prefix=PREFIX | |
$ make | |
$ make install | |
配置 | $ vi PREFIX/conf/httpd.conf |
$ PREFIX/bin/apachectl -k start |
其中NN必须用当前的副版本号替代;PREFIX是服务器被安装到文件系统中的路径名,如果没有指定PREFIX,默认会装到/usr/local/apache2
下面从编译和安装Apache httpd的要求开始详细阐述编译和安装的每个步骤。
编译Apache的要求如下:
PATH
中必须包含指向基本编译工具比如make
的路径。
ntpdate
或xntpd
来同步时间。有关NTP软件的资料请参见。
或
,需要Perl5解释器(5.003或以上的版本就足够了)。如果系统中存在多个Perl解释器,比如有系统提供的Perl 4,还有你自己安装的Perl 5,推荐你使用 --with-perl
选项来确保
脚本使用正确的版本。如果
没有没找到Perl 5也没关系,这并不影响Apache httpd的编译和安装,只是相关的支持脚本不能使用而已。
apr
和apr-util
包含在Apache httpd的发行源代码中,并且在绝大多数情况下使用都不会出现问题。当然,如果apr
或apr-util
的1.0或1.1版本已经安装在你的系统中了,则必须将你的apr
/apr-util
升级到1.2版本,或者将httpd单独分开编译。要使用发行源代码中自带的apr
/apr-util
源代码进行安装,你必须手动完成:
# 编译和安装 apr 1.2
cd srclib/apr
./configure --prefix=/usr/local/apr-httpd/
make
make install
# 编译和安装 apr-util 1.2
cd ../apr-util
./configure --prefix=/usr/local/apr-util-httpd/ --with-apr=/usr/local/apr-httpd/
make
make install
# 配置 httpd
cd ../../
./configure --with-apr=/usr/local/apr-httpd/ --with-apr-util=/usr/local/apr-util-httpd/
Apache可以从及其镜像站点下载。大多数类UNIX系统的Apache用户最好的选择是下载源代码并编译一个适合自己的版本,这个过程(下面将要讲述)是很简单的,它允许你根据自己的需求进行定制。另一方面编译好的二进制版本通常没有进行及时的更新。如果你下载的是编译好的二进制版本,请按照其中的INSTALL.bindist
文件进行安装。
下载完毕后,应该对下载来的tar包作PGP签名校验,以确保其完整而且未被篡改过。()
解压Apache httpd的tar包很简单:
$ gzip -d httpd-NN.tar.gz
$ tar xvf httpd-NN.tar
这样就在当前目录下新建了一个包含发行版源代码的目录,必须cd
进入这个目录以继续服务器的编译。
这一步是根据你的特定平台和个人需求配置源代码树。位于发行源代码根目录的脚本会完成这个步骤(对下载Apache CVS版源代码的开发者,需要装有
autoconf
和libtool
,并需要执行buildconf
,对于官方的发行版则没这个必要)。
要想用所有的默认值配置源代码树只要简单的执行 ./configure
命令就可以了,同时还可以接受命令行参数以改变默认值。
最重要的选项是Apache安装目录的前缀:--prefix
,因为Apache需要知道这个目录才能正常运作。更多的微调选项请参考。
这样,你就可以通过在配置选项中指定要启用或禁用哪些来定制Apache的。组的模块默认包含在Apache中。其他组的模块可以通过 --enable-module
指令启用。其中module是模块名去掉"mod_
"并将下划线转换成连字符后的字符串。你也可以使用 --enable-module=shared
指令将模块编译为可在运行时加载和卸载的。同样的,你也可以使用 --disable-module
指令禁用组的模块。注意,使用这些指令的时候不会对你拼写错误的模块发出警告说找不到某某模块,而只是简单的忽略这个选项。
另外,有时候还必须提供给脚本关于编译器、库、头文件位置的更多信息。这些可以通过环境变量或者命令行选项传递给
脚本。要了解更多信息,请参考
。
为了让你对能指定什么有一个简单的印象,此例演示编译Apache ,并将其安装在/sw/pkg/apache
目录,指定了一个特定的编译器以及编译参数,而且允许今后将两个附加的模块和
通过DSO机制在运行时动态加载:
$ CC="pgcc" CFLAGS="-O2" \
./configure --prefix=/sw/pkg/apache \
--enable-rewrite=shared \
--enable-speling=shared
需要运行几分钟,以测试指定的功能在你的系统中是否有效,并建立稍后编译时所需的许多Makefile文件。
运行以下命令你就可以编译Apache的各个部分了:
$ make
请耐心等候,因为对一个基本配置的编译,需要运行几分钟左右,实际需要的时间会因为你的硬件和选择的模块数量有很大不同。
现在可以在PREFIX目录(参见上述的 --prefix
参数)下安装了,执行:
$ make install
如果是升级,安装程序不会覆盖你的配置文件和文档。
接着,通过修改PREFIX/conf/
目录下的,来配置Apache HTTP服务器。
$ vi PREFIX/conf/httpd.conf
下有Apache使用手册,有最新的文档,你还可以查看完整的。
现在,可以执行下述命令立即你的Apache HTTP服务器:
$ PREFIX/bin/apachectl -k start
你应该可以用来请求你的第一个网页了,这个网页位于
DocumentRoot
目录下,通常是PREFIX/htdocs/
。随后,可以这样服务器:
$ PREFIX/bin/apachectl -k stop
升级的第一步是阅读源代码目录中的发布公告(release announcement)和CHANGES
文件以寻找可能会对你的站点产生影响的变化。如果主板本号的变化(例如1.3→2.0或2.0→2.2)表明编译时和运行时的配置发生了重大变化,需要手动调整,所有模块也需要升级以兼容新版本的模块API 。
小幅度的版本升级(例如:2.2.55→2.2.57)很容易。make install
的过程不会改写任何已经存在的文档、日志、配置文件。此外,开发者也会尽量兼容上一版本的选项、运行时配置、模块API 。大多数情况下,你将能够使用与上一版本完全相同的
命令行和运行时配置,而你原来的所有模块也将正常工作。
如果你保存了上一次安装后build
子目录中的config.nice
文件,升级将更加平滑。这个文件精确地保存了所有对目录树进行配置的命令行。你只需要将
config.nice
文件复制到新的源代码目录树的根文件夹并进行你希望的修改后,然后运行下面的命令即可完成升级:
$ ./config.nice
$ make
$ make install
$ PREFIX/bin/apachectl -k graceful-stop
$ PREFIX/bin/apachectl -k start
--prefix
设置将新版本安装在一个不同的目录,并使用
指令在一个不同的端口监听。经过一段时间的测试以发现可能存在的问题,然后再做出最后的决定。