如何使用 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.