关于制作rpm包spec文件使用说明

二维码
| Apr 22, 2019 | 原创

spec 文件是制作rpm的包的约定格式文件,了解该文件中常用字段以及主要事项,将使我们制作rpm包事半功倍,接下来将介绍该文件中常用字段,以及一些使用注意事项。

1. 不生成debug包

如果不想生成debug包,可以在文件中重写debug_package值。

%define debug_package %{nil}

2. Group 字段

Group:          Applications/System

linux中常用的Gourp值如下,请参考该文章: https://fedoraproject.org/wiki/RPMGroups

# 使用 rpm -qa --qf '%{group}\n' | sort -u 查看当前系统可以使用的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
User Interface/X Hardware Support

还有一个命令可以查看当前系统安装的包都属于哪些Group,以便参考借鉴:

rpm -qa --qf '%{group} %{name}\n' | sort -u

3. License 字段

license用来说明该软件的著作权类别,但该值需要提供其缩写格式,如:Apache License 2.0 ,需要提供简写格式ASL2,如果设置为:Apache Lisence 2.0 则不正确:

# License: Apache Lisence 2.0 为不正确方式
License:        ASL2

一份比较详尽的Good Lisence 列表请参考此处:https://fedoraproject.org/wiki/Licensing:Main?rd=Licensing#Good_Licenses

4. BuildRequires 和 Requires

这俩字段分别用来表示打包阶段和安装阶段所依赖的包,多个包可以使用空格或逗号分隔均可,也可以重复多行,如下:

# 单行空格
BuildRequires:  grpc-devel php-devel make gcc gcc-c++
Requires:       php

# 或多行表示, 单行体验更好
BuildRequires:  grpc-devel
BuildRequires:  php-devel

依赖包如果有具体版本要求,一定要注意包名和版本号范围之间的空格:

# Requires:       php>=5.5 错误方式

Requires:       php >= 5.5 # 正确方式,小心!

5. 尽量使用内置宏指令

如非必要,建议使用内置的宏指令来减少跨平台兼容性问题,如:

%_prefix            /usr
%_exec_prefix       %{_prefix}
%_bindir            %{_exec_prefix}/bin
%_sbindir           %{_exec_prefix}/sbin
%_libexecdir        %{_exec_prefix}/libexec
%_datadir           %{_prefix}/share
%_sysconfdir        %{_prefix}/etc
%_sharedstatedir    %{_prefix}/com
%_localstatedir     %{_prefix}/var
%_libdir            %{_exec_prefix}/lib
%_includedir        %{_prefix}/include
%_oldincludedir     /usr/include
%_infodir           %{_prefix}/info
%_mandir            %{_prefix}/man

使用%_bindir 比直接使用 /usr/bin 更好。关于更多宏指令,以及自定义相关,请参考:https://rpm.org/user_doc/macros.html

6. changelog 不能少

按照rpmlint工具检查来看,changelog 部分是能为空的,且每次的更新中需要携带版本标识:

* Sun Apr 21 2019 init PHP grpc extension <liangqi000@gmail.com>
- %{version}-%{release}