8.5.4 spec文件简介
从作用上来说,spec文件类似于源码编译时的Makefile文件,是重建rpm包的核心文件。spec文件有一定的模板格式,一般来说分为preamle(序言)、prep(前期准备)、build(编译)、install(安装)、clean(清理)、files(文件列表)、changelog(修改日志)这几个部分。
1.preamle(序言)
基础信息部分,主要包含软件包的功能描述、版本、版权、作者、制作时间等内容,比如说我们可以用rpm命令查询到之前创建的rsh-0.17-40.i386.rpm软件包的相关基础信息。
- [root@localhost i386]# rpm -qpi rsh-0.17-40.i386.rpm
- Name : rsh Relocations: (not relocatable)
- Version : 0.17 Vendor: (none)
- Release : 40 Build Date: Tue 26 Feb 2013 08:45:48 AM CST
- Install Date: (not installed) Build Host: localhost.localdomain
- Group : Applications/Internet Source RPM: rsh-0.17-40.src.rpm
- Size : 130504 License: BSD
- Signature : (none)
- Summary : Clients for remote access commands (rsh, rlogin, rcp).
- Description :
- The rsh package contains a set of programs which allow users to run
- commands on remote machines, login to other machines and copy files
- between machines (rsh, rlogin and rcp). All three of these commands
- use rhosts style authentication. This package contains the clients
- needed for all of these services.
- The rsh package should be installed to enable remote access to other
- machines.
这些信息都是可以在spec文件中定义的,在spec文件中可使用特定的“关键字”来定义,常用的关键字如下:
·Summary:包的简介。
·Name:包的名称。
·Version:软件版本。
·Release:发布序列号。
·License:软件授权,常见的有GPL、BSD、MIT、Distributable、Commercial、Share等。
·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硬件支持)
·BuildRoot:编译使用的目录。
·BuildPrereq:编译前需要满足的包。
·BuildRequires:编译时需要安装的包。
·Source:源码包。
·Patch:补丁文件。
·Description:更详细的描述。
·Requires:安装该包时的依赖包。
2.prep(前期准备)
prep是预处理部分,以%prep开头,用于正式编译前的准备工作,包括删除老的源码、解压源代码(%setup)、对源码应用补丁(%patch)等操作。
%setup部分的写法一般为:
- %setup -n %{Name}-%{Version} #
- 把源码包解压到新创建的目录中
通常是从/usr/src/redhat/SOURCES里的包解压到/usr/src/redhat/BUILD/%{Name}-%{Version}中。注意其中的%{Name}-%{Version}是在preamle中定义的。
%patch用于对源码包打补丁,通常补丁都会与源码包在一起,一般写法为:
- %patch -p1 #
- 使用preamle
- 中定义的Patch
- 补丁,-p1
- 是忽略patch
- 的第一层目录
3.build(编译)
build是正式开始编译的部分,以%build开头,相当于源码编译时的configure(配置)、make(编译)的工作,所以这部分一般由configure以及多个build命令组成。
4.install(安装)
install用于完成实际的安装过程,以%install开头,相当于源码编译时的make install,其中也会包括一些Shell的文件操作命令,包括make、cp、install、rm、mkdir等,还能定义安装该软件时需要运行的脚本,同时还能控制该脚本运行的时间(安装包之前还是之后,移除包之前还是之后)。
5.clean(清理)
clean主要适用于安装完成后的清理工作,以%clean开头,用于删除编译过程中产生的临时文件等。一般这里只需要简单地使用rm命令即可,如下所示:
- rm -rf $RPM_BUILD_ROOT #RPM_BUILD_ROOT
- 是preamle
- 中定义的BuildRoot
6.files(文件列表)
files部分用于指定实际安装的文件放置的目录和相关的权限,以%files开头。这里所指定的所有文件都将会被打包到最后生成的rpm包中,这些指定的文件分为三类,分别是说明文件(README或是changelog文件)、配置文件、可执行文件,如果在%files中不列出具体的文件,则默认包含所有文件。
在%files中,还可以使用以下字段:
·%exclude列出不被打包到rpm中的文件。
·%defattr(-,root,root)指定文件的属性,分别是mode、owner、group,-表示默认值,对文本文件是0644,可执行文件是0755。
·%attr(permissions,user,group)覆盖指定文件的权限。
·%doc指明说明文件,rpm在安装时会将这类文件复制到/usr/share/doc/%{Name}-%{Version}中。
·%config指明文件属于配置文件,在使用rpm升级软件时,会避免用rpm打包的默认配置文件覆盖原配置文件。
7.changelog(修改日志)
changelog主要是注明该软件包的开发记录,使用%changelog开头,主要作用是让开发人员了解该软件开发过程以及历经的功能补全和bug修复。