设为首页 收藏本站
查看: 625|回复: 0

[经验分享] [【转】分享]如何将apache源码打成rpm安装包

[复制链接]

尚未签到

发表于 2017-1-10 06:52:08 | 显示全部楼层 |阅读模式
如何将apache源码打成rpm安装包


一、简述
如果你对RPM没有什么好印像的话,我相信原因就是它的过复杂的包依赖关系。
但如果自己动手来编绎RPM包的话,这个问题你可以很痛愉快的进行控制
如果你有一个很好的软件版本控制系统的话,你完全可以把你所有要用的软件包都编绎成RPM, 这样可以提高一些常规软件部署效率,比如apache mysql这样的软件。
本次目标:在新装的一台centos 5.4 x86_64位系统上生成根据apache的源码包生成个apache的rpm文件,当然你也可以生成多个文件(这个由spece 的%files 关建字控制)
       httpd-2.2.14-mkrss.x86_64.rpm
       httpd-manual-2.2.14-mkrss.x86_64.rpm
       mod_ssl-2.2.14-mkrss.x86_64.rpm
难点:稍微要注意的就是编写spec 文件,如果你愿意可以自己来写,如果不愿意思,网上也有很多直接生成SPEC文件的工具,(关于工具本例不做研究)
如果想自己写却又不知道如何下手,可以从src.rpm包里获得相应的spec文件然后进行改,也是一个不错的切入点。
操作过程
   要从一个普通的机器上,成功编绎一个RPM包,基本上有以下过程
      1.配置这台机器为RPM预编译环境
      2.下载相关的软件包
      3.规划软件包的安装及相关配置
      4.动手进编写spec文件
      5.开始编绎
      6.检验你所编绎的包是不是按你的要求生成
二、配置RPM预编译环境
编绎RPM 实际上就是把源码包进行编绎安装后,再把这些安装好的软件进行打包的一个过程.所以基本上所有编绎源码所需要的和所依赖的软件包这里都需要, 然后另外再安装一套RPM 打包工具。可以直接通过YUM 进行安装
yum groupinstall  “Development Libraries” “Development Tools”
通过:rpm -q   rpm-build  rpm 如果可以看到已安装以下两个软件,基本上rpm预编译环就配置好了。
rpm-build-4.4.2.3-18.el5
rpm-4.4.2.3-18.el5
which rpmbuild
    /usr/bin/rpmbuild

三、下载相关的软件包
  1.下载httpd
      http://archive.apache.org/dist/httpd/httpd-2.2.14.tar.gz(官网最新版httpd-2.2.15.tar.gz)
  2.下载官方补丁
     当然如果你还有其它的补丁可以一并下载回来。
     http://archive.apache.org/dist/httpd/patches/apply_to_2.2.14/CVE-2009-3555-2.2.patch
     http://archive.apache.org/dist/httpd/patches/apply_to_2.2.14/CVE-2010-0425.patch
  3.官方提供的最新版src.rpm
      http://apache.freelamp.com/httpd/binaries/rpm/SRPMS/httpd-2.2.3-1.src.rpm
四.规划软件包的安装及相关配置
1、第一步根据自己的需要或者喜欢来确定编绎参数
如本例中的的APACHE 是将会在后的使用中添加php模块,所以编绎是必需要加–enable-so参数,最终本例中编绎时的参数如下:
./configure -C \
        --prefix=/usr/local/apache2 \
        --enable-static-support \
        --enable-static-htpasswd \
        --enable-static-htdigest \
        --enable-static-rotatelogs \
        --enable-static-logresolve \
        --enable-static-ab \
        --enable-static-checkgid \
        --enable-dir \
        --enable-status \
        --enable-so \
        --enable-env \
        --enable-mime \
        --enable-cgi \
        --enable-deflate \
        --enable-rewrite \
        --enable-setenvif \
        --enable-distcache \
        --enable-proxy \
        --enable-cache --enable-mem-cache \
        --enable-file-cache --enable-disk-cache \
        --enable-mods-shared="authz-host log-config ssl proxy proxy-connect \
                        proxy-http proxy-ftp alias userdir mime asis \
                        negotiation actions authn_file authn_default \
                        authz_groupfile authz_user authz_default auth_basic \
                        autoindex include filter env setenvi dav dav-fs "\
2.把所有的补丁文件及源码包放到/usr/src/redhat/SOURCE ,所有相关的文件,比如以下事先经过配置的文件都需要放入。
httpd.init  httpd.conf  httpd-autoindex.conf   httpd-default.conf
httpd-info.conf    httpd-mpm   httpd-vhosts.conf
4.动手进编写spec文件
spec 文件是以一种混合了宏语言、shell 命令以及描述文本的方式书写的。在 spec 文件中,数字符号 (#) 用来表示注释,与绝大多数其他 Unix 配置文件中是一样的,spec 文件基本上可以分成6小部份来进行编写,通过下面一个简单的例子来说明
第一部份:定义相关变量,比如下语句定义了contentdir这个变量为的值为/usr/local/apache2/htdocs
%define contentdir /usr/local/apache2/htdocs
第二部分:描述RPM包的一些基本信息(可通过关建字rpm spec 进行详细了解)
Summary: Apache HTTP Server
Name: httpd
Version: 2.2.14
Release: mkrss%{?dist}
URL: http://httpd.apache.org/
Source0: http://www.apache.org/dist/httpd/httpd-%{version}.tar.gz
License: Apache Software License
Group: System Environment/Daemons
BuildRoot: %{_tmppath}/%{name}-root
Provides: httpd-mmn = %{mmn}
通过Souce和patch加编号列出你需要添加进RPM里的一些文件及需要打的补丁
span style="color: #ff0000;">Source1: httpd-vhosts.conf
Source2: httpd.conf
Patch20: httpd-2.2.14-release.patch

%description #包描述
The Apache HTTP Server is a powerful, efficient, and extensible
web server.

第三部份:解压软件包打补丁(以%prep开始)
%prep
%setup -q
%patch21 -p1 -b .xfsz

第四部份:开始进行编绎过程以(%build开始)
%build
./configure -C \
--prefix=/usr/local/apache2 \
make

第五部份:安装编绎好的软件到临时目录(以%install开始)这个部份可以写脚本修改安装好的文件,比如可以把自己事件修改好的httpd.conf文件替换这个安装到临时目录中的文件。
%install
rm -rf $RPM_BUILD_ROOT
make DESTDIR=$RPM_BUILD_ROOT install

/usr/sbin/useradd -c "daemon" -u 48 \
-s /sbin/nologin -r -d %{contentdir} daemon 2> /dev/null || :

%clean
rm -rf $RPM_BUILD_ROOT

第六部份:把安装到临时目录下地文件打包进RPM 以(%files 开始)
%files
%dir %{prefix}/*  (把安装到临时目录下的所有文件打包)

%changelog
关于spec 文件的相关参考资料:
  http://www.chinalinuxpub.com/doc/howto/RPM-HOWTO-6.html  http://www.redhat.com/docs/books/max-rpm/max-rpm-html.tar.bz2
最终本人的httpd.spec 文件如下 可在这里下载
五、开始编绎并生成RPM包
  1、rpmbuild简单使用,(可用man rpmbuid 进行详细了解)
   -bl        verify %files section from <specfile>
               *检查<specfile>文件的%files段
   -ba       build source and binary packages from <specfile>
               *建立源码和二进制包
   -bb       build binary package only from <specfile>
               *只建立二进制包
   -bs       build source package only from <specfile>
               *只建立源码包
2、执行rpmbuild -ba httpd.spec 文件,顺例完成的话会在/usr/src/redhat/RPMX/x86_64 下生成
       httpd-2.2.14-mkrss.x86_64.rpm, httpd-manual-2.2.14-mkrss.x86_64.rpm,mod_ssl-2.2.14-mkrss.x86_64.rpm
六、对生成的RPM 包进行验证

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-326158-1-1.html 上篇帖子: 议Apache+Tomcat 负载均衡及Session绑定的实现 下篇帖子: (转)五种开源协议-BSD,Apache,GPL,LGPL,MIT
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表