欢迎光临
我们一直在努力

如何在Fedora中创建GNU Hello World RPM包

RPMRPM Package Manager的递归首字母缩写)是一个用于Linux的免费开源包管理系统 虽然它最初是为Red Hat Linux创建的,但现在它被用于许多Linux发行版,如CentOSFedoraOpenSuse 重要的是,名称RPM指的是包管理器程序,而.rpm是文件格式。

在本文中,我们将解释编写RPM文件,展示如何轻松创建简单的源代码和二进制软件包,例如, Fedora Linux发行版中的GNU“Hello World” RPM包。 我们假设您对预制RPM包以及免费开源软件构建过程有一些基本的了解。

在Fedora中安装开发工具

让我们首先在Fedora Linux中设置开发环境,方法是运行以下命令来安装构建RPM的必要工具。

$ sudo dnf install fedora-packager @development-tools
在Fedora中安装开发工具

在Fedora中安装开发工具

接下来,将您的非特权帐户添加到“ 模拟 ”组,如下所示(将howtoing替换为您的实际用户名)。 这将使您能够在干净的chroot中测试构建过程。

$ sudo usermod -a -G mock howtoing

现在,在~/rpmbuild目录中创建RPM构建,并使用以下命令验证构建。 它将显示一个子目录列表,其中包含项目源代码,RPM配置文件和二进制包。

$ rpmdev-setuptree$ tree ~/rpmbuild/
创建构建环境

创建构建环境

以下是每个目录的用途:

  1. BUILD – 在构建包时存储各种%buildroot目录。
  2. RPMS – 将在Architecture的子目录中包含二进制RPM。
  3. SOURCES – 存储压缩的源存档和任何补丁,这是rpmbuild命令将查找它们的位置。
  4. SPECS – 存储SPEC文件。
  5. SRPMS – 存储源RPM而不是二进制RPM。

构建“Hello World”RPM

在此步骤中,您需要使用以下wget命令将我们正在打包的Hello World项目的源代码(也称为“上游 ”源)下载到〜/ rpmbuild / SOURCE目录中。

$ cd ~/rpmbuild/SOURCES$ wget http://ftp.gnu.org/gnu/hello/hello-2.10.tar.gz -P ~/rpmbuild/SOURCES

接下来,让我们使用rpmdev-newspec程序在〜/ rpmbuild / SPECS目录中使用.spec文件(在本例中将其命名为hello.spec )配置RPM包。

$ cd ~/rpmbuild/SPECS$ rpmdev-newspec hello$ ls
创建Hello规范文件

创建Hello规范文件

然后使用您喜欢的编辑器打开hello.spec文件。

$ vim hello.spec

默认模板应如下所示:

Name:           helloVersion:Release:        1%{?dist}Summary:License:URL:Source0:BuildRequires:Requires:%description%prep%autosetup%build%configure%make_build%installrm -rf $RPM_BUILD_ROOT%make_install%files%license add-license-file-here%doc add-docs-here%changelog* Tue May 28 2019 Aaron Kili

让我们简要解释一下.spec文件中的默认参数:

  • 名称 – 用于设置包的名称。
  • 版本 – 应该镜像上游。
  • 发布 – 您在Fedora中工作的数字。
  • 总结 – 是一个简短的单行描述包,第一个字母应该是大写的,以避免rpmlint的投诉。
  • 许可证 – 通过检查源文件和/或其LICENSE文件和/或与作者交谈来检查软件的许可证状态。
  • URL – 指定软件包的主页。
  • Source0 – 指定源文件。 它可以是直接URL或软件压缩源代码的路径。
  • BuildRequires – 指定构建软件所需的依赖项。
  • 要求 – 指定运行软件所需的依赖项。
  • %prep – 用于创建用于构建rpm包的环境。
  • %build – 用于编译和构建源代码。
  • %install – 用于安装程序。 它列出了将生成的文件从构建过程复制到BUILDROOT目录所需的命令。
  • %files – 此部分列出了程序包提供的文件,这些文件将安装在系统上。
  • %changelog – 应该存储准备RPM的工作,特别是如果在基础上游源上包含安全性和bug补丁。 它是在创建hello.spec文件时自动生成的。 changelog数据通常以rpm --changelog -q <packagename>

现在编辑.spec文件并进行更改,如图所示。

Name:           helloVersion:        2.10Release:        1%{?dist}Summary:        The "Hello World" program from GNULicense:        GPLv3+URL:            http://ftp.gnu.org/gnu/%{name}Source0:        http://ftp.gnu.org/gnu/%{name}/%{name}-%{version}.tar.gzBuildRequires: gettext      Requires(post): infoRequires(preun): info%description The "Hello World" program package %prep%autosetup%build%configuremake %{make_build}%install%make_install%find_lang %{name}rm -f %{buildroot}/%{_infodir}/dir%post/sbin/install-info %{_infodir}/%{name}.info %{_infodir}/dir || :%preunif [ $1 = 0 ] ; then/sbin/install-info --delete %{_infodir}/%{name}.info %{_infodir}/dir || :fi%files -f %{name}.lang%{_mandir}/man1/hello.1.*%{_infodir}/hello.info.*%{_bindir}/hello%doc AUTHORS ChangeLog NEWS README THANKS TODO%license COPYING%changelog* Tue May 28 2019 Aaron Kili

您会注意到我们在上面的文件中使用了一些尚未解释的新参数。 这些称为 ,用于构建由RPM定义的系统调用,以设置包的安装路径。 因此,通常最好不要在spec文件中对这些路径进行硬编码,而是使用相同的宏来保持一致性。

以下是RPM构建和目录宏及其定义和默认值:

  • %{make_build} – 用于spec文件的%build部分,它运行make命令。
  • %{name} – 定义包或目录名称。
  • %{buildroot} – %{_ buildrootdir} /%{name} – %{version} – %{release}。%{_ arch},与$ BUILDROOT相同
  • %{_ infodir} – %{_ datarootdir} / info,默认值:/ usr / share / info
  • %{_ mandir} – %{_ datarootdir} / man,默认:/ usr / share / man
  • %{_ bindir} – %{_ exec_prefix} / bin,默认值:/ usr / bin

请注意,您可以在/ usr / lib / rpm / platform / * / macros中找到这些的值,或参考Packaging Guidelines:RPM Macros

构建RPM包

要构建源代码,二进制代码和调试包,请运行以下rpmbuild命令。

$ rpmbuild -ba hello.spec

在构建过程之后,源RPM和二进制RPM将分别在../SRPMS/../RPMS/目录中创建。 您可以使用rpmlint程序检查并确保创建的spec文件和RPM文件符合RPM设计规则:

$ rpmlint hello.spec ../SRPMS/hello* ../RPMS/*/hello*
检查包是否有错误

检查包是否有错误

如果上面的屏幕截图中显示任何错误,请在继续之前修复它们。

最后但并非最不重要的是,使用模拟程序来检查包构建是否会在Fedora受限构建环境中成功。

$ mock --verbose ../SRPMS/hello-2.10-1.fc29.src.rpm
检查RPM包构建

检查RPM包构建

有关更多信息,请参阅Fedora文档: 创建RPM包

就这样! 在本文中,我们已经解释了如何升级Fedora系统以创建简单的源代码和二进制软件包。 我们还展示了如何创建GUN Hello Word RPM包。 如果您有任何问题或意见,请使用下面的反馈表与我们联系。

赞(0) 打赏
未经允许不得转载:老赵部落 » 如何在Fedora中创建GNU Hello World RPM包

评论 抢沙发