如何使用 reportbug 在 Debian 中报告问题

我们强烈建议您在 Debian 中报告问题、缺陷与错误时使用 reportbug 程序。

reportbug 在大多数系统上已默认安装。如果在您的系统上暂时不可用,您可以使用软件包管理工具进行安装。

reportbug 工具可以从图形界面系统菜单中的系统分区中找到并启动,您也可以在命令行输入 reportbug 来启动它。

该程序将引导您一步一步完成缺陷报告流程。

如果您对 reportbug 提供的交互式功能有疑问或者其功能无法满足您的需求的话,请参考本文后面叙述的文档内容,或者在 Debian 用户邮件列表(英文)Debian 中文邮件列表询问。

如何使用电子邮件向 Debian 报告 bug(含 reportbug 的高级用法)

在您发送缺陷报告之前需要了解的东西

您的报告应当归属哪个软件包之下?

您需要知道您的缺陷报告应该针对哪一个软件包进行提交。请查看这个例子以了解您该如何获取这类信息。 (您还可以通过这些信息了解到您的缺陷报告是否已经被其他人提交过了。

如果您无法确定您的报告应该针对哪一个软件包提交,请向 Debian 用户邮件列表发送邮件询问以得到建议。

如果您遇到的问题并不仅仅和某个单一的软件包相关,而是和某些一般的 Debian 服务有关的话,我们有一些 pseudo-packages (即“伪软件包”)以及 邮件列表。这些设施可以帮助您将相关的信息转递给我们。

您的缺陷报告是否已被提交过了?

在提交报告之前,您应该检查您的缺陷报告是否已被他人提交过了。即,其他人已经提交了一份报告描述了相同的问题。 如需查找某个软件包中已经被提交的问题报告列表,您可以使用缺陷搜索表格中的“package”(软件包)选项进行查找。 如果已经存在一个编号为“#<number>”且与您遇到的问题相同的报告的话,您应该以向收件人为“<number>@bugs.debian.org” 的电子邮件地址发送电子邮件以附加您的评论。此时请不要提交一个新的缺陷报告以避免重复。

请为不同的问题各自提交报告

请不要在单一的缺陷报告中描述多个不相关的问题。当这些问题分属不同的软件包时更是如此。请为每个问题提交各自独立的报告。

避免直接向上游提交报告

如果您已经在 Debian 中提交了一份报告,请不要将其副本原封不动地向上游再报告一份,因为这个问题很可能只在 Debian 中出现。如果真的必要的话,软件包维护者会帮忙将报告 转发给上游。

使用电子邮件发送缺陷报告

您可以使用发送电子邮件的方式向 Debian 提交一份新的缺陷报告,下文将具体描述操作方法。您的电子邮件应当发往 [email protected],并采取后文中描述的特殊文本格式。 reportbug 工具(参见前文)实质上是自动帮助您撰写了合适格式的电子邮件并进行提交。可能的话,请尽量使用该工具!

信头

和其它电子邮件一样,您应该在您的邮件中写上一个明晰、描述性的Subject (主题、标题)行。这个标题将为作为追踪系统中报告的初始标题,所以请尽可能地在标题中提供有用的信息!

如果您想要将这份缺陷报告的副本发送给其它的接收者(如邮件列表)的话,您不应该在电子邮件头部写上收件人(即不应该使用标准的抄送、密送方式)。 此时您应该采用一种特殊的方式进行,详见下文

伪信头(Pseudo-Headers)

您的缺陷报告正文的第一部分是伪信头(pseudo-headers),其中应该包含一些与报告相关的信息,如这个报告所针对的软件包名称、对应软件包的版本等等。 邮件正文的第一行必须是一个伪信头信息。它的内容应该是:

Package: <packagename>

请将 <packagename> 替换为 软件包的名称,这个软件包应该存在您正在报告的问题或缺陷。

邮件正文信息的第二行应该是:

Version: <packageversion>

请将 <packageversion> 替换为软件包的版本。除了版本字符串以外,这里请不要填入其它任何文本; 因为缺陷追踪系统需要使用该信息推断出哪些 Debian 发行版本受到该问题的影响。

为了让缺陷追踪系统能够将您的信息正确地转发到软件包维护者处,您需要在伪信头部分提供正确的 Package(软件包名称)一行内容。 请参考 这个例子 以了解如何找到软件包名称的信息。

如需了解其它可用的伪信头,请见额外的伪信头

报告正文

请考虑在您的报告中提供以下信息:

请在报告中包含任何看起来会有点关系的细节——简单来说,报告提供的信息多多益善,您不用担心内容过多过长会有什么问题。如果内容不多的话, 不妨考虑一下顺带提供能够重现问题的任何相关文件。(如果报告真的已经很长的话,可以考虑将这些文件放在互联网上其它的地方,并在报告中给出指向的链接。)

如需了解更多能够帮助开发者解决问题的做法的建议,请阅读 如果有效地报告 Bug 一文。

一份示例缺陷报告

一份拥有信头和伪信头的缺陷报告的原文一般长得像这样:

  To: [email protected]
  From: [email protected]
  Subject: Hello says `goodbye'

  Package: hello
  Version: 1.3-16

  When I invoke `hello' without arguments from an ordinary shell
  prompt it prints `goodbye', rather than the expected `hello, world'.
  Here is a transcript:

  $ hello
  goodbye
  $ /usr/bin/hello
  goodbye
  $

  I suggest that the output string, in hello.c, be corrected.

  I am using Debian GNU/Linux 2.2, kernel 2.2.17-pre-patch-13
  and libc6 2.1.3-10.

如何将缺陷报告的副本抄送到其它电子邮件地址

有时候需要将缺陷报告的副本发送到除 debian-bugs-dist 列表和软件包维护者之外的地方。默认情况下,该报告仅会发送给对应软件包的维护者和上述的邮件列表。

当然,您可以将报告使用电子邮件抄送的功能发送给其它收件人。然而,这么做的问题在于这样的副本在 Subject(标题) 和 Reply-To(回复地址)部分不会包含缺陷报告编号的信息。当那位收件人打算对邮件进行回复时,他们很可能会回复到 [email protected] 这个地址,从而错误地产生一个新缺陷报告。这样最终会产生许多重复的报告。

真正正确的做法是使用名为 X-Debbugs-CC 的伪信头。请在您的邮件正文伪信头部分添加这样内容:

 X-Debbugs-CC: [email protected]

这样会指示缺陷追踪系统将报告的一份副本发送至您在 X-Debbugs-CC 伪信头一行中给出的地址。当然,该报告同样会发送至 debian-bugs-dist 邮件列表。

如果您想指定多个抄送的电子邮件地址,请把它们写入同一行 X-Debbugs-CC 中,并使用英文逗号分隔各个地址。

请避免用 X-Debbugs-CC 将这些副本发送至其它缺陷报告的对应地址,因为这样做会使得自动检测系统捕捉到邮件转发回环。无论如何,为此使用 X-Debbugs-CC 意义不大,因为该机制添加的缺陷编号会被新的编号所取代。此时使用通常的抄送(CC)头即可。

该功能通常也可以和 quiet 邮件共同使用,详情请见下文。

其它伪信头

问题严重性

如果您了解所报告问题的严重程度,您可以在提交报告时对其进行设置。这么做并不是必须的,而且软件包维护者会在您未给出严重性信息 (或者选择的严重性等级有误)时赋予该报告正确的严重性等级。

如需对报告赋予严重性等级,请在伪信头 部分添加如下面一行这样的信息:

Severity: <severity>

请将 <severity> 替换为某个可用的严重性等级。具体可用的等级列表可以在 高级文档中找到。

打标签

您可以为所报告的缺陷打上标签。例如,如果您在报告中包含了一个补丁,您可以为报告设置一个 patch 标签。这么做并不是必须的,其他开发者在合适的时候也可能为您的报告设置标签。

如需设置标签,请在伪信头部分加上这样的一行:

Tags: <tags>

请将上文出现的 <tags> 替换为一个或多个可用的标签,可用标签列表在高级文档中给出。使用英文逗号和/或空格分隔多个标签。

User: <username>
Usertags: <usertags>

这种情况下,请将 <usertags> 替换为一个或多个用户标签。使用英文逗号和/或空格分隔多个标签。如果您指定了一个 <username>(即用户名),系统将为该用户分配您指定的用户标签。否则系统将把提交者的电子邮件地址作为用户名来分配用户标签。

您可以在提交缺陷报告时为多个用户指定用户标签。要如此做,您需要添加多个 User 伪信头,而每一个 Usertags 伪信头都将为其上方最后一个 User 伪信头 设置用户标签。这在某些情况下十分有用,例如为含有多个用户的团队设置用户标签、为多个团队设置用户标签,或者为影响多个架构的缺陷 设置架构用户标签

User: <first-username>
Usertags: <first-username usertags>
User: <second-username>
Usertags: <second-username usertags>

设置(缺陷)转发信息

Forwarded: [email protected]

会将新提交的缺陷标记为已转发至 [email protected]。参见开发者文档中记录您将缺陷报告转交的情况部分以了解详细信息。

声明所有权

Owner: [email protected]

会指示 [email protected] 当前负责修复该问题。参见开发者文档中修改缺陷所有权部分以了解详细信息。

源码包

Source: foopackage

Package: 头的等价形式,用于指出在名为 foopackage 的源码包内存在的缺陷;对于大多数软件包中的缺陷,您大概没有必要使用这个选项。

控制指令

Control: 具体控制指令

使得所有本应由 [email protected] 接收的控制指令可以同样由发送至 [email protected] 或者 [email protected] 的邮件等效地被服务器处理。指令中出现的 -1 将代指当前缺陷报告编号(即,发送至 submit@ 的邮件即将创建的缺陷报告编号或发送至 nnn@ 的邮件中的编号)。请浏览BTS服务器控制指令文档以了解具体的可用控制指令。

例如,下面给出了发送至 [email protected] 的邮件中的伪信头示例:

Control: retitle -1 this is the title
Control: severity -1 normal
Control: summary -1 0
Control: forwarded -1 https://bugs.debian.org/nnn

将使得编号为 12345 的缺陷报告得到更名、其严重等级被修改、其简介信息得到设置并标记为已转发。

X-Debbugs- 信头

除此之外,如果您的 MUA 不允许您编辑信头,您可以在伪信头区域设置各个 X-Debbugs- 项以等效实现原信头的功能。

额外信息

不同的提交地址(用于不严重的问题或批量缺陷报告)

如果某个报告所涉及到的问题都是小问题,例如文档中的一处错字或是平凡的构建问题,请考虑将其严重等级适当进行设置(选用低等级),并将报告发送至 [email protected] 而非 [email protected]maintonly 将只会把报告转发至软件包维护者,它不会将其转发到 BTS 邮件列表中。

如果您打算同时提交许多报告,您肯定应当使用 [email protected] 来避免为 BTS 邮件列表带来瞬时大量的流量。在提交许多相似的问题报告之前,也请考虑在 debian-bugs-dist 邮件列表上发布一份概述信息。

如果您希望向缺陷追踪系统报告一个维护者已经知晓的问题的话,您可以使用 [email protected]。发送至 [email protected] 的报告将不会转发给任何人,仅用来归档。

当您设置了不同的提交地址时,缺陷追踪系统会相应地将所转发的邮件中 Reply-To 这一信头设置为与原始报告性质相同的回复地址。例如,对 maintonly 报告的回复将默认发送至 nnn[email protected] 而非 nnn@bugs.debian.org,除非回复者手工设置回复到不同的地址。

回执

通常情况下,每当您提交了一份新报告或为已有报告提交一份新信息后,缺陷追踪系统便会使用电子邮件向您发送一份回执信息。 如果您不想收到这类回执邮件的话,请在报告邮件的信头或伪信头处额外提供 X-Debbugs-No-Ack 一栏(其具体内容无关紧要)。如果您在提交新报告的同时添加了这份信头的话, 您需要自己使用追踪系统网页前端以查询报告的具体编号。

请注意这个信头不会停止来自 [email protected] 邮件服务器的回执邮件的发送;这是因为这些回执信息比较重要,其中有可能包含需要发送者进行处理的错误信息。

应对垃圾邮件和邮件丢失

缺陷追踪系统实现了一套比较完善的规则以确保垃圾邮件不会进入系统。尽管我们尽力确保错误拦截的情况少出现,但的确会出现垃圾邮件的误判。 如果您怀疑您的邮件被错误拦截的话,请联系 [email protected] 以寻求帮助。另一个时常导致邮件被错误拦截的因素是用户使用了能够匹配 procmail 中 FROM_DAEMON 项的邮件地址,通常包括类似于 [email protected] 的邮件地址。如果您怀疑您的邮件匹配了 FROM_DAEMON 特征,请阅读 procmailrc(5) 以进行验证,并重新使用不匹配 FROM_DAEMON 的新邮件地址重新发送邮件。

向未知软件包提交的缺陷报告

如果缺陷追踪系统不知道相关软件包的维护者的话,它会将报告转发给 debian-bugs-dist 邮件列表,且无论是否使用 maintonly 都将进行转发。

在发送邮件至 [email protected]nnn[email protected] 时,请确保您的报告指向正确的软件包,即在原始报告正文顶部放置了正确的 Package 行,或使用 [email protected] 服务 来正确(重)指定报告对应软件包。

使用dpkg寻找报告对应的软件包及其版本号

当您使用 reportbug 来报告某个程序的问题时,例如打算报告 grep 的问题时,下面的命令行参数可以帮助您正确选择软件包并直接开始撰写报告: reportbug --file $(which grep)

您也可以使用 dpkg --search 来找到提供该文件的软件包。您可以使用 dpkg --listdpkg --status 来了解您所安装对应软件包的具体版本。

例如:

$ which apt-get
/usr/bin/apt-get
$ type apt-get
apt-get is /usr/bin/apt-get
$ dpkg --search /usr/bin/apt-get
apt: /usr/bin/apt-get
$ dpkg --list apt
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Installed/Config-files/Unpacked/Failed-config/Half-installed
|/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad)
||/ Name           Version        Description
+++-==============-==============-============================================
ii  apt            0.3.19         Advanced front-end for dpkg
$ dpkg --status apt
Package: apt
Status: install ok installed
Priority: standard
Section: base
Installed-Size: 1391
Maintainer: APT Development Team <[email protected]>
Version: 0.3.19
Replaces: deity, libapt-pkg-doc (<< 0.3.7), libapt-pkg-dev (<< 0.3.7)
Provides: libapt-pkg2.7
Depends: libapt-pkg2.7, libc6 (>= 2.1.2), libstdc++2.10
Suggests: dpkg-dev
Conflicts: deity
Description: Advanced front-end for dpkg
 This is Debian's next generation front-end for the dpkg package manager.
 It provides the apt-get utility and APT dselect method that provides a
 simpler, safer way to install and upgrade packages.
 .
 APT features complete installation ordering, multiple source capability
 and several other unique features, see the Users Guide in
 /usr/doc/apt/guide.text.gz

其它有用的命令和软件包

querybts 工具,它由 reportbug 软件包提供。该工具提供了访问缺陷追踪工具的基于文本的简易界面。

Emacs 用户也可以使用 debian-el 软件包提供的 debian-bug 命令。在使用 M-x debian-bug 调用时,它会如 reportbug 工具一样按步骤询问您必需的信息。


其他错误追踪系统网页:


Debian BTS administrators <[email protected]>

Debian bug tracking system
Copyright © 1999 Darren O. Benham, 1997, 2003 nCipher Corporation Ltd, 1994-1997 Ian Jackson.