- 云原生应用构建:基于OpenShift
- 魏新宇 王洪涛 陈耿
- 656字
- 2020-08-27 05:48:08
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文件构建软件包了。