Ubuntu下编译安装apache
只是想安装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 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 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 <expat.h> ^~~~~~~~~ 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 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 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 install
编译过程略有区别,若从git或svn上获取的源代码,需要执行
./buildconf
脚本生成configure文件。我在这个过程以此安装了python(Ubuntu 18.04默认安装python3)和libtool(apt install libtool-bin
)。附:使用MD5值检验下载软件的完整性和安全性
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 介绍
附.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即可,