概述
spec文件是制作rpm包的脚本文件,详细定义rpm包的信息、包含内容和安装位置,如软件包的名字、版本、类别、说明摘要、创建时要执行什么指令、安装时要执行什么操作、以及软件包所要包含的文件列表等等。
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
一、软件包描述
spec文件的最前部分通常为包描述内容,可以包含如下信息:
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中的内容为默认值。
二、软件包生成阶段脚本
包生成阶段定义安装包制作阶段的详细工作内容,包括准备、编译、打包、清理、检查等。
这个过程的代码在运行在制作阶段,也就是在打包机上运行。当你运行rpmbuild命令时按顺序执行如下阶段阶段。
2.1、%prep
预备编绎阶段,可以使用脚本,将源代码包解压,有补丁的话,也将补丁进行处理,然后生成编绎配置信息(大部分软件会在此阶段执行configure脚本进行编绎检查);除了可以执行RPM所定义的宏命令(以%开头)以外,还可以执行SHELL命令,命令可以有很多行,如我们常写的tar解包命令。
2.2、%build
编绎阶段,所要执行的命令为生成软件包服务,大部分软件都会在此阶段执行make操作
2.3、%install
安装阶段,大部分软件都会在此阶段执行make install操作
2.4、%clean
清理阶段,安装完成后,将清理上述各个阶段生成的临时文件
2.5、%check rpm
软件包的测试。
三、包的安装阶段脚本
包的安装阶段脚本在执行rpm包安装过程中运行,运行在目标机器上,当你键入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 控制文件权限
五、制作和安装命令
制作
rpmbuild -bb xxx.spec
查看详细帮助:
rpmbuild --help
安装
rpm -ivh xxx.rpm
查询包内容
rpm -qlp xxx.rpm
查询已安装的包
rpm -qa
标签:指南,脚本,rpm,RPM,Applications,软件包,安装,spec
From: https://blog.51cto.com/livestreaming/8303684