rpm包的制作简单化
2013-10-09 17:31
302 查看
应生产环境中rpm编译需求,现记录下rpm包编译制作过程:
一、SRPM(Source rpm)包的制作rpm包的过程:
即没有编译过的原始文件,一般对应软件的官网上都有下载。
1.下载*.src.rpm包并安装,默认/usr/src/redhat/SPECS目录下会生成对应的.spec文件.
说明下/usr/src/redhat/...目录结构:
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格式,可参考网上模板进行更改....
一、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形式,会打包到此目录 |
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格式,可参考网上模板进行更改....