第 1 章 正确的起点

目录

1.1. Debian 的社会驱动力
1.2. 开发时需要的软件
1.3. 开发时需要的文档
1.4. 到何处寻求帮助

这篇文档试图为普通 Debian 用户,和希望对 Debian 软件包有所了解的开发人员讲述如何制作 Debian 软件包。在这里,我们尽可能使用通俗的语言,并辅以大量实例来直观地展示每一个细节。正如一句古罗马谚语说得好:一例胜千言!

本文档已经针对 Debian jessie 进行了更新。[1]

Debian 的软件包系统是使它跻身顶级发行版行列的重要原因之一。尽管已经有相当数量的软件被打包成 Debian 的格式,但有时还是需要安装一些不是这一格式的软件。可能你正为如何制作自己的软件包而感到迷惑,也可能正认为这么做很难。如果你是一个刚刚接触 Debian 的初学者,那么是的,它的确很难;不过假如你真的只是一个初入此门的新手,现在大概也不会来读这篇文档了。:-) 你的确需要对 Unix 编程有所了解,但显然没必要是这方面的天才。[2]

对于 Debian 软件包维护人员来说,有一件事是非常明确的:创建并维护一个 Debian 软件包需要花费很多精力,所需的时间很可能远不只是几个小时。维护人员需要有良好的技术基础,同时也需要十分勤奋,这样才能保证我们的系统正常运行而不出现问题。

如果你在打包方面需要别人帮助,请阅读 第 1.4 节 “到何处寻求帮助”

本文的最新版随时都可以在 http://www.debian.org/doc/maint-guide/ 上和 maint-guide 软件包里找到。文档的简体中文翻译可以在 maint-guide-zh-cn 软件包里找到。还有一点需要注意的是,这篇文档的内容相对于当前的开发情况可能会有略微的延迟。

由于这篇文档是一份手把手的教程,所以在一些重要的话题上会对每个步骤都做详细的解释。因而你可能觉得它们之中有一些与你的想法毫不相干。请准备好足够的耐心来学习。同时我也有意地省略了某些不必要的细节,以使这篇文档尽可能保持简洁。

以下是一些有关 Debian 的社会动力学报告,希望它们有助于你掌握与 Debian 项目进行互动的方法。

  • 我们都是志愿者。

    • 任何人都不能把事情强加给他人。

    • 你应该主动地做自己的事情。

  • 友好合作是我们前行的动力。

    • 你的贡献不应致使他人过劳。

    • 只有当别人欣赏你的贡献时,它才真正有价值。

  • Debian 不是一所学校,没有老师会自动地注意你。

    • 你需要有自学大量知识的能力。

    • 其他志愿者的注意是非常稀缺的资源。

  • Debian 在不断进步。

    • Debian 期望你制作出高质量的软件包。

    • 你应该适时改变自己来适应变化。

在 Debian 社区中有这几类常见的角色:

  • Upstream author (上游作者):程序的原始作者。

  • Upstream maintainer (上游维护者):目前在上游维护程序代码的人。

  • Maintainer (软件包维护者):制作并维护该程序的 Debian 软件包的人。

  • Sponsor (保证人):检查内容后帮助维护者上传软件包到 Debian 官方仓库的人。

  • Mentor (指导者):帮助维护者熟悉和深入打包的人。

  • Debian Developer (DD):Debian 社区的官方成员。DD 拥有向 Debian 官方仓库上传的全部权限。

  • Debian Maintainer (DM):拥有对 Debian 官方仓库部分上传权限的人。

注意,你不可能在一夜之间成为 Debian Developer,因为成为 DD 所需要的远不只是技术技巧。别因此气馁,如果你的软件包对其他人有用,你可以作为软件包的 Maintainer,通过一位 Sponsor 来上传它,或者申请成为 Debian Maintainer

还有,要成为 Debian Developer 不一定要创建新软件包。对已有软件做出贡献也是成为 Debian Developer 的理想途径。眼下正有很多软件包等着好的维护者来接手(参看 第 2.2 节 “选择你的程序”)。

在这篇文档里,我们的重点在于打包的技术细节,所以请参考以下的文档来了解 Debian 是如何运转的,以及如何才能参与到其中:

在开始之前,你需要确认你是否已经正确安装了开发所需要的附加软件包。注意这些软件包不包含任何已经被标记为 essentialrequired —— 我们假设你已经安装了它们。

以下这些软件包已经随标准的 Debian 安装而在系统中,所以你可能不需要再动手安装它们(以及任何附加的依赖软件包)。然而,你还是应该用 aptitude show package 或者 dpkg -s package 来检查一下。

在你的开发环境中,需要安装的最重要的软件包是 build-essential。一旦你 尝试安装该包,它将 拉来 其他基本构建环境所需的基本软件。

对于某些类型的软件,以上的就是所需要的全部。然而还有一组软件包虽不是对于所有软件包都必须,却可能对你有用或被你的软件包所需要:

以上给出的简短描述仅仅是为了使你对这些软件包有一个基本的印象。在继续前请详细阅读每个程序(包括通过依赖关系安装的程序,比如make)的文档,至少了解其一般的用途和用法。现在看来这是一项耗时巨大的任务,但在接下来的工作中你将为你阅读了它们而感觉到 非常 愉快。如果一会你遇到一些特定的问题,我会建议你重新阅读上面提到的文档。

以下是 非常重要 的文档,你应该在读本文档时同时参看它们:

  • debian-policy - the Debian Policy Manual 包含了对 Debian 软件仓库、操作系统设计事宜、文件系统层级标准(FHS,Filesystem Hierarchy Standard,讲述每个文件和目录应该放在哪里)等的描述。对于你而言,最重要的是它描述了软件包要进入官方仓库前必须满足的条件。(请参见 /usr/share/doc/debian-policy/policy.pdf.gz/usr/share/doc/debian-policy/fhs/fhs-2.3.pdf.gz 的本地副本)

  • developers-reference - the Debian Developer's Reference 描述了打包所需的包含技术细节在内的全部详细信息,如仓库结构、如何重命名/丢弃/接手软件包、如何进行 NMU(非维护者上传)、如何管理 Bug 以及打包最佳实践、何时向何处上传等。(参见 /usr/share/doc/developers-reference/developers-reference.pdf 的本地副本)

以下是 重要 的文档,你应该在读本文档时同时参看它们:

若本文档所叙述的内容与 Debian Policy Manual 或 Debian Developer's Reference 有不符,则按照后两者的要求进行,并向 maint-guide 软件包提交 Bug 报告。

以下是替代性的教程文档,你应该在读本文档时同时参看它们:

在你决定到公共场合提问之前,请先阅读这些(个)不错的文档:

你可以在搜索引擎中搜索时使用类似这样的字符串 :site:lists.debian.org 来限制域名以提高效率。

制作小的测试软件包是学习打包的好方法,仔细查看维护较好的软件包则是了解他人如何制作软件包的最佳办法。

如果你仍然对打包存有疑问,并且在文档和WEB资源中都不能找到答案,你可以交互式地向他们提问:

如果你付出了一定的努力并且提问得当,那么有经验的 Debian 开发者会很乐意帮助你。

当你收到一个 Bug 报告后(没错,真正的 Bug 报告!),你需要研究 Debian Bug Tracking System (Debian Bug 跟踪系统,BTS)并阅读相关的文档以便高效处理这些报告。我推荐阅读 Developer's Reference, 5.8. "Handling bugs"

即使以上的问题都解决了,也不能高兴得太早。为什么?因为几个小时或几天内就会有人开始使用你的软件包,如果你犯了某些严重的错误,将被无数生气的 Debian 用户的邮件所轰炸…… 只是开个玩笑。:-)

放松一点并准备好处理 Bug 报告,在你的软件包完全符合 Debian 的各项规范前还需要付出很多努力,处理 Bug 也是对你很好的锻炼(再一次提醒,阅读那些 必须的文档 来了解详情)。祝你好运!



[1] 在写这份文档时,我们默认你使用 squeeze 操作系统。如果你需要在 lenny 系统上使用本文所记述的方法,则必须安装 backports 仓库中的 dpkgdebhelper 软件包。

[2] Debian Reference 中,你可以了解到使用 Debian 系统的一些基本信息和关于 Unix 编程的一些指引。

[3] 还有几个类似但更针对某一类软件的软件包,如 dh-make-perldh-make-php 等。