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小节。

  1. httpd-2.4.26+apr-1.5.2+apr-util-1.5.4,编译可能会简单点。
  2. httpd-2.4.29+apr-1.6.3+apr-util-1.6.1,需要额外安装一些包。
  3. 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之后直接makemake 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 <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
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即可,

apr-md5.PNG

apr-md5-2.PNG

至于怎么对比这两个值,这里推荐一个小方法,通过浏览器的页面关键字搜索(control + F)将md5dum获得的值复制粘贴到搜索框里,若两个值相等,将匹配页面上的值(如下图所示)。
apr-md5-find.PNG

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,569评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,499评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,271评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,087评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,474评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,670评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,911评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,636评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,397评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,607评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,093评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,418评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,074评论 3 237
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,092评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,865评论 0 196
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,726评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,627评论 2 270

推荐阅读更多精彩内容