当前位置: 首页 > 科技观察

如何编写RPMspec文件

时间:2023-03-15 01:39:59 科技观察

在上一篇关于RPM包构建的文章中,您了解到sourceRPM包括软件的源代码以及spec文件。本文深入研究了规范文件,其中包含有关如何构建RPM的说明。同样,本文以fpaste为例。了解源代码在开始编写规范文件之前,您需要对要打包的软件有一些了解。在这里,您正在使用fpaste,一个非常简单的软件。它是用Python编写的,是一个单文件脚本。当它发布新版本时,可以在Pagure上找到它:https://pagure.io/releases/fpaste/fpaste-0.3.9.2.tar.gz。如该存档中所示,当前版本为0.3.9.2。下载它,以便您可以查看该存档中的内容:$wgethttps://pagure.io/releases/fpaste/fpaste-0.3.9.2.tar.gz$tar-tvffpaste-0.3.9.2.tar.gzdrwxrwxr-xroot/root02018-07-2502:58fpaste-0.3.9.2/-rw-rw-r--root/root252018-07-2502:58fpaste-0.3.9.2/.gitignore-rw-rw-r--root/root36722018-07-2502:58fpaste-0.3.9.2/CHANGELOG-rw-rw-r--root/root351472018-07-2502:58fpaste-0.3.9.2/复制-rw-rw-r--root/root4442018-07-2502:58fpaste-0.3.9.2/Makefile-rw-rw-r--root/root16562018-07-2502:58fpaste-0.3。9.2/README.rst-rw-rw-r--root/root6582018-07-2502:58fpaste-0.3.9.2/TODOdrwxrwxr-xroot/root02018-07-2502:58fpaste-0.3。9.2/docs/drwxrwxr-xroot/root02018-07-2502:58fpaste-0.3.9.2/docs/man/drwxrwxr-xroot/root02018-07-2502:58fpaste-0.3。9.2/docs/man/en/-rw-rw-r--root/root38672018-07-2502:58fpaste-0.3.9.2/docs/man/en/fpaste.1-rwxrwxr-xroot/root248842018-07-2502:58fpaste-0.3.9.2/fpastelrwxrwxrwxroot/root02018-07-2502:58fpaste-0.3.9.2/fpaste.py->fpaste你要安装的文件是:fpaste.py:应该安装到/usr/bin/docs/man/en/fpaste.1:手册,应该放在/usr/share/man/man1/。COPYING:许可证文本,应放在/usr/share/license/fpaste/中。README.rst,TODO:其他文档放在/usr/share/doc/fpaste/下。这些文件的安装位置取决于文件系统层次结构标准(FHS)。要了解更多信息,您可以在这里阅读:http://www.pathname.com/fhs/或查看Fedora系统的手册页:$manhier第1部分:构建什么?现在我们知道源文件中有哪些文件,以及它们的去向,让我们看看spec文件。您可以在此处查看完整文件:https://src.fedoraproject.org/rpms/fpaste/blob/master/f/fpaste.spec。这是规范文件的第一部分:名称:fpasteVersion:0.3.9.2Release:3%{?dist}Summary:用于将信息粘贴到便签实例上的简单工具BuildArch:noarchLicense:GPLv3+URL:https://pagure.io/fpasteSource0:https://pagure.io/releases/fpaste/fpaste-0.3.9.2.tar.gz要求:python3%description能够轻松地将文本粘贴到FedoraPastebinathttp://paste通常很有用。fedoraproject.org和这个简单的脚本将执行此操作并返回生成的URL,以便人们可以检查输出。这有望帮助那些由于某种原因无法使用X、远程工作或任何其他原因无法将某些内容粘贴到pastebinName、Version等中的人。称为标签,它们在RPM中定义。这意味着你不能随便写标签,RPM无法理解它们!需要注意的标签是:Source0:告诉RPM该软件的源代码存档所在的位置。Requires:列出软件的运行时依赖。RPM可以自动检测许多依赖项,但在某些情况下必须手动指定它们。运行时依赖项是系统上必须存在的功能(通常是包),该包才能工作。dnf安装这个包的时候就是这样检测是否需要拉取其他包的。BuildRequires:列出此软件的构建时依赖项。这些通常必须手动确定并添加到规范文件中。BuildArch:该软件是为这种计算机架构而构建的。如果省略此标记,则将为所有支持的体系结构构建软件。noarch的值意味着该软件是独立于体系结构的(例如fpaste,它完全用Python编写)。本节提供有关fpaste的一般信息:它是什么、作为RPM制作的版本、它的许可证等。如果您安装了fpaste并查看其元数据,您可以看到RPM中包含的以下信息:$sudodnfinstallfpaste$rpm-qifpasteName:fpasteVersion:0.3.9.2Release:2.fc30...RPM自动添加一些其他标签来表示它知道什么。至此,我们已经了解了我们正在为其构建RPM的软件的一般信息。接下来,我们开始告诉RPM要做什么。第二部分:准备构建spec文件的下一部分是准备部分,由%prep表示:%prep%autosetup对于fpaste,这里唯一的命令是%autosetup。这只是将tar存档提取到一个新文件夹中,并为构建阶段的下一部分做准备。您可以在此处执行更多操作,例如应用补丁、为不同目的修改文件等。如果您查看过Python的源RPM的内容,您会在那里看到许多补丁。这些都将在本节中应用。一般来说,spec文件中以%为前缀的所有内容都是由RPM以特殊方式解释的宏或标签。这些通常包含在花括号中,例如%{example}。第三部分:构建软件下一部分是构建软件的位置,用%build表示。现在,由于fpaste是一个简单的纯Python脚本,因此不需要构建。所以,这里是:%build#nothingrequired不过,通常情况下,您会在这里使用构建命令,例如:configure;make构建部分通常是spec文件中最难的部分,因为那是从源代码构建软件的地方。这需要您知道该工具正在使用哪个构建系统,它可能是众多系统之一:Autotools、CMake、Meson、Setuptools(用于Python)等。每个都有自己的命令和语法风格。您需要充分理解这些才能正确构建软件。第四部分:安装文件软件构建完成后,需要在%install部分进行安装:%installmkdir-p%{buildroot}%{_bindir}makeinstallBINDIR=%{buildroot}%{_bindir}MANDIR=%{buildroot}%{_mandir}构建RPM时,RPM不会修改您的系统文件。在正常运行的系统上添加、删除或修改文件风险太大。如果事情不顺利怎么办?因此,RPM创建了一个专门构建的文件系统并在其中工作。这称为构建根。因此,在buildroot中,我们创建由宏%{_bindir}表示的/usr/bin目录,然后使用提供的Makefile将文件安装到其中。此时,我们已经在我们专门构建的buildroot中安装了一个fpaste构建。第5部分:列出所有要包含在RPM中的文件spec文件之后的部分是文件部分:%files。在这里我们告诉RPM哪些文件要包含在从这个spec文件创建的存档中。fpaste的文件部分非常简单:%files%{_bindir}/%{name}%docREADME.rstTODO%{_mandir}/man1/%{name}.1.gz%licenseCOPYING注意这里我们不没有指定buildroot。所有这些路径都是相对路径。%doc和%license命令做的更多一些,它们创建所需的文件夹并记住文件必须放在那里。RPM很聪明。例如,如果您在%install部分安装了文件但未列出,它会提醒您。第VI部分:在变更日志中记录所有变更Fedora是一个基于社区的项目。包由许多贡献者维护或共同维护。因此,一定不要被对包所做的更改所迷惑。为确保这一点,规范文件中包含的最后一部分是变更日志%changelog:%changelog*ThuJul252019FedoraReleaseEngineering<...>-0.3.9.2-3-Rebuiltforhttps://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild*2019年1月31日星期四Fedora发布工程<...>-0.3.9.2-2-为https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild*2018年7月24日星期二AnkurSinha-0.3.9.2-1-重建更新至0.3.9.2*2018年7月13日星期五Fedora发布工程<...>-0.3.9.1-4-为https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild*2018年2月7日星期三Fedora发布工程<..>-0.3.9.1-3-为https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild*2017年9月10日星期日VasiliyN.Glazov<...>-0.3.9.1-2-清理规范*2017年9月8日星期五AnkurSinha-0.3.9.1-1-更新到最新版本-修复了rhbz1489605.......规范文件的每个更改都必须有一个更改日志条目。正如您在这里看到的,虽然我作为维护者更新了规范文件,但其他人也进行了更改。清楚地记录更改有助于每个人了解规范文件的当前状态。对于系统上安装的所有包,您可以使用rpm查看它们的更改日志:$rpm-q--changelogfpaste构建RPM现在我们准备构建RPM包。如果您想继续执行以下命令,请确保按照上一篇文章中的步骤设置您的系统以构建RPM。我们将fpaste规范文件放在~/rpmbuild/SPECS中,将源代码存档放在~/rpmbuild/SOURCES/中,现在我们可以创建源RPM:$cd~/rpmbuild/SPECS$wgethttps://src.fedoraproject。org/rpms/fpaste/raw/master/f/fpaste.spec$cd~/rpmbuild/SOURCES$wgethttps://pagure.io/fpaste/archive/0.3.9.2/fpaste-0.3.9.2。tar.gz$cd~/rpmbuild/SOURCES$rpmbuild-bsfpaste.specWrote:/home/asinha/rpmbuild/SRPMS/fpaste-0.3.9.2-3.fc30.src.rpm让我们看看结果:$ls~/rpmbuild/SRPMS/fpaste*/home/asinha/rpmbuild/SRPMS/fpaste-0.3.9.2-3.fc30.src.rpm$rpm-qpl~/rpmbuild/SRPMS/fpaste-0.3.9.2-3.fc30.src.rpmfpaste-0.3.9.2.tar.gzfpaste.spec我们看到源RPM已构建。让我们构建源RPM和二进制RPM:$cd~/rpmbuild/SPECS$rpmbuild-bafpaste.spec...RPM将向您显示完整的构建输出,我们之前看到的每个部分在.这个“构建日志”非常重要。当构建没有按预期工作时,我们的打包人员会花费大量时间遍历它们以跟踪完整的构建路径以查看出了什么问题。就是这样!准备安装的RPM应该位于:$ls~/rpmbuild/RPMS/noarch/fpaste-0.3.9.2-3.fc30.noarch.rpm规格文件。这绝不是一份详尽无遗的文件。事实上,它根本不是文档。它只是试图解释它是如何在幕后工作的。快速回顾一下:有两种类型的RPM:源RPM和二进制RPM。二进制RPM包含要安装以使用该软件的文件。源RPM包含构建二进制RPM所需的信息:完整的源代码,以及规范文件中关于如何构建RPM的说明。spec文件由几个部分组成,每个部分都有自己的用途。在这里,我们在已安装的Fedora系统上本地构建了RPM。虽然这是一个基本过程,但我们从存储库中获取的RPM构建在专用服务器上,具有严格的配置和方法以确保正确性和安全性。这个Fedora打包过程将在以后的文章中讨论。您想开始构建软件包并帮助Fedora社区维护我们提供的大量软件吗?您可以在此处开始加入包集合维护者。如果您有任何问题,请发帖到FedoraDevelopers邮件列表,我们很乐意提供帮助!参考这里是构建RPM的一些有用参考:https://fedoraproject.org/wiki/How_to_create_an_RPM_packagehttps://docs.fedoraproject.org/en-US/quick-docs/create-hello-world-rpm/https://docs.fedoraproject.org/en-US/packaging-guidelines/https://rpm.org/documentation.html