只是想安装apache并熟悉httpd的配置,使用apt安装即可。
想要学习httpd的源码,并调试,就需要编译安装了
每次编apache,都会遇到新的坑。编的多了回头再看以前的记录,只能感叹,我真傻,真的
。
源码编译的坑
和apt仓库安装不同,你需要自带许多工具,前言也说了,我们目的是学习源码,我们要求比较多,还要调戏调试。
安装httpd服务器之前,确保机器包含以下工具:
httpd
| -- APR
| | -- autoconf
| ` -- libtool
| -- APR-Util
| -- PCRE
| -- GCC
` -- Perl5[可选]
问题就出现在httpd的版本和其他工具的版本选择上。
举个刚遇到的例子,apr-1.6.5的安装需要先执行buildconf.sh
脚本,该脚本会调用另一个校本检测是否已经安装autoconf和libtool。它考虑了libtool的各种可能的名称:$libtool=glibtool1 glibtool libtool libtool15 libtool14
,但是没有想到在我使用的ubuntu18.04上,使用sudo apt install libtool
安装的libtool叫做libtoolize。
综上,可能遇到的坑:
- 对工具版本的要求
- 工具改名
- 工具要求的工具不符合要求
遇到坑不要慌,查看检测环境和安装过程
探坑
参考编译与安装一章的Requirements小节。
- httpd-2.4.26+apr-1.5.2+apr-util-1.5.4,编译可能会简单点。
- httpd-2.4.29+apr-1.6.3+apr-util-1.6.1,需要额外安装一些包。
- httpd-+apr-1.6.
1. 第二种版本
httpd-2.4.29+apr-1.6.3+apr-util-1.6.1,
1.1 APR和APR-Util
安装APR和APR-Util,从http://apr.apache.org/上下载最新版本APR和APR-Util,解压到
/root/work/httpd/srclib/apr
和/root/work/httpd/srclib/apr-util
(我把httpd源代码放在/root/work
,这里需要根据你自己的放置进行修改),并且使用./configure --with-included-apr
参数。
解压后的apr文件夹若包含版本号,可用过mv重命名为apr。apr-util同理。
1.1.1 编译apr
安装在/usr/local/apr
目录下:
./configure --prefix=/usr/local/apr
make
make install
在执行./configure
的时候,报出的信息包括:
rm: cannot remove 'libtoolT': No such file or directory
解决办法:
参考此文,采用第二种方法:打开 configure,把 $RM “$cfgfile” 那行删除掉,重新再运行 ./configure --prefix=/usr/local/apr
(划掉的办法虽可行,但该博客没有搞清楚问题的根本原因!)
分析:
config.status在生成新的文件之前,移除了libtoolT,因此$RM “$cfgfile”
想要删除掉一个不存在的文件,报出错误。
可以添加-f
选项忽略这个错误。
详细的讨论参考configure reports "cannot remove `libtoolT': No such file or directory"
另外也可以看一下Error: cannot remove "libtoolT",很有意思的大神和小白的对话:)
解决:
思路就是忽略这个报错信息,你可以执行完./configure
之后直接make
、make install
;可以找到$RM "$cfgfile"
删除该项,也可以将该项改为$RM -f "$cfgfile"
1.1.2 编译apr-util
apr-util的编译需要指定apr的安装目录--/usr/local/apr
,默认安装在/usr/local/apr-util
下:
./configure --with-apr=/usr/local/apr
make
make install
1.1.2.1 expat.h文件的缺失
当然你在make时也许会遇到这样的报错:
/bin/bash /usr/local/apr/build-1/libtool --silent --mode=compile gcc -g -O2 -pthread -DHAVE_CONFIG_H -DLINUX -D_REENTRANT -D_GNU_SOURCE -I/httpd_source_tree_root/srclib/apr-util/include -I/httpd_source_tree_root/srclib/apr-util/include/private -I/usr/local/apr/include/apr-1 -o xml/apr_xml.lo -c xml/apr_xml.c && touch xml/apr_xml.lo
xml/apr_xml.c:35:10: fatal error: expat.h: No such file or directory
#include
^~~~~~~~~
compilation terminated.
解决:
原因在于apr-util-1.6.1
版本并没有捆绑expat
参考https://segmentfault.com/q/1010000009848251使用apt安装 expat
的开发库:apt-get install libexpat1-dev
。
我在Ubuntu 18.04上安装了libexpat1-dev
开发库之后再从新编译成功了。但是没记错的话,有一次这样并没有用,而是通过编译expat源码解决的。
源码编译expat:
下载expat,解压后进入:
cd libexpat-R_x_x_x/expat
./buildconf.sh
./configure --prefix=/usr/local/expat
make
make install
出现bin/sh: 1: autoreconf: not found
的原因是没有autoreconf包apt-get install autoreconf
安装之后就可以了。
若使用源码编译的expat,建议在下面编译apache的时候添加
--with-expat=/usr/local/expat
参数。
1.2 PCRE
从http://www.pcre.org下载源代码,安装在/usr/local/pcre目录下:
./configure --prefix=/usr/local/pcre
make
make install
如果没有安装g++编译环境,执行apt-get install build-essential
安装。
1.3 APACHE
./configure --prefix=/usr/local/apache2 --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-expat=/usr/local/expat(该选项仅限源码编译安装expat)
make
make install
编译过程略有区别,若从git或svn上获取的源代码,需要执行./buildconf
脚本生成configure文件。我在这个过程以此安装了python(Ubuntu 18.04默认安装python3)和libtool(apt install libtool-bin
)。
附:使用MD5值检验下载软件的完整性和安全性
参考HowToMD5SUM
2 第三种版本
ubuntu18.04 + httpd + apr-1.6.5
2.1 编译apr
下载地址:http://apr.apache.org/download.cgi
选择下载的是apr-1.6.5.tar.gz
./buildconf #检测需要的依赖
根据据提示安装相应依赖。例如我被提醒缺少autoconf、libtool,这些都可以通过apt安装:
sudo apt install autoconf
sudo apt install libtool
这里有一点我不确定自己处理的好不好,即使安装了libtool,apr/build/buildcheck.sh脚本仍然检测说libtool not found。我将libtool=\
build/PrintPath glibtool1 glibtool libtool libtool15 libtool14`改为
libtool=`build/PrintPath glibtool1 glibtool libtool libtool15 libtool14 libtoolize``之后编译通过。这么改的原因我认为libtool在ubuntu18.04下叫libtoolize
如果遇到下面的错误:
rm: cannot remove 'libtoolT': No such file or directory
参考1.1.1
2.2 编译apr-util
选择下载的是apr-util-1.6.1.tar.gz
附.1 介绍
TODO
附.2 检测
使用下列命令获取文件的md5值:
root@ubuntu18:~/work# ls
apr-1.6.3 apr-1.6.3.tar.gz httpd
root@ubuntu18:~/work# md5sum apr-1.6.3.tar.gz
57c6cc26a31fe420c546ad2234f22db4 apr-1.6.3.tar.gz
将获取到的57c6cc26a31fe420c546ad2234f22db4
与下载站点提供的值进行对比。
如图,点击MD5即可,
至于怎么对比这两个值,这里推荐一个小方法,通过浏览器的页面关键字搜索(control + F)将md5dum获得的值复制粘贴到搜索框里,若两个值相等,将匹配页面上的值(如下图所示)。