2.6 RPM打包

RPM文件有两类:源RPM(SRPM)和二进制RPM。SRPM中的有效负载是SPEC文件(描述如何构建二进制RPM)。

查看SRPM的目录结构,如图2-15所示。

图2-15 查看SRPM目录结构

图2-15中SRPM的5个目录的作用如表2-1所示。

表2-1 SRPM目录的作用

在介绍了SRPM的目录结构后,我们详细介绍SPEC的作用。

2.6.1 什么是SPEC文件

SPEC文件是rpmbuild程序用于实际构建RPM的方法。SPEC文件所包含字段的具体说明如表2-2所示。

表2-2 SPEC文件字段的含义

在运维过程中,我们经常会看到一个RPM包的Name、Version、Release。这几个字段就是在SPEC文件中定义的。例如,我们要查询Python RPM包版本,如图2-16所示。

图2-16 查看Python版本

在图2-16的输出中,python是Name,2.7.5是Version,58.el7是Release,x86_64是BuildArch。这些信息都是在SPEC中定义的。

接下来,我们介绍RPM SPEC文件中使用的语法,如表2-3所示。

表2-3 SPEC中使用的语法

在介绍了SEPC的格式和语法后,接下来我们介绍如何书写SPEC并构建RPM包。

2.6.2 书写SPEC文件

在打包新软件时,可以通过rpmdev-newspec工具创建一个新的SPEC文件,然后据此进行修改。

首先,我们通过三个源码文件生成三个SPEC,如图2-17所示。

图2-17 生成SPEC文件

SPEC已经生成,如图2-18所示。

图2-18 查看生成的SPEC文件

接下来我们为三个SRPM编写SPEC,描述如表2-4所示。

表2-4 三个SRPM的SPEC

由于三个SPEC修改的思路类似,因此只以bello为例介绍SPEC修改步骤。生成的bello.spec文件内容如下所示。


# cat bello.spec
Name:        bello
Version:
Release:      1%{?dist}
Summary:

License:
URL:
Source0:

BuildRequires:
Requires:

%description

%prep
%setup -q

%build
%configure
make %{?_smp_mflags}

%install
rm -rf $RPM_BUILD_ROOT
%make_install

%files
%doc

%changelog

修改后的bello.spec内容如下所示。


[root@rpmlab-d710 ~]# cat ~/rpmbuild/SPECS/bello.spec
Name:           bello
Version:        0.1
Release:        1%{?dist}
Summary:        Hello World example implemented in bash script

License:        GPLv3+
URL:            https://www.example.com/%{name}
Source0:       https://www.example.com/%{name}/releases/%{name}-%{version}.tar.gz

Requires:       bash

BuildArch:      noarch

%description
The long-tail description for our Hello World Example implemented in
bash script of DavidWei.

%prep
%setup -q

%build

%install

mkdir -p %{buildroot}%{_bindir}

install -m 0755 %{name} %{buildroot}%{_bindir}/%{name}

%files
%license LICENSE
%{_bindir}/%{name}

%changelog
* Tue Jun 29 2019 DavidWei - 0.1-1
- First bello package
- Example second item in the changelog for version-release 0.1-1

在修改完SEPC后,我们就可以根据源代码和SPEC文件构建软件包了。