过了这个夏天,我把我的桌面环境迁移到了 i3,这是一个瓦片式窗口管理器。当初,切换到 i3 是一个挑战,因为我必须去处理许多以前 GNOME 帮我处理的事情。其中一件事情就是改变屏幕亮度。 xbacklight 这个在笔记本电脑上改变背光亮度的标准方法,它在我的硬件上不工作了。
最近,我发现一个改变背光亮度的工具 brightlight。我决定去试一下它,它工作在 root 权限下。但是,我发现 brightligh 在 Fedora 下没有 RPM 包。我决定,是在 Fedora 下尝试创建一个包的时候了,并且可以学习怎么去创建一个 RPM 包。
在这篇文章中,我将分享以下的内容:
创建 RPM SPEC 文件
在 Koji 和 Copr 中构建包
使用调试包处理一个问题
提交这个包到 Fedora 包集合中
前提条件在 Fedora 上,我安装了包构建过程中所有步骤涉及到的包。
sudo dnf install fedora-packager fedpkg fedrepo_req copr-cli
创建 RPM SPEC 文件创建 RPM 包的第一步是去创建 SPEC 文件。这些规范,或者是指令,它告诉 RPM 怎么去构建包。这是告诉 RPM 从包的源代码中创建一个二进制文件。创建 SPEC 文件看上去是整个包处理过程中最难的一部分,并且它的难度取决于项目。
对我而言,幸运的是,brightlight 是一个用 C 写的简单应用程序。维护人员用一个 Makefile 使创建二进制应用程序变得很容易。构建它只是在仓库中简单运行 make 的问题。因此,我现在可以用一个简单的项目去学习 RPM 打包。
查找文档谷歌搜索 “how to create an RPM package” 有很多结果。我开始使用的是 IBM 的文档。然而,我发现它理解起来非常困难,不知所云(虽然十分详细,它可能适用于复杂的 app)。我也在 Fedora 维基上找到了 创建包 的介绍。这个文档在构建和处理上解释的非常好,但是,我一直困惑于 “怎么去开始呢?”
最终,我找到了 RPM 打包指南,它是大神 Adam Miller 写的。这些介绍非常有帮助,并且包含了三个优秀的示例,它们分别是用 Bash、C 和 Python 编写的程序。这个指南帮我很容易地理解了怎么去构建一个 RPM SPEC,并且,更重要的是,解释了怎么把这些片断拼到一起。
有了这些之后,我可以去写 brightlight 程序的我的 第一个 SPEC 文件 了。因为它是很简单的,SPEC 很短也很容易理解。我有了 SPEC 文件之后,我发现其中有一些错误。处理掉一些错误之后,我创建了源 RPM (SRPM) 和二进制 RPM,然后,我解决了出现的每个问题。
rpmlint SPECS/brightlight.spec
rpmbuild -bs SPECS/brightlight.spec
rpmlint SRPMS/brightlight-5-1.fc26.src.rpm
rpmbuild -bb SPECS/brightlight-5-1.fc26.x86_64.rpm
rpmlint RPMS/x86_64/brightlight-5-1.fc26.x86_64.rpm
现在,我有了一个可用的 RPM,可以发送到 Fedora 仓库了。
在 Copr 和 Koji 中构建接下来,我读了该 指南 中关于怎么成为一个 Fedora 打包者。在提交之前,他们鼓励打包者通过在在 Koji 中托管、并在 Copr 中构建项目来测试要提交的包。
使用 Copr首先,我为 brightlight 创建了一个 Copr 仓库,Copr 是在 Fedora 的基础设施中的一个服务,它构建你的包,并且为你任意选择的 Fedora 或 EPEL 版本创建一个定制仓库。它对于快速托管你的 RPM 包,并与其它人去分享是非常方便的。你不需要特别操心如何去托管一个 Copr 仓库。