您的位置:首页 > 产品设计 > 产品经理

rpm包的制作简单化

2013-10-09 17:31 302 查看
应生产环境中rpm编译需求,现记录下rpm包编译制作过程:

一、SRPM(Source rpm)包的制作rpm包的过程:

即没有编译过的原始文件,一般对应软件的官网上都有下载。

1.下载*.src.rpm包并安装,默认/usr/src/redhat/SPECS目录下会生成对应的.spec文件.

说明下/usr/src/redhat/...目录结构:

BUILD编译过程中有一些暂存资料都会放在这个目录中
RPMS编译成功之后,将打包的文件放在这个目录中,下有i386,i586,i686,noarch等目录....
SOURCES放置软件的原始文件如tar.gz包或配置文件
SPECS.spec编译文件
SRPMS类似RPMS,如果需生成src.rpm形式,会打包到此目录
2.编译.spec文件

3.运行rpmbuild -ba rpm-name.spec

执行完后产生的二进制RPM包会生成在RPMS目录的系统架构目录下.

注:32位的系统只能生成在i386下的32位包。无法生成64位软件包,这个经由同事实践。  

生成的包一样可以进行安装/卸载,如安装相同的包,可加上--force(强制替换)选项.

升级:rpm -Uvh --force rpm-name.rpm

二、tar.gz源码包制作rpm包的过程:

1.下载解压rpm-name.tar.gz对应软件包

2. 找到.spec文件编辑(有些软件不一定有spec文件,只能网上找对应spec模板或自己编写)

3.将源码包复制到/usr/src/redhat/SOURCES/... 原因看前面目录结构说明。

4.运行rpmbuild -ba rpm-name.spec

生成rpm文件/usr/src/redhat/RPMS/.../rpm-name.rpm

三、.spec文件的框架结构:主要是虚拟路径的位置和宏定义。

1.全局配置  包含软件基础信息。

2.%prep 预处理部分:

由一些参数组成一个shell脚本从SOURCE中解压源码和应用补丁到BULID目录准备编译。

3.%bulid 编译和准备软件包部分:

运行在上下目录中指定的源码目录,编译过程中调用脚本 .config在本地的目录(%configure中配置的可以通过运行rpm -eval %configure来查看它的配置)

4.%install部分(使用绝对路径)

用来做rpm安装所需的文件,这些打包的文件会复制到前面讲的BuildRoot目录树中,通常/var/tmp/...目录.

5.%clean 部分 

清理rpmbulid后的一些临时文件。

其中的%pre,%post 脚本运行在包安装前后的交互。

如安装前设置:

%pre
if [ $1 == 1 ]; then
%{_sbindir}/useradd -c "Nginx user" -s /bin/false -r -d %{nginx_home} %{nginx_user} 2>/dev/null || :
fi
安装前创建nginx用户并设置家目录.

%preun,%postun 脚本运行在包卸载前后的交互。

如卸载前设置:

%preun
if [ $1 = 0 ]; then
/sbin/service %{name} stop >/dev/null 2>&1
/sbin/chkconfig --del %{name}
fi
停止服务

6.%files部分 (使用相对路径)

任何打包的文件都需要在这个包的详细文件列表中,定义哪些文件/目录放入到rpm包中。注意虚拟目录进行,不可写绝对路径,以免系统文件的更改,应用宏或变量来表示相对路径。

7.%changlog部分

记录包修改记录。

rpm包内容的组成其实就是:tar.gz源码包,补丁包,.spec脚本文件. 最主要的是知道如何进行.spec文件的编译修改,如软件本身无.spec格式,可参考网上模板进行更改....
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: