Apache源码包编译RPM包与升级踩坑记录

本文共分三部分,第一部分是我的踩坑详细记录,废话多;第二部分是整个编译升级过程的脚本操作步骤,没废话;第三部分全是废话牢骚。大家各取所需。。。

觉得有帮助就点赞,哪里错了可以帮忙指出。谢谢。。。

一、Apache编译RPM包踩坑全记录

由于历史遗留原因我公司系统使用的祖传Apache2.4.6被绿盟检测出了漏洞(CVE-2017-3169、CVE-2017-7679、CVE-2017-3167),所以被迫无奈需要为Apache修复漏洞。网上搜索了下发现要修复漏洞有两种方法:1、打补丁;2、升级软件。

由于自己本身玩过一下下linux,心想打补丁而已。。。easy啦。。。google补丁一下载,软件一装完事。结果。。。啪啪啪。。。

没想到还能让我遇到这种事,请问各位大佬,这些陈年漏洞经常这样的吗?官方网站补丁都没了,其他地方的补丁软件又不敢用,毕竟出问题担待不起。所以只能抛弃方法1了。那么就剩下了方法2升级软件版本了。网上查了最新版本软件修复了所有已知的漏洞了。OK就它了。

Apache软件更新方法包含了好多种。1、源码包安装;2、RPM包安装;

源码包的安装很多人都觉的复杂其实主要是因为源码包需要先编译再安装,其实如果一切顺利的话也就./configure  make  make install三个命令就完事,可是很多人都在./configure  make 这两步给坑死了。因为安装linux的软件有个依赖性特别让人抓狂。而RPM包毕竟容易是因为用RPM包安装可以使用yum来帮我们自动解决软件的依赖性。扯远了扯远了。。。

回正题,因为我是在生产环境使用的所以客户要求我在给出升级方案的时候也能够给出一个回退方案。所以考虑到源码包安装比较复杂,所以我就只能用RPM包安装了。可是我在网上找来好久没找到合适自己的RPM包。所以我就干脆自己用源码包编译RPM包了。以下是编译过程遇到的一些坑,这里记录一下。

我的系统:Centos7,Apache2.4.6。

在浏览官网后发现了他又一个编译RPM包的网页:https://httpd.apache.org/docs/2.4/platform/rpm.html(可以参考下)

第一步:下载源码包、安装依赖

网址:https://httpd.apache.org/download.cgi

这里下载好需要的源码包httpd-2.4.37.tar.bz2,我试了下好像只有bz2结尾的文件才能用来编译RPM包。

运行命令发现依赖了这么多软件包。。。

wget http://mirrors.hust.edu.cn/apache//httpd/httpd-2.4.37.tar.bz2  #下载httpd源码包

rpmbuild -tb httpd-2.4.37.tar.bz2  #编译RPM包


这里可以简单的利用yum来安装上面依赖的软件。这里"yum install -y 软件名"就可以把这些软件都全部安装。

yum install -y zlib-devel libselinux-devel libuuid-devel pcre-devel openldap-devel lua-devel libxml2-devel openssl-devel apr-devel apr-util-devel  #使用yum安装所以依赖软件包

通过这一步就解决了编译RPM包的所有依赖关系了。是不是很简单。。。你以为这就结束了?是的结束了。再一次运行编译命令''rpmbuild -tb httpd-2.4.37.tar.bz2''

在经过了大概5分钟左右的等待后。。。出现了这个

果然还是太年轻低估了linux折磨人的能力。。。

第二步:解决源码包编译错误

在网上搜了好久发现和我遇到一样问题的少之又少,而且方法试过了都毫无作用。然后一遍有一遍把虚拟机还原,怀疑是自己的打错命令。。。经过了抓狂、自我怀疑、自我否定、信心重建后。。。我重拾信心后心中大吼一声MMP。。。然后继续上网搜索。。。结果在这里找到了一个网友在编译httpd-2.4.20时也遇到类似的问题,而他是因为apr、apr-util两个软件包版本太旧了。我回头去看时也发现刚刚我们编译的时候其实它提示的是有版本要求的。

但是通过rpm -ql apr可以查看到我系统的arp版本已经高于1.4.0。

apr-util的版本也是高于1.4.0的。那说明我可能不是这个问题吧。

后面我又继续搜索,结果发现了这个,这里他们说可能是apr和apr-util版本不同导致了问题。

然后。。。我就把虚拟机又还原了。继续开始,所以我先把apr源码编译成了RPM包之后,再安装。。。反正一顿折腾之后发现apr和apr-util版本一样是1.5.2之后。。。还是不行。。。


终于平复了心情。。。我想着死马当活马医了,干脆都用最新软件包好了。

所以去apache官网重新下载了最新的apr软件包。

wget http://mirrors.tuna.tsinghua.edu.cn/apache//apr/apr-1.6.5.tar.bz2

编译apr的rpm包:rpmbuild -tb apr-1.6.5.tar.bz2。如果编译apr包遇到“Address already in use”错误可以参考这里的解决方法。

如果编译成功进入~/rpmbuild/RPMS/x86_64可以看到生成的软件包:

这里就可以安装apr了,记得使用localinstall命令同时指定安装两个包,否则会包依赖错误.

yum localinstall apr-1.6.5-1.x86_64.rpm apr-devel-1.6.5-1.x86_64.rpm

使用rpm -ql apr可以查询软件是否安装成功升级

第三步:编译apache的rpm包

OK。。。apr版本升级成功。。。继续编译apache包,还是这条命令

rpmbuild -tb httpd-2.4.37.tar.bz2

编译成功,在~/rpmbuild/RPMS/x86_64可以发现编译成功的rpm包了。

第四步:升级httpd

我原先的系统httpd版本是2.4.6,然后apr是1.4.8、apr-util是1.5.2。在更新的时候发现你需要把旧版本的httpd-tools、httpd都先卸载才能安装新的httpd-tools、httpd,否则会提示已经又版本冲突。同时因为httpd不同版本所依赖的apr版本也是不一样的。所以更新httpd就需要更新3个软件,分别是:httpd、httpd-tools、apr。如果你使用的apr版本不匹配,有可能无法安装httpd,或者安装完了httpd服务却无法启动的问题。

同时因为软件的互相依赖的关系,所以你卸载和安装软件的顺序是需要颠倒的。

比如你要在其他服务器上升级httpd,那么你需要先卸载旧的软件:(因为我就是在实验机上编译rpm然后再到生产环境升级的)

卸载顺序:httpd > httpd-tools > apr

rpm -e httpd httpd-tools #卸载httpd、httpd-tools

因为发现有很多软件包依赖apr,如果要卸载apr就需要连带卸载其他这些依赖包很麻烦,所以我就使用了升级操作,发现可以顺利升级apr。

rpm -Uvh apr-1.6.5-1.x86_64.rpm #升级apr版本

安装新版本httpd-tools、httpd

rpm -ivh httpd-tools-2.4.37-1.x86_64.rpm httpd-2.4.37-1.x86_64.rpm

查询httpd版本



二、Apache-2.4.37编译RPM包步骤

RPM包编译步骤:

下载源码包

(链接是在官网复制的)

cd /mnt  #切换目录到/mnt

wget http://mirrors.hust.edu.cn/apache//httpd/httpd-2.4.37.tar.bz2   #下载httpd源码包

wget http://mirrors.tuna.tsinghua.edu.cn/apache//apr/apr-1.6.5.tar.bz2  #下载apr源码包

更新apr软件包

编译apr的rpm包:

cd /mnt  #切换目录到/mnt

rpmbuild -tb apr-1.6.5.tar.bz2

编译成功,进入~/rpmbuild/RPMS/x86_64可以看到生成的软件包:


这里就可以安装apr了,记得使用localinstall命令同时指定安装两个包,否则会包依赖错误.

cd ~/rpmbuild/RPMS/x86_64

yum localinstall apr-1.6.5-1.x86_64.rpm apr-devel-1.6.5-1.x86_64.rpm

使用rpm -ql apr可以查询软件是否安装成功升级


编译httpd RPM包

cd /mnt  #切换目录到/mnt

rpmbuild -tb httpd-2.4.37.tar.bz2  #编译http的rpm包

这一步可能会出现软件的依赖性,可以使用yum或者其他你喜欢的方式安装所依赖的所有软件(其中apr使用1.6.5版本)。然后再次执行上面的命令。编译成功的话,编译好的RPM包将保存在目录:~/rpmbuild/RPMS/ 。

编译好之后会在~/rpmbuild/RPMS/目录下生成这些RPM包

升级httpd

你要升级httpd,那么你需要先卸载旧的软件:

卸载顺序:httpd > httpd-tools > apr

rpm -e httpd httpd-tools #卸载httpd、httpd-tools

因为发现有很多软件包依赖apr,如果要卸载apr就需要连带卸载其他这些依赖包很麻烦,所以我就使用了升级操作,发现可以顺利升级apr。

rpm -Uvh apr-1.6.5-1.x86_64.rpm #升级apr版本

安装新版本httpd-tools、httpd

rpm -ivh httpd-tools-2.4.37-1.x86_64.rpm httpd-2.4.37-1.x86_64.rpm

查询httpd版本

[root@test ~]# httpd -v

Server version: Apache/2.4.37 (Unix)

Server built:   Nov  2 2018 11:35:49

Apache编译rpm包与升级完成。

三、一堆废话

这里还想多说一句就是:无论你在编译更新软件的时候有时候可能你的故障现象和网上的是一模一样的,但是按照网上的方法,别人能成功,而你却不行。那么这个有可能是因为我们两个人的linux的版本、编译的软件版本或者其他与编译有关联的软件包之间有一些不同,所以导致操作完遇到的是另一种情况。

所以大家在更新的时候,除了要确认系统、软件版本外,其他编译相关联的软件包也需要多关注,有时候就是这些看似不相关的软件包导致了编译失败。还有就是遇到问题要多上网查询,因为这些问题总有人比你先遇到,可以参考他们的处理方法。如果你在网上没有找到与你相类似的问题,那么恭喜你!你发现新大陆了哈哈。。。拿你就更应该加油解决这个问题,可能这个问题会让你头疼很长一段时间,但是等你解决了它之后,那种舒畅,那种成就感不言而喻。同时也希望能把这些东西post到网上,让其他人能通过你的经历少踩些坑,前人种树,后人乘凉。。。


后记:其实大家如果觉得自己编译太繁琐,且软件并不是用于生产环境的话可以去这个网址下载。应该还是挺靠谱的http://rpmfind.net/

参考资料:

https://httpd.apache.org/docs/2.4/platform/rpm.html

https://segmentfault.com/a/1190000005160311

https://stackoverflow.com/questions/35408982/httpd-2-4-18-centos-7-rpm-build-file-not-found-mod-mpm-event-so

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

推荐阅读更多精彩内容

  • php+mysql+apache+centos 编译安装 领导要求先保证php环境稳定,然后再去考虑其他,例如性能...
    dnaEMx阅读 2,178评论 1 16
  • 1 概述 目前CENTOS7默认安装是HTTPD2.4,但是CENTOS6上默认是安装HTTPD2.2,CENTO...
    ghbsunny阅读 843评论 0 0
  • 1 概述 很多软件没有发布rpm包,而是直接发布了源码,好处是这样能兼容更多的平台,但是,用户需要对源码进行编译后...
    ghbsunny阅读 865评论 0 0
  • 那即逝的童年,让我再回味 每忆及童年,我总会心潮腾涌,沉醉在回忆之中…… 那年,我四岁吧。...
    小编远阅读 317评论 2 2
  • 晚上老公津津有味的看他的掼蛋王,无聊的儿子在电视机前晃晃荡荡,终于成功惹毛了老子。 “滚一边去”老公勃然大怒, “...
    枯藤残鸦阅读 190评论 0 2