今天在家编译安装apache-2.4.6,照着老师的改了一下,不过老师讲的是2.2.22,和这个有些不一样,接下来就是安装步骤。


首先要安装apr和apr-util,在2.2是不用安装的,2.4要手动安装它。

我的环境是

cat /etc/redhat-release ;uname -r;uname -m
CentOS release 5.9 (Final)
2.6.18-348.16.1.el5
x86_64



wget http://apache.etoak.com//apr/apr-1.4.8.tar.gz
tar zxf apr-1.4.8.tar.gz
mv apr-1.4.8 httpd-2.4.6/srclib/apr
cd httpd-2.4.6/srclib/apr
./configure
make && make install
wget http://apache.etoak.com//apr/apr-util-1.5.2.tar.gz
tar zxvf apr-util-1.5.2.tar.gz
mv apr-util-1.5.2 httpd-2.4.6/srclib/apr-util/
cd httpd-2.4.6/srclib/apr-util/
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr


另外还要安装pcre,因为本机已经装过了,这里就不再装了


tar zxf httpd-2.4.6.tar.gz
cd httpd-2.4.6
./configure \
--prefix=/application/apache-2.4.6 \
--enable-deflate \
--enable-expires \
--enable-headers \
--enable-modules=most \
--enable-so \
--with-mm=worker \
--enable-rewrite \
--with-included-apr \
--with-apr=/usr/local/apr \
--with-apr-util=/usr/local/apr-util
make && make install
ln -s /application/apache-2.4.6/ /application/apache
/application/apache/bin/apachectl start


当中出现的错误及解决方法


错误一:

httpd: Syntax error on line 140 of /home/raopact/apache/conf/httpd.conf: Cannot load /home/raopact/apache/modules/mod_dir.so into server: /home/raopact/apache/modules/mod_dir.so: undefined symbol: apr_array_clear


解决方法:

这是因为没有加 --with-included-apr 这个参数导致的,要重新编译安装,并且要把apr-1.4.8和apr-util-1.5.2去掉版本号后移动到httpd-2.4.6/srclib/下编译安装,这是必须的。


错误二:

httpd: Could not open configuration file /application/httpd-2.4.6/conf/httpd.conf: No such file or directory


解决方法:

出现这个问题是因为开始安装的时候是用的http-2.4.6这个目录,然后把这个删除了后,又重装安装了一遍,不过目录改成了apache-2.4.6,所以执行/application/apache-2.4.6/bin/apachectl时就报这个错误,这个错误折腾了我半天,心想编译安装的内容不都在apache-2.4.6这个目录新装的吗?为什么还有指定httpd-2.4.6这个目录呢,百思不得其解,最后网上搜索,看有网友说重新安装的话最好在./configure 配置后,make clean一下,这样就可以删除上次编译过的内容,报着死马当活马医的态度,make clean了一下。嗯,还真TM是这么回事,结果成功了!


总结:

第一个错误是在网上找了安装方法后觉得把apr和apr-util目录放在外面也没有问题,所以先试着弄的,事实证明,还是不行。

第二个错误真是折腾了我半天,总是找不到问题的所在,在网上也没有找到相应的答案,看到有人提了一句重装软件最好make clean一下,清除上次编译的内容。没想到还真是对了。

总结是个好习惯,尤其是遇到这种不常见的问题!