Product SiteDocumentation Site

15.4. 成为软件包的维护者

15.4.1. 学习制作软件包

Creating a quality Debian package is not always a simple task, and becoming a package maintainer takes some learning, both with theory and practice in technical and legal matters. It is not a simple matter of building and installing software; rather, the bulk of the complexity comes from understanding the problems and conflicts, and more generally the interactions, with the myriad of other packages available.

15.4.1.1. 规则

Debian 软件包必须遵守 Debian 政策中编译的精确规则,并且每位软件包维护者必须知道这些规则。并不要求把它们记在心理,而无论何时选项中出现了不那么琐碎的替代方案,都要知道它们存在并去查阅它们。每位 Debian 维护者都会因为不知道规则而犯错误,但只要当用户将其作为故障报告而汇报时错误能得到修复(这由于高级用户而趋于迅速发生),这就不是个大问题。debian/control 中的 Standards-Version 字段指示了软件包所遵守的 Debian 政策的版本。维护者应该遵守最新版本的 Debian 政策。

15.4.1.2. 过程

Debian 不是独立软件包的简单集合。每个人的打包工作都是集体项目的一部分;成为 Debian 开发者包括了解 Debian 项目作为整体如何运作。每位开发者迟早都会与他人互动。Debian 开发者参考(在 developers-reference 软件包中)总结了每位开发者都必须知道的内容,从而尽可能平滑地在项目中与各个团队互动,并尽获得可用资源尽可能多的优点。本文档还列举了一些开发者必须尽到的责任。

15.4.1.3. 工具

很多工具帮助软件包的维护人员进行他们的工作。这一节快速地描述了这些工具,但没有给出完整细节,因为它们各自都有详细的文档。
15.4.1.3.1. devscripts
devscripts 软件包包含很多程序来帮助大范围的 Debian 开发者的工作:
  • debuild 允许(以 dpkg-buildpackage)来生成软件包,此后允许运行lintian 来检查它与 Debian 政策的兼容性。
  • debclean 在生成二进制包后清除源码包。
  • dch 允许快速且容易地编辑源码包中的 debian/changelog 文件。
  • uscan 检查新版本的软件是否已经由上游作者发布;这需要 debian/watch 文件具有这个发布位置的描述。
  • debi 允许(以 dpkg -i)来安装刚生成的 Debian 软件包,而无需键入其完整名称与路径。
  • debc 允许以相似的方式(用 dpkg -c)来扫描最近生成的软件包,而无需键入其完整名称与路径。
  • bts controls the bug tracking system from the command line; this program automatically generates the appropriate emails.
  • debrelease 将最近生成的软件包上传到远端的服务器,而无需键入相关的 .changes 文件的完整名称与路径。
  • debsign 签署 *.dsc*.changes 文件。
  • 当上游版本发布时,uupdate 自动创建新版本的软件包。
All of the mentioned commands are documented in their respective manual pages. They can further be configured per user in one file: ~/.devscripts.
15.4.1.3.2. debhelperdh-make
Debhelper is a set of scripts easing the creation of policy-compliant packages; these scripts are invoked from debian/rules. Debhelper has been widely adopted within Debian, as evidenced by the fact that it is used by the majority of official Debian packages. All the commands it contains have a dh_ prefix. Each of them is documented in a manual page. The different compatibility levels and common options are described in debhelper(7).
dh_make 脚本(位于 dh-make 软件包中)创建文件,在初始包含一块软件的源代码的目录中生成 Debian 软件包需要这些创建文件。可以从程序的名称猜到,生成的文件默认使用 debhelper。
15.4.1.3.3. lintian
这是最重要的工具之一:它是 Debian 软件包检查程序。它基于从 Debian 政策创立的大量测试,并快速且自动地检测很多错误,然后可以在软件包发布前修复。
这个工具只是个帮手,它有时会犯错误(例如,由于 Debian 政策不时更改,lintian 有时会过时)。它有时还不够详细:没有得到任何 Lintian 错误不应该被理解成软件包被证明是完美的;最多不过是避免了最常见的错误。
15.4.1.3.4. piuparts
这是另一个重要工具:它(在隔离的环境中)自动安装、升级、删除并净化软件包,并且检查这些操作不会导致错误。它可以帮助检查丢失的依赖,并且还可以检查在软件包净化后文件在什么时候不正确地留下来。
15.4.1.3.5. autopkgtest
autopkgtest runs tests on binary packages, using the tests supplied in the source package in debian/tests/. Several commands allow the easy creation of chrooted or virtual test environments.
15.4.1.3.6. reprotest
reprotest 在不同的环境中两次构建相同的源代码,然后检查每次构建的二进制文件的差异。如果发现任何差异,那么 diffoscope(如果可用的话则用 diff)来具体显示它们供后面进行分析。
15.4.1.3.7. duploaddput
The dupload and dput commands allow uploading a Debian package to a (possibly remote) server. This allows developers to publish their package on the main Debian server (ftp-master.debian.org) so that it can be integrated to the archive and distributed by mirrors. These commands take a .changes file as a parameter, and deduce the other relevant files from its contents.
15.4.1.3.8. git-buildpackage and dgit
The project has been using various version control systems over the years to store packaging efforts or package source code, or allow collaborative package maintenance. In an effort to unify the systems and efforts, it was ultimately decided in 2017 to move (almost) all package sources into Git (文化 Git) onto a Gitlab instance called salsa.debian.org.
To make packaging using Git easier for Debian developers, tools have been developed. These allow not only to store the packaging files in Git, but also to use the Git repositories (and their history) of software projects, put patches applied to package sources into Git history, maintain software versions per distribution, etc.
One of the most famous packages is git-buildpackage. An alternative is dgit. Of course it is still possible to use neither of those.
Below is an example for a ~/.gbp.conf configuration file
[DEFAULT]
builder = sbuild -d bullseye --build-dep-resolver=aptitude -s --source-only-changes --build-failed-commands "%SBUILD_SHELL"
pristine-tar = true

[buildpackage]
sign-tags = true
keyid = XXXX
postbuild  = autopkgtest --user debci --apt-upgrade -s "$GBP_CHANGES_FILE" -- lxc --sudo autopkgtest-bullseye-amd64 
export-dir = /tmp/build-area/
notify = off

[import-orig]
filter-pristine-tar = true
sign-tags = true

[pq]
drop = true
Building the package is then as easy as running gbp buildpackage in the Git tree. It will start a package build in a Debian Bullseye chroot using sbuild. When the build succeeds, the created files are checked running the autopkgtest-testsuite (if defined). All the various options are explained in gbp.conf(5) and /etc/git-buildpackage/gbp.conf.
All the tools mentioned so far have been included in the continuous integration (CI) process in the salsa.debian.org instance as well:

15.4.2. 接受过程

称为 “Debian 开发者”不是个简单的管理性事情。这个过程包含几个步骤,从开始就更是一个选择过程。在任何情况下,这个过程形成并良好地归档,因此任何人都可以在专供新的成员处理的网站上跟踪其进展。

15.4.2.1. 先决条件

希望所有的志愿者都至少具有英语的工作知识。在所有层面都对此有要求:用于与检查者的初始沟通,当然同样也用于后面的进一步沟通,因为英语是多数文档的首选语言;同样,软件包的用户当汇报缺陷时也用英语沟通,并且他们希望以英语回复。
其它先决条件涉及动机。成为 Debian 开发者是个过程,如果志愿者知道他们对 Debian 的兴趣会持续很长时间时才有意义。接受过程本身会持续几个月,而 Debian 需要开发者进行长时间费时费力的工作;每个软件包需要永久维护,而不只是初始的上传。

15.4.2.2. 注册

第一个(真实的)步骤包括找到赞助者或拥护者;这意味着官方开发者愿意声明,他们相信接受某个项目对于 Debian 是件好事。这通常意味着志愿者在社区内已经是活跃的,并且他们的工作已经受到欢迎。如果志愿者太羞涩并且他们的工作没有公开宣传,他们可以尝试以私下的方式展示他们的工作,来说服 Debian 开发者支持他们。
同时,志愿者必须以 GnuPG 来生成 RSA 公钥/私钥对,这必须由至少两名官方 Debian 开发者签署。签名验证了密钥上的名称。在密钥签发组中,每位参加者必须有效地将官方身份(通常是身份证或护照)与他们的密钥识别符一起展示。这一步确认了真人与密钥之间的联系。这样,这个签名需要真实生活中的会面。如果还没有在公开的自由软件会议中遇到任何 Debian 开发者,那么必须使用后面的网页上的列表作为起点,来明确地寻找生活在附近的开发者。
一旦 nm.debian.org 上的注册被拥护者验证,那么 Application Manager(申请管理者) 就被指定给志愿者。然后申请管理者通过多个预定的步骤和检查来驱动这个过程。
第一项验证是身份检查。如果已经有两名 Debian 开发者签发的密钥,那么这步很容易;否则,申请管理者将通过组织会见和密钥签发来尝试并引导您搜索附近的 Debian 开发者。

15.4.2.3. 接受的原则

这些管理手续经过哲学性的思考而来。要点是确定志愿者理解并接受社会接触与自由软件背后的原则。只有分享了将当前的开发者团结在一起这个价值观,如在奠基文本中所表达的(并且在 第 1 章 Debian 项目 中总结),加入 Debian 才是可能的。
此外,希望每位想要加入 Debian 序列的志愿者都知道项目的工作,以及如何适当地互动,来解决随着时间的前进他们将无疑会遇到的问题。所有这些信息都存档在针对新维护者的手册中,以及在 Debian 开发者的参考手册中。仔细阅读这个文档应该足以回答检查者的问题。如果回答不够令人满意,那么将会通知志愿者。然后他们在尝试前必须(再次)阅读相关文档。在现有的文档没有包含问题的适当答案的情况下,志愿者通常可以通过 Debian 内的实践经验,或者可能潜在地通过与其他 Debian 开发者讨论来找到答案。这个机制确保了志愿者在成为真正的成员前在某种程度上参与进去。这是个深思熟虑的政策,最终加入项目的志愿者通过它组成了无限扩展的拼图的一部分。
在新成员过程的术语中,这一步通常称为哲学 & 步骤(简写为 P&P)。

15.4.2.4. 技能检查

每一份成为官方 Debian 开发者的申请都必须被证明。成为项目成员需要显示这个状态是合法的,并且促进了志愿者的工作来帮助 Debian。最通常的证明是授予了 Debian 开发者的状态使 Debian 软件包的维护更容易了,但不只是这一点。一些开发者加入项目,为导出到特定架构做出了贡献,另一些人想要改进文档,以及诸如此类。
这一步代表了志愿者的机会来声明想要在 Debian 项目中做什么,以及显示他们向终点已经做了什么。Debian 是务实的项目,如果行动与所宣称的不陪陪,那么只是说些什么是不够的。通常,当项目中期望的角色与项目维护相关时,预期的软件包的第一版必须通过现有的 Debian 开发者中的赞助者在技术上验证,并且上传到 Debian 服务器上。
Finally, the examiner checks the candidate's technical (packaging) skills with a detailed questionnaire. Bad answers are not permitted, but the answer time is not limited. All the documentation is available and several attempts are allowed if the first answers are not satisfactory. This step does not intend to discriminate, but to ensure at least a modicum of knowledge common to new contributors.
这一步在检查者的行话中被称 任务 & 技巧 步骤(简写为 T&S)。

15.4.2.5. 最终确认

在最后一步,整个过程由 DAM (Debian Account Manager——Debian 账户管理者)复查。DAM 将复查检查者搜集的关于志愿者的所有信息,并决定是否在 Debian 服务器上创建账户。在需要补充信息的情况下,会推迟创建账户。 如果检查者在后面的过程中做了很好的工作的话,拒绝会很罕见,但有时也会发生。拒绝不是永久性的,志愿者后面可以任意尝试。
DAM 的决定是权威性的,并且(几乎)不得上诉,这解释了为什么上位者过去经常被批评。