Debian 新维护人员手册

1

本文档默认您使用 squeeze 为操作系统。如果你需要在 lenny 系统上使用本文档记述的方法,则至少必须安装 backports 的 dpkgdebhelper 软件包。

2

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

3

当然,也一定总是有值得打包的新软件。

4

当文件扩展名不足以判断文件类型时,可以使用 file 命令来判断。

5

需要注意的是,这个程序已经被打包好了,并且从写这篇文档之初到现在它已经发生了很大的变化。

6

参看 Autotools Tutorial/usr/share/doc/autotools-dev/README.Debian.gz

7

Version 字符串可以用 dpkg --compare-versions ver1 op ver2 命令比较。参看 dpkg(1) man 手册页。

8

以下默认以 Bash 作为登陆 shell。如果你使用其他的 shell,例如 Z shell,使用它们的配置文件代替这里提到的 ~/.bashrc

9

如果上游源代码提供 debian 目录和内容,运行 dh_make 命令是要加上 --addmissing 参数。新的 3.0 (quilt) 源代码格式十分强健,在这种情况下不会出现问题。你可能需要为你的 Debian 软件包更新上游提供的 debian 目录内容。

10

这里有几个候选项:s 为单个二进制包(Signle binary)、i 为平台独立软件包(Arch-Independent)、m 为多个二进制包(Multiple binary)、l 为库(Library)、k 为内核模块(Kernel module)、n 为内核补丁(Kernel patch)、b 为使用 cdbs。本文档重点介绍使用通过 dh 命令使用 debhelper 打包。本文档侧重于单个二进制包,也涉及平台独立和多二进制包类型的软件包。cdbs 软件包提供了类似 dh 的其他打包脚本框架,它并不在本文档的介绍范围内。

11

你可以通过 quilt --quiltrc /dev/null ... 来运行 quilt 来禁用此配置文件。

12

debian/patches 应当在你按照前面所述的步骤运行 dh_make 时生成的。这个例子中我们新创建它,因为假设的是在更新一个已存在的软件包。

13

对于多个二进制包,dh_auto_install 将临时目录设置为debian/tmp,而 dh_install 命令则将文件按照 debian/package-1.installdebian/package-2.install 等文件的描述将 debian/tmp 中的文件分别装入 debian/package-1debian/package-2 等临时目录以创建 *.deb 软件包。

14

这只是一个 Makefile 的例子。如果 Makefile 是通过 ./configure 命令生成的,修复该类的 Makefile 的方法是通过 dh_auto_configure 执行 ./configure,并带上如 --prefix=/usr 的默认选项。

15

作者已经意识到这不是一个最好的例子,因为我们的 libncurses 软件包现在提供了一个 libcurses.so 的符号链接,但作者还没有想出更好的例子。非常欢迎提出建议 :-)

16

这种奇怪的情况是 Debian Policy Manual, Footnotes 48 中详细描述的一种特性。这不是由于在 debian/rules 中使用 dh 命令所致的,真正的原因是 dpkg-buildpackage 如何运行。相同的情形也适用于 Ubuntu 的自动编译系统

17

有些人使用无效的发行版名称,如 UNRELEASED 以防止某些软件包在共享的 VCS 中修改时被意外上传。

18

此 target 被 dpkg-buildpackage 用于 完整的(重)构建, 第 6.1 节 描述的过程中。

19

此 target 被 dpkg-buildpackage -B" 用于自动编译系统, 第 6.2 节 描述的过程中。

20

此 target 被 dpkg-buildpackage -A 使用。

21

这使用了新的 debhelper V7 特性。它的设计理念在 Not Your Grandpa's Debhelper 中有详细解释。这个幻灯片被 debhelper 上游作者于 DebConf9 时展示。在 lenny 中,dh_make 会创建一个复杂很多的 rules 文件,其中带有一系列 dh_* 脚本命令来完成所需要的各个 target。这个新的 dh 命令更加简单灵活。你仍然可以通过 override_dh_* target 来对任意 target 进行定义。参看 定制 rules 文件, 第 4.4.3 节。它仅是基于 debhelper 软件包而不像 cdbs 那样使编译过程模糊不清。

22

你可以通过 dh --no-act targetdebian/rules -- '--no-act target' 来模拟编译过程并查看实际要执行的 dh_* 程序。

23

此处默认 python-support 软件包已经安装在系统中。

24

对于所有的 dh_* 脚本实际做的工作以及它们可以使用的选项,请阅读它们的 man 手册页和 debhelper 文档。

25

这些命令支持其他例如 setup.py 的编译环境,可以通过在软件包源代码目录执行 dh_auto_build --list 列出。

26

实际上是依次考虑 distcleanrealcleanclean 之一并执行。

27

实际上是依次考虑 testcheck 并执行。

28

如果一个软件包安装了 /usr/share/perl5/Debian/Debhelper/Sequence/custom_name.pm 文件,你应当使用 dh --with custom-name $@ 命令激活其功能。

29

dh_pysupportdh_pycentral 命令之间更推荐使用前者,不要使用 dh_python 命令。

30

lenny 下,如果你希望更改某个 dh_* 脚本的行为,你需要在 rules 中找到相应的行然后进行调整。

31

gentoo 软件包使用 GNU 编译系统,又称 Autotools。参看 http://en.wikipedia.org/wiki/GNU_build_system

32

没有参数的 dh_auto_build命令将执行 Makefile 中的第一个 target。

33

debian/changelogdebian/NEWS 总是会被自动安装。程序会不分大小写地搜索以下文件名来检测上游 changelog:changelogchangeschangelog.txtchanges.txt

34

这取代了已经废弃的 dh_movefiles(1) 命令,它本是用 files 文件所配置的。

35

如果命令没有 info 信息页但在 /usr/share/package 目录中有其他文档,你应该手工编辑 help2man 命令所创建的 man 手册页。

36

squeeze 的列表和以前的有了较大的调整。

37

尽管我使用了 Bash 短表达式在此处指出这些文件是 {post|pre}{inst|rm},但仍然建议你在这些 maintainer scripts 中尽可能地使用纯粹的 POSIX (非 Bash)脚本来提供最佳的兼容性。

38

参看 DebSrc3.0 了解转换到新的 3.0 (quilt)3.0 (native) 源代码格式时的总结考虑。

39

实际上新格式还支持多个上游 tarball 和更多的压缩方法,但这已超出本文档讲述的范围。

40

有多种不同的补丁维护方式被用于 Debian 软件包中,而 quilt 系统则是其中的首选。其他系统还包括 dpatchdbscdbs 等。这些中的很多也将补丁保存于 debian/patches/* 文件中。

41

如果你需要一个 sponsor 上传你的软件包,这种情况下,清晰的软件包分解和对你做出的更改的描述对于软件包的审查都非常重要。

42

你可以使用 --skip-patches 选项来在正常的是否操作后避免应用 3.0 (quilt) 源代码包格式中的 quilt 补丁。你也可以在正常解压后使用 quilt pop -a 恢复这些补丁对源码的修改。

43

实际的自动编译系统涉及到比这篇文档所叙述的复杂许多的预设,这些细节已经超出了本文档的范围。

44

和在 pbuilder 中不同,自动编译系统使用的 sbuild 所维护的 chroot 不强制要求最小化的编译系统,并可能保持很多软件包始终安装在其中。

45

pbuilder 软件包仍然在改进中,你可以查看最新的官方文档来检查实际的配置状况。

46

此处默认 HOOKDIR="/var/cache/pbuilder/hooks"。你可以在 /usr/share/doc/pbuilder/examples 目录中找到很多钩子脚本的例子。

47

升级你的 stable 软件包有规定限制。

48

对于资深打包人员,有以下几个可用的资源:

49

常规情形下被配置好的环境变量在此时不会被自动设置。永远不要将使用这个 快速 方法构建的软件包上传到任何地方。

50

如果你按照 debuild 命令, 第 6.4 节 中的叙述定义了 /etc/devscripts.conf~/.devscripts 文件,就不需要再添加 lintian 选项 -i -I --show-overrides

51

dput 软件包提供了更多的特性,相比于 dupload 也越来越受欢迎。它使用 /etc/dput 文件作为全局配置文件、~/.dput.cf 作为用户配置文件。它也直接支持 Ubuntu 相关的服务。

52

参看 ftp://ftp.upload.debian.org/pub/UploadQueue/README。另外你也可以使用来自 dputdcut 命令。

53

要获得需要的日期格式,使用 LANG=C date -R

54

如果软件包 foo 是使用旧的 1.0 格式的,可以在新解压的源代码目录里运行 zcat /path/to/foo_oldversion.diff.gz|patch -p1 来完成。

55

如果 uscan 命令下载并更新了源代码,但没有运行 uupdate 命令,你应该修正 debian/watch 文件,使 URL 末尾后带有 debian uupdate

56

如果你的 sponsor 或其他维护者一定反对更新已有的打包风格,则不值得去为此烦恼或争论,总是有更重要的事要做。

57

cdbs (0.4.74)软件包中有一些对于 dh_make 创建的非 cdbsrules 文件的消极描述。不要担心它们,它们仅是针对于 lenny 中需要列出大串的 dh_* 命令而言的。

58

你可能使用 splitdiff 命令将 big.diff 分割为多个有各自作用的补丁。


Debian 新维护人员手册

版本 1.2.25, 2010-12-22 12:44:34 UTC

Josip Rodin joy-mg@debian.org

翻译:Aron Xu happyaron.xu@gmail.com
翻译:李凌 lilingv@gmail.com
翻译:郑原真 ycheng@slat.org