广告
返回顶部
首页 > 资讯 > 精选 >怎么编写RPM的spec文件
  • 795
分享到

怎么编写RPM的spec文件

2023-06-27 18:06:21 795人浏览 八月长安
摘要

这篇文章将为大家详细讲解有关怎么编写RPM的spec文件,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。通常,供linux使用的源代码包还提供一个名为 { 软件名称 }.spec 的文件,即spec文件。如

这篇文章将为大家详细讲解有关怎么编写RPM的spec文件,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

通常,供linux使用的源代码包还提供一个名为 { 软件名称 }.spec 的文件,即spec文件。如果提供spec文件,则该源代码还可以直接编译成RPM包。

怎么编写RPM的spec文件

了解源代码

在开始编写 spec 文件之前,你需要对要打包的软件有所了解。在这里,你正在研究 fpaste,这是一个非常简单的软件。它是用 python 编写的,并且是一个单文件脚本。当它发布新版本时,可在 Pagure 上找到:https://pagure.io/releases/fpaste/fpaste-0.3.9.2.tar.gz。

如该档案文件所示,当前版本为 0.3.9.2。下载它,以便你查看该档案文件中的内容:

$ wget Https://pagure.io/releases/fpaste/fpaste-0.3.9.2.tar.gz$ tar -tvf fpaste-0.3.9.2.tar.gzdrwxrwxr-x root/root         0 2018-07-25 02:58 fpaste-0.3.9.2/-rw-rw-r-- root/root        25 2018-07-25 02:58 fpaste-0.3.9.2/.gitignore-rw-rw-r-- root/root      3672 2018-07-25 02:58 fpaste-0.3.9.2/CHANGELOG-rw-rw-r-- root/root     35147 2018-07-25 02:58 fpaste-0.3.9.2/COPYING-rw-rw-r-- root/root       444 2018-07-25 02:58 fpaste-0.3.9.2/Makefile-rw-rw-r-- root/root      1656 2018-07-25 02:58 fpaste-0.3.9.2/README.rst-rw-rw-r-- root/root       658 2018-07-25 02:58 fpaste-0.3.9.2/TODOdrwxrwxr-x root/root         0 2018-07-25 02:58 fpaste-0.3.9.2/docs/drwxrwxr-x root/root         0 2018-07-25 02:58 fpaste-0.3.9.2/docs/man/drwxrwxr-x root/root         0 2018-07-25 02:58 fpaste-0.3.9.2/docs/man/en/-rw-rw-r-- root/root      3867 2018-07-25 02:58 fpaste-0.3.9.2/docs/man/en/fpaste.1-rwxrwxr-x root/root     24884 2018-07-25 02:58 fpaste-0.3.9.2/fpastelrwxrwxrwx root/root         0 2018-07-25 02:58 fpaste-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 系统的手册页:

$ man hier

第一部分:要构建什么?

现在我们知道了源文件中有哪些文件,以及它们要存放的位置,让我们看一下 spec 文件。你可以在此处查看这个完整的文件:https://src.fedoraproject.org/rpms/fpaste/blob/master/f/fpaste.spec。

这是 spec 文件的第一部分:

Name:   fpasteVersion:  0.3.9.2Release:  3%{?dist}Summary:  A simple tool for pasting info onto sticky notes instancesBuildArch:  noarchLicense:  GPLv3+URL:    https://pagure.io/fpasteSource0:  https://pagure.io/releases/fpaste/fpaste-0.3.9.2.tar.gzRequires:    python3%descriptionIt is often useful to be able to easily paste text to the FedoraPastebin at http://paste.fedoraproject.org and this simple scriptwill do that and return the resulting URL so that people mayexamine the output. This can hopefully help folks who are forsome reason stuck without X, working remotely, or any otherreason they may be unable to paste something into the pastebin

Name、Version 等称为标签,它们定义在 RPM 中。这意味着你不能只是随意写点标签,RPM 无法理解它们!需要注意的标签是:

Source0:告诉 RPM 该软件的源代码档案文件所在的位置。 Requires:列出软件的运行时依赖项。RPM 可以自动检测很多依赖项,但是在某些情况下,必须手动指明它们。运行时依赖项是系统上必须具有的功能(通常是软件包),才能使该软件包起作用。这是 dnf 在安装此软件包时检测是否需要拉取其他软件包的方式。 BuildRequires:列出了此软件的构建时依赖项。这些通常必须手动确定并添加到 spec 文件中。 BuildArch:此软件为该计算机体系结构所构建。如果省略此标签,则将为所有受支持的体系结构构建该软件。值 noarch 表示该软件与体系结构无关(例如 fpaste,它完全是用 Python 编写的)。

本节提供有关 fpaste 的常规信息:它是什么,正在将什么版本制作为 RPM,其许可证等等。如果你已安装 fpaste,并查看其元数据时,则可以看到该 RPM 中包含的以下信息:

$ sudo dnf install fpaste$ rpm -qi fpasteName        : 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#nothing required

不过,通常来说,你会在此处使用构建命令,例如:

configure; make

构建部分通常是 spec 文件中最难的部分,因为这是从源代码构建软件的地方。这要求你知道该工具使用的是哪个构建系统,该系统可能是许多构建系统之一:Autotools、CMake、Meson、Setuptools(用于 Python)等等。每个都有自己的命令和语法样式。你需要充分了解这些才能正确构建软件。

第四部分:安装文件

软件构建后,需要在 %install 部分中安装它:

%installmkdir -p %{buildroot}%{_bindir}make install BINDIR=%{buildroot}%{_bindir} MANDIR=%{buildroot}%{_mandir}

在构建 RPM 时,RPM 不会修改你的系统文件。在一个可以正常运行的系统上添加、删除或修改文件的风险太大。如果发生故障怎么办?因此,RPM 会创建一个专门打造的文件系统并在其中工作。这称为 buildroot。 因此,在 buildroot 中,我们创建由宏 %{_bindir} 代表的 /usr/bin 目录,然后使用提供的 Makefile 将文件安装到其中。

至此,我们已经在专门打造的 buildroot 中安装了 fpaste 的构建版本。

第五部分:列出所有要包括在 RPM 中的文件

spec 文件其后的一部分是文件部分:%files。在这里,我们告诉 RPM 从该 spec 文件创建的档案文件中包含哪些文件。fpaste 的文件部分非常简单:

%files%{_bindir}/%{name}%doc README.rst TODO%{_mandir}/man1/%{name}.1.gz%license COPYING

请注意,在这里,我们没有指定 buildroot。所有这些路径都是相对路径。%doc 和 %license命令做的稍微多一点,它们会创建所需的文件夹,并记住这些文件必须放在那里。

RPM 很聪明。例如,如果你在 %install 部分中安装了文件,但未列出它们,它会提醒你。

第六部分:在变更日志中记录所有变更

Fedora 是一个基于社区的项目。许多贡献者维护或共同维护软件包。因此,当务之急是不要被软件包做了哪些更改所搞混。为了确保这一点,spec 文件包含的最后一部分是变更日志 %changelog:

%changelog* Thu Jul 25 2019 Fedora Release Engineering  - 0.3.9.2-3- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild* Thu Jan 31 2019 Fedora Release Engineering  - 0.3.9.2-2- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild* Tue Jul 24 2018 Ankur Sinha  - 0.3.9.2-1- Update to 0.3.9.2* Fri Jul 13 2018 Fedora Release Engineering  - 0.3.9.1-4- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild* Wed Feb 07 2018 Fedora Release Engineering  - 0.3.9.1-3- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild* Sun Sep 10 2017 Vasiliy N. Glazov  - 0.3.9.1-2- Cleanup spec* Fri Sep 08 2017 Ankur Sinha  - 0.3.9.1-1- Update to latest release- fixes rhbz 1489605.......

spec 文件的每项变更都必须有一个变更日志条目。如你在此处看到的,虽然我以维护者身份更新了该 spec 文件,但其他人也做过更改。清楚地记录变更内容有助于所有人知道该 spec 文件的当前状态。对于系统上安装的所有软件包,都可以使用 rpm 来查看其更改日志:

$ rpm -q --changelog fpaste

构建 RPM

现在我们准备构建 RPM 包。如果要继续执行以下命令,请确保遵循上一篇文章中的步骤设置系统以构建 RPM。我们将 fpaste 的 spec 文件放置在 ~/rpmbuild/SPECS 中,将源代码档案文件存储在 ~/rpmbuild/SOURCES/ 中,现在可以创建源 RPM 了:

$ cd ~/rpmbuild/SPECS$ wget https://src.fedoraproject.org/rpms/fpaste/raw/master/f/fpaste.spec$ cd ~/rpmbuild/SOURCES$ wget https://pagure.io/fpaste/arcHive/0.3.9.2/fpaste-0.3.9.2.tar.gz$ cd ~/rpmbuild/SOURCES$ rpmbuild -bs fpaste.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 -ba fpaste.spec......

RPM 将向你显示完整的构建输出,并在我们之前看到的每个部分中详细说明它的工作。此“构建日志”非常重要。当构建未按预期进行时,我们的打包人员将花费大量时间来遍历它们,以跟踪完整的构建路径来查看出了什么问题。

就是这样!准备安装的 RPM 应该位于以下位置:

$ ls ~/rpmbuild/RPMS/noarch/ fpaste-0.3.9.2-3.fc30.noarch.rpm

关于“怎么编写RPM的spec文件”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

--结束END--

本文标题: 怎么编写RPM的spec文件

本文链接: https://www.lsjlt.com/news/312912.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么编写RPM的spec文件
    这篇文章将为大家详细讲解有关怎么编写RPM的spec文件,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。通常,供Linux使用的源代码包还提供一个名为 { 软件名称 }.spec 的文件,即spec文件。如...
    99+
    2023-06-27
  • linux怎么编写RPM的spec文件
    这篇文章给大家分享的是有关linux怎么编写RPM的spec文件的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。了解源代码在开始编写 spec 文件之前,你需要对要打包的软件有所了解。在这里,你正在研究 fpast...
    99+
    2023-06-16
  • RPM 的 spec文件如何编写
    这篇文章给大家介绍RPM 的 spec文件如何编写,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。这里深入研究了 spec 文件,该文件中包含了有关如何构建 RPM 的指令。了解源代码在开始编写 spec 文件之前,你需...
    99+
    2023-06-05
  • 怎么编写html文件
    这篇文章给大家分享的是有关怎么编写html文件的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 编写html文件的方法:首先创建一个txt文件,将编辑器...
    99+
    2022-10-19
  • 怎么在Fedora Linux上安装RPM文件
    这篇文章主要介绍怎么在Fedora Linux上安装RPM文件,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在 Fedora 和 Red Hat Linux 上安装 RPM 文件我将向你展示安装 RPM 文件的三个方...
    99+
    2023-06-15
  • Go怎么编写Makefile规则文件
    这篇“Go怎么编写Makefile规则文件”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Go怎么编写Makefile规则文件...
    99+
    2023-06-30
  • C++怎样编写头文件
    今天就跟大家聊聊有关C++怎样编写头文件,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。我们之前做的左右示例都是在一个单独的cpp文件当中完成的,当我们要做一个相对复杂或大型的项目时,...
    99+
    2023-06-22
  • linux安装jdk的rpm语句怎么写
    本篇内容介绍了“linux安装jdk的rpm语句怎么写”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!linux安装jdk的rpm语句是“rp...
    99+
    2023-07-02
  • Python怎么导入自己编写的py文件
    这篇文章将为大家详细讲解有关Python怎么导入自己编写的py文件,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一. 想要实现的效果新建文件夹将自编模块集中管理可在其它py文件内import 自编模块,像...
    99+
    2023-06-25
  • java读写ini配置文件的示例代码怎么编写
    本篇文章为大家展示了java读写ini配置文件的示例代码怎么编写,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。下面通过代码先看下java 读写 ini 配置文件,代码如下所示:package&nbs...
    99+
    2023-06-26
  • 怎么使用PHP编写 E-mail的程序文件
    这篇文章主要介绍了怎么使用PHP编写 E-mail的程序文件,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。PHP 发送电子邮件,PHP 允许您从脚本直接发送电子邮件。 PHP...
    99+
    2023-06-15
  • 怎么编写一个完整的上传文件bean
    本篇内容主要讲解“怎么编写一个完整的上传文件bean”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么编写一个完整的上传文件bean”吧!import java.io.*; import jav...
    99+
    2023-06-03
  • makefile文件编写的方法是什么
    编写Makefile文件有以下几个步骤:1. 确定目标文件:Makefile文件中首先需要确定要生成的目标文件(可执行文件、库文件等...
    99+
    2023-09-12
    makefile
  • Python怎么编写运维进程文件目录
    这篇文章主要介绍“Python怎么编写运维进程文件目录”,在日常操作中,相信很多人在Python怎么编写运维进程文件目录问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python怎么编写运维进程文件目录”的疑...
    99+
    2023-06-30
  • 怎么编写react组件
    这篇文章主要介绍“怎么编写react组件”,在日常操作中,相信很多人在怎么编写react组件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么编写react组件”的疑惑有所帮...
    99+
    2022-10-19
  • ASP.NET事件怎么编写
    这篇文章主要讲解了“ASP.NET事件怎么编写”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ASP.NET事件怎么编写”吧!ASP.NET组件编程之组件代码:using Syste...
    99+
    2023-06-18
  • 怎么编写Vue插件
    本篇内容主要讲解“怎么编写Vue插件”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么编写Vue插件”吧!什么是插件在Vue框架中,如果需要给Vue增加一些我们需要的功能,Vue给我留了一个插件...
    99+
    2023-06-25
  • 使用Python读写文本文件及编写简单的文本编辑器
    学习raw_input和argv是学习读取文件的前提,你可能不能完全理解这个练习,所以认真学习并检查。如果不认真的话,很容易删除一些有用的文件。 这个练习包含两个文件,一个是运行文件ex15.py,一个是e...
    99+
    2022-06-04
    编辑器 文本文件 文本
  • nodejs怎么读取文件和写文件
    本篇内容介绍了“nodejs怎么读取文件和写文件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2022-10-19
  • java怎么写入文件
    java写入文件的方法:1、FileWritter写入文件FileWritter, 字符流写入字符到文件。默认情况下,它会使用新的内容取代所有现有的内容,如下:new FileWriter(file);然而,当指定一个true (Boole...
    99+
    2014-06-18
    java 文件
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作