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
源代码包,通常使用Source0
,Source1
…,之后也可以使用%{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