CentOs7下,编译httpd为rpm安装包,版本2.4.39

目的

    生产环境需要使用 httpd 最新版本 2.4.39,由于通过 yum install 安装的 httpd 版本不够新,所以自己编译打包。

 

环境

    Centos7

 

步骤

  下载安装包

mkdir /opt/source
cd /opt/source
wget https://mirrors.tuna.tsinghua.edu.cn/apache/httpd/httpd-2.4.39.tar.bz2
wget https://mirrors.tuna.tsinghua.edu.cn/apache/apr/apr-1.7.0.tar.bz2
wget https://mirrors.tuna.tsinghua.edu.cn/apache/apr/apr-util-1.6.1.tar.bz2

apr 和 apr-util 是 httpd 所需要的,之所以不用 yum install 安装,是因为用 yum install 安装 apr-1.4.8 和 apr-util-1.5.2 后,在打包 httpd 时出现如下错误:

File not found: /root/rpmbuild/BUILDROOT/httpd-2.4.39.x86_64/usr/lib64/httpd/modules/mod_mpm_event.so

猜测是新版 httpd-2.4.39 要求更高版本的 apr。另一个证据是,我在打包出 httpd-2.4.39 的 rpm 包后,将其安装到一台已经通过 yum install 安装 apr-1.4.8 和 apr-util-1.5.2 的服务器上,执行 httpd 命令时出现以下错误。我再把 apr-1.4.8 和 apr-util-1.5.2 卸载了,并通过 yum localinstall 安装自己打出来的 apr-1.7.0 和 apr-util-1.6.1 后,能正常运行 httpd。

  

 

  打包安装 apr 和 apr-util

    apr-util 依赖 apr,先打包安装 apr

yum install -y rpm-build
rpmbuild -tb apr-1.7.0.tar.bz2

    可以看到打包还依赖一些组件:

    

    用 yum install 安装这些组件,注意有些组件对版本号是有要求的,应该在安装前确认版本号是否符合要求:

    依赖安装再执行 rpmbuild 命令。打包完成后,rpm 包存放在 /root/rpmbuild/RPMS/x86_64/,用 yum localinstall 安装

yum localinstall /root/rpmbuild/RPMS/x86_64/apr-1.7.0-1.x86_64.rpm
yum localinstall /root/rpmbuild/RPMS/x86_64/apr-devel-1.7.0-1.x86_64.rpm

    打包安装 apr-util

rpmbuild -tb apr-util-1.6.1.tar.bz2

    同样需要安装一些组件

    

yum install expat-devel db4-devel postgresql-devel mysql-devel sqlite-devel unixODBC-devel openldap-devel openssl-devel nss-devel

    可能有的组件你的 yum 源没有,那就去文末的镜像网站找。比如我下载不到 db4-devel:

[root@localhost source]# rpmbuild -tb apr-util-1.6.1.tar.bz2
error: Failed build dependencies:
        db4-devel is needed by apr-util-1.6.1-1.x86_64
[root@localhost source]# yum install db4-devel
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
No package db4-devel available.
Error: Nothing to do

    经过搜索发现这个是 libdb4-devel 。它是 epel 的包,我就去镜像网站上的 epel 目录下找到并下载。

wget https://mirrors.tuna.tsinghua.edu.cn/epel/7/x86_64/Packages/l/libdb4-4.8.30-13.el7.x86_64.rpm
wget https://mirrors.tuna.tsinghua.edu.cn/epel/7/x86_64/Packages/l/libdb4-devel-4.8.30-13.el7.x86_64.rpm
yum localinstall libdb4-4.8.30-13.el7.x86_64.rpm libdb4-devel-4.8.30-13.el7.x86_64.rpm

 

    再次执行 rpmbuild 命令,如果遇到如下错误,则需执行 yum install libdb,可以理解为它需要这个包但没检查依赖吧。

    

    安装打包好的 apr-util:

yum localinstall /root/rpmbuild/RPMS/x86_64/apr-util-1.6.1-1.x86_64.rpm
yum localinstall /root/rpmbuild/RPMS/x86_64/apr-util-devel-1.6.1-1.x86_64.rpm

 

  打包安装 httpd

rpmbuild -tb httpd-2.4.39.tar.bz2

    打包前同样需要安装依赖

    

    安装依赖组件后,再次 rpmbuild,我遇到了这个问题:

  

    意思是说,检测到有模块被安装但没有打包,网上有3种解决办法,其中第二种方法我没有成功:

        (1)注释掉 /usr/lib/rpm/macros 中的这行,不进行该项检查。

        (2)将 /usr/lib/rpm/macros 中的 %_unpackaged_files_terminate_build 变量值改为0,即遇到该错误只警告。

        (3)将该模块也配置为打包到 rpm 中。解压 httpd 压缩包,编辑 httpd.spec,将 mod_socache_redis.so 配置到箭头处,再压缩成 tar.bz2。

tar jxf httpd-2.4.39.tar.bz2
cd httpd-2.4.39/
vim httpd.spec

        在 396 行插入一行:

 


    将修改后的文件夹打包回压缩格式

cd ..
// 将原压缩包重命名
mv httpd-2.4.39.tar.bz2 httpd-2.4.39.tar.bz2.bak
// 创建新压缩包
tar cjvf httpd-2.4.39.tar.bz2 httpd-2.4.39

    重新进行 rpm 打包

rpmbuild -tb httpd-2.4.39.tar.bz2

    安装打包好的 httpd

yum localinstall /root/rpmbuild/RPMS/x86_64/httpd-2.4.39-1.x86_64.rpm

  查看版本,启动

 

 

 

参考链接

Apache 官方文档:http://httpd.apache.org/docs/2.4/platform/rpm.html

apr 和 apr-util 不兼容:http://www.it1352.com/505589.html

http://www.itkeyword.com/doc/3844709432504125814/httpd-2-4-18-centos-7-rpm-build-file-not-found-mod-mpm-event-so

Apache rpm 国内镜像网站:https://mirrors.tuna.tsinghua.edu.cn/apache/

Epel rpm 国内镜像网站:https://mirrors.tuna.tsinghua.edu.cn/epel/

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值