rpm包制作脚本spec文件书写指南


spec 文件用于制作rpm包,包含了软件包的诸多信息,如软件包的名字、版本、类别、说明摘要、创建时要执行什么指令、安装时要执行什么操作、以及软件包所要包含的文件列表等等。示例如下:

Name: myprogram
Version: 1.0
Release: 1
Vendor: Jaun
Summary: My program 

License: GPL
URL: http://myprogram.com
Source0: myprogram-1.0.tar.gz
Group: Development/Tools
BuildRequires: gcc

%description
My program is a simple example program.

%prep
%setup -q

%build
./configure
make

%install
make install DESTDIR=%{buildroot}

%clean
rm -rf %{buildroot}

%files
%defattr(-,root,root)
/sbin/myprogram

%post
/sbin/ldconfig /sbin/myprogram

%preun
/sbin/ldconfig /sbin/myprogram

%postun
/sbin/ldconfig

%changelog

以下就各个参数分类介绍

一、软件包描述

1.1、Name:

软件包的名称,之后可以使用%{name}的方式进行引用,最终RPM软件包是用该名字与版本号,释出号及体系号来命名软件包的。

1.2、Version

软件包的版本号,之后可以使用%{version}的方式进行引用,仅当软件包比以前有较大改变时才增加版本号。

1.3、Release

实际发行序列号,表明打包的时间,次数等信息,之后可以使用%{release}的方式进行引用

1.4、Vendor

软件开发者的名字。

1.5、Summary

用一句话概括该软件包尽量多的信息

1.6、License/Copyright

软件包的发行许可证,也就是软件的授权方式,通常是GPL,其他常见的有:GPL(自由软件),BSD,MIT,Public Domain(公共域),Distributable(贡献),commercial(商业),Share(共享)等。

1.7、URL

发布者的网站,博客,邮箱等信息可放在这里

1.8、Source

源代码包,通常使用Source0Source1…,之后也可以使用%{source0}%{source1}的方式进行引用.

1.9、Group

软件分组,建议使用标准分组,常见分组如下:

分组解释
Amusements/Games(娱乐/游戏)
Amusements/Graphics(娱乐/图形)
Applications/Archiving(应用/文档)
Applications/Communications(应用/通讯)
Applications/Databases(应用/数据库)
Applications/Editors(应用/编辑器)
Applications/Emulators(应用/仿真器)
Applications/Engineering(应用/工程)
Applications/File(应用/文件)
Applications/Internet(应用/因特网)
Applications/Multimedia(应用/多媒体)
Applications/Productivity(应用/产品)
Applications/Publishing(应用/印刷)
Applications/System(应用/系统)
Applications/Text(应用/文本)
Development/Debuggers(开发/调试器)
Development/Languages(开发/语言)
Development/Libraries(开发/函数库)
Development/System(开发/系统)
Development/Tools(开发/工具)
Documentation(文档)
System Environment/Base(系统环境/基础)
System Environment/Daemons(系统环境/守护)
System Environment/Kernel(系统环境/内核)
System Environment/Libraries(系统环境/函数库)
System Environment/Shells(系统环境/接口)
User Interface/Desktops(用户界面/桌面)
User Interface/X(用户界面/X窗口)
User Interface/X Hardware Support(用户界面/X硬件支持)

1.10、Patch

补丁源码包路径,可使用Patch0,Patch1…,之后也可以使用%{patch0}%{patch1}的方式进行引用

1.11、BuildRoot

安装或编绎时的根目录,在包生成的时候,如果不指定此目录作为虚拟根目录,在安装阶段,就会有系统根目录作为安装根目录

1.12、Requires

当前生成的RPM包,需要依赖的软件包名称,用>=或<=表示大于等于或小于等于指定的版本,符号两边用空格隔开,不同的软件包也用空格隔开

1.13、Packager

打包人信息

1.14、%description

软件的详细说明,可写在多个行上

1.15、BuildArch

指编译的目标处理器架构,noarch标识不指定,但通常都是以/usr/lib/rpm/marcros中的内容为默认值。

二、软件包生成各阶段操作

2.1、%prep

预备编绎阶段,可以使用脚本,将源代码包解压,有补丁的话,也将补丁进行处理,然后生成编绎配置信息(大部分软件会在此阶段执行configure脚本进行编绎检查);除了可以执行RPM所定义的宏命令(以%开头)以外,还可以执行SHELL命令,命令可以有很多行,如我们常写的tar解包命令。

2.2、%build

编绎阶段,所要执行的命令为生成软件包服务,大部分软件都会在此阶段执行make操作

2.3、%install

安装阶段,大部分软件都会在此阶段执行make install操作

2.4、%clean

清理阶段,安装完成后,将清理上述各个阶段生成的临时文件

2.5、%check

rpm软件包的测试。

三、包的应用性脚本

3.1、%pre

安装执行前脚本,即RPM包被安装前,先执行此部分脚本,如创建指定账号等

3.2、%post

安装执行后脚本,即RPM包被成功安装后,会继续执行此部分脚本,如设置开机启动,启动服务等

3.3、%preun

卸载执行前脚本,即RPM包被卸载前,先执行此部分脚本,如停止服务,取消开机启动等

3.4、%postun

卸载执行后脚本,即RPM包被成功卸载后,会继续执行此部分脚本,如删除指定账号等

四、包配置信息

4.1、%files

打包文件列表,需要被放入RPM包中的文件,在此列出,可为目录

4.2、%changelog

变更日记,可以标明本次打包需要提示的信息

4.3、%doc

表示这是文档文件,因此如果安装时使用–excludedocs将不会安装此类文件。

4.4、%dir

表示将dir目录路径下的内容打进rpm软件包里。

4.5、%config(noreplace)

该配置文件不会覆盖已经存在文件(RPM包中文件会以.rpmnew存在于系统,卸载时系统中的该配置文件会以.rpmsave保存下来,如果没有这个选项,安装时RPM包中文件会以.rpmorig存在于系统)覆盖已经存在文件(没被修改),创建新的文件加上扩展后缀.rpmnew(被修改)。

4.6、%attr

控制文件权限

参考文档

1、https://betheme.net/a/12582767.html?action=onClick

2、http://www.someapp.cn/article/14.html

3、http://blog.chinaunix.net/uid-30242191-id-5777389.html