RPM ( RPM Package Manager的递归首字母缩写)是一个用于Linux的免费开源包管理系统 。 虽然它最初是为Red Hat Linux创建的,但现在它被用于许多Linux发行版,如CentOS , Fedora和OpenSuse 。 重要的是,名称RPM指的是包管理器程序,而.rpm
是文件格式。
在本文中,我们将解释编写RPM文件,展示如何轻松创建简单的源代码和二进制软件包,例如, Fedora Linux发行版中的GNU“Hello World” RPM包。 我们假设您对预制RPM包以及免费开源软件构建过程有一些基本的了解。
让我们首先在Fedora Linux中设置开发环境,方法是运行以下命令来安装构建RPM的必要工具。
$ sudo dnf install fedora-packager @development-tools
接下来,将您的非特权帐户添加到“ 模拟 ”组,如下所示(将howtoing替换为您的实际用户名)。 这将使您能够在干净的chroot中测试构建过程。
$ sudo usermod -a -G mock howtoing
现在,在~/rpmbuild
目录中创建RPM构建,并使用以下命令验证构建。 它将显示一个子目录列表,其中包含项目源代码,RPM配置文件和二进制包。
$ rpmdev-setuptree $ tree ~/rpmbuild/
以下是每个目录的用途:
在此步骤中,您需要使用以下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.spec
文件。
$ vim hello.spec
默认模板应如下所示:
Name: hello Version: Release: 1%{?dist} Summary: License: URL: Source0: BuildRequires: Requires: %description %prep %autosetup %build %configure %make_build %install rm -rf $RPM_BUILD_ROOT %make_install %files %license add-license-file-here %doc add-docs-here %changelog * Tue May 28 2019 Aaron Kili
让我们简要解释一下.spec
文件中的默认参数:
rpm --changelog -q <packagename>
。 现在编辑.spec
文件并进行更改,如图所示。
Name: hello Version: 2.10 Release: 1%{?dist} Summary: The "Hello World" program from GNU License: GPLv3+ URL: http://ftp.gnu.org/gnu/%{name} Source0: http://ftp.gnu.org/gnu/%{name}/%{name}-%{version}.tar.gz BuildRequires: gettext Requires(post): info Requires(preun): info %description The "Hello World" program package %prep %autosetup %build %configure make %{make_build} %install %make_install %find_lang %{name} rm -f %{buildroot}/%{_infodir}/dir %post /sbin/install-info %{_infodir}/%{name}.info %{_infodir}/dir || : %preun if [ $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构建和目录宏及其定义和默认值:
请注意,您可以在/ usr / lib / rpm / platform / * / macros中找到这些宏的值,或参考Packaging Guidelines:RPM Macros 。
要构建源代码,二进制代码和调试包,请运行以下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
有关更多信息,请参阅Fedora文档: 创建RPM包 。
就这样! 在本文中,我们已经解释了如何升级Fedora系统以创建简单的源代码和二进制软件包。 我们还展示了如何创建GUN Hello Word RPM包。 如果您有任何问题或意见,请使用下面的反馈表与我们联系。
关注云架构公众号
Linux入门
QQ交流群:308781113