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

[size=large][align=center][b]如何将apache源码打成rpm安装包[/b][/align]

[b]一、简述[/b]
如果你对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.检验你所编绎的包是不是按你的要求生成
[b]二、配置RPM预编译环境[/b]
编绎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

[b]三、下载相关的软件包[/b]
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
[b]四.规划软件包的安装及相关配置[/b]
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小部份来进行编写,通过下面一个简单的例子来说明
[i]第一部份:定义相关变量,比如下语句定义了contentdir这个变量为的值[/i]为/usr/local/apache2/htdocs
%define contentdir /usr/local/apache2/htdocs
[i]第二部分:描述RPM包的一些基本信息(可通过关建字rpm spec 进行详细了解)[/i]
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.

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

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

[i]第五部份:安装编绎好的软件到临时目录(以%install开始)这个部份可以写脚本修改安装好的文件,比如可以把自己事件修改好的httpd.conf文件替换这个安装到临时目录中的文件。[/i]
%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

[i]第六部份:把安装到临时目录下地文件打包进RPM 以(%files 开始)[/i]
%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 文件如下 可在这里下载
[b]五、开始编绎并生成RPM包[/b]
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
[b]六、对生成的RPM 包进行验证[/b][/size]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值