Tutorial: Fixing a bug in Ubuntu

這個章節主要給你一個情境,如果你真的遇到一個問題 - 假設套件「bumprace」裡面有個小bug,你從頭到尾應該要怎麼處理它。

5.1. Confirming the problem

在套件「bumprace」的package description裡面,並沒有描述他的homepage。第一步你要確認的就是這個bug是否已經被解決了。要確認這個問題很簡單,看你要看一下Ubuntu Software Center或者是輸入:

apt-cache show bumprace

輸出應該會如同底下

Package: bumprace
Priority: optional
Section: universe/games
Installed-Size: 136
Maintainer: Ubuntu Developers <[email protected]>
Original-Maintainer: Christian T. Steigies <[email protected]>
Architecture: amd64
Version: 1.5.4-1
Depends: bumprace-data, libc6 (>= 2.4), libsdl-image1.2 (>= 1.2.10),
         libsdl-mixer1.2, libsdl1.2debian (>= 1.2.10-1)
Filename: pool/universe/b/bumprace/bumprace_1.5.4-1_amd64.deb
Size: 38122
MD5sum: 48c943863b4207930d4a2228cedc4a5b
SHA1: 73bad0892be471bbc471c7a99d0b72f0d0a4babc
SHA256: 64ef9a45b75651f57dc76aff5b05dd7069db0c942b479c8ab09494e762ae69fc
Description-en: 1 or 2 players race through a multi-level maze
 In BumpRacer, 1 player or 2 players (team or competitive) choose among 4
 vehicles and race through a multi-level maze. The players must acquire
 bonuses and avoid traps and enemy fire in a race against the clock.
 For more info, see the homepage at http://www.linux-games.com/bumprace/
Description-md5: 3225199d614fba85ba2bc66d5578ff15
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Origin: Ubuntu

如你看到,他並沒有Homepage的資訊,舉一個沒有這問題的例子,請看一下「gedit」的例子:

$ apt-cache show gedit | grep ^Homepage
Homepage: http://www.gnome.org/projects/gedit/
$

有時候你會發現你在找的問題其實已經被修復了,這時候就不要浪費時間,在這一步就該停了。

5.2. Research bug situation

第一步通常都應該要確認是否在Ubuntu上存在著這個問題,也許有人已經在處理了。在Ubuntu上你可以看一下「 https://bugs.launchpad.net/ubuntu/+source/bumprace 」,是否這邊有關於這個的open bug存在(當然現在這個問題已經解了-20160628)。 下一步我們在看一下Debian的頁面「 http://bugs.debian.org/src:bumprace 」看是否有相關的問題。 如果是在原始碼有問題的話,你也可以檢查一下Upstream的bug tracker,雖然每個套件的位置都會不太一樣,但是通常你去網頁上搜尋都會找的到。

Note 對於Ubuntu,URL:「 https://bugs.launchpad.net/ubuntu/+source/< package> 」通常都會跑到有問題的source package的bug頁面(意思是不會列出已經解掉的問題)。

Note 對於Debian,URL:「 http://bugs.debian.org/src:< package> 」通常都會跑到有問題的source package的bug頁面。

5.3. Offering help

如果你找到一個open bug,而且他並未被分配給任何人,然後你又有能力修復它,你應該要把你的解法給注解上去。請記得把詳細的訊息給寫上去,像是:在什麼樣子的狀況底下這個bug會發生?你如何去修復這個bug的?你如何測試?如果沒有任何一個bug report被發送,這樣你就可以發送一個bug上去。

5.4. Fixing the issue

我們先來找bumprace的主頁,要先確定他不是個目錄頁( catalogue ),網頁「 http://www.linux-games.com/bumprace/ 」似乎就是我們要的位置。

為了要找到有問題的點,所以我們應該要先下載原始碼:

bzr branch ubuntu:bumprace

如果你之前讀過「 the Debian Directory Overview 」,你應該記得,一個套件的homepage都會被描述在debian/control的第一個部分,這個章節會先開始於source:

cd bumprace

編輯 debian/control並且在這個部分的最後一行加入: Homepage: http://www.linux-games.com/bumprace/

完成了以後,儲存這個檔案,並且執行:

bzr diff

你就會看到如下訊息:

=== modified file 'debian/control'
--- debian/control      2012-05-14 23:38:14 +0000
+++ debian/control      2012-09-03 15:45:30 +0000
@@ -12,6 +12,7 @@
                libtool,
                zlib1g-dev
 Standards-Version: 3.9.3
+Homepage: http://www.linux-games.com/bumprace/

 Package: bumprace
 Architecture: any

有差異性的地方很好理解,加號(+)那一行代表就是被增加的部分。

5.5. Documenting the fix

下一個很重要的步驟就是要向其他會看到這段程式碼的工程師解釋一下你做了什麼事,如果你執行:

dch -i

這將會啟動一個 changelog entry的編輯器,然後你需要填入資訊。在我們的例子裡,加入注解「 debian/control: Added project's homepage. 」就可以了,然後儲存檔案,然後輸入底下指令再次確認:

bzr diff debian/changelog

然後你就會看到如下資訊:

=== modified file 'debian/changelog'
--- debian/changelog    2012-05-14 23:38:14 +0000
+++ debian/changelog    2012-09-03 15:53:52 +0000
@@ -1,3 +1,9 @@
+bumprace (1.5.4-1ubuntu1) UNRELEASED; urgency=low
+
+  * debian/control: Added project's homepage.
+
+ -- Peggy Sue <[email protected]>  Mon, 03 Sep 2012 17:53:12 +0200
+
 bumprace (1.5.4-1) unstable; urgency=low

   * new upstream version, sound and music have been removed (closes: #613344)

有幾件事可能要考慮一下:

  • 如果你的解法有參照到Launchpad的bug,則請加入 (LP: #< bug number>)到你的 changelog entry裡面(ie: (LP: #123456)。
  • 如果你想要你的solution包含在Debian裡面,Debian bug的語法是 (Closes: #< bug number>), ie: (Closes: #123456)。
  • 如果他參照到upstream或是Debian bug或是mailing list 的討論,最好也可以描述一下。
  • 嘗試著將你的描述限制在80個字裡面。
  • 嘗試具體的描述問題,而不是在寫散文,讓別人很快的就看的懂你在寫什麼。
  • 描述你如何(How)和在哪裡(where)修復這個問題。

5.6. Testing the fix

如果要測試你的code是否已經修復,你就必須要把整個環境建置起來,這部分在之前「Getting Set Up」裡已經描述過了,就是建置這個套件,安裝他並且驗證是否問題已經解決了。在這個問題,應該會如下:

bzr bd -- -S
pbuilder-dist <current Ubuntu release> build ../bumprace_*.dsc
dpkg -I ~/pbuilder/*_result/bumprace_*.deb

第一步我們從branch建置了 source package,然後第二步用pbuilder建置它,然後第三行在檢察是否Homepage已經被加進去了。所以代表我們已經解決了這個問題了,是時候向世界分享我們這結果了。

Note 在這個案例裡,因為只是要檢視套件資訊,所以不用安裝,如果是其他需要安裝的案例,則你必須要到路徑「 ~/pbuilder/_result 」裡找到 binary packages然後執行指令「 sudo dpkg -i .deb 」去安裝它,當然你也可以藉由file manager使用GUI去安裝它。

5.7. Getting the fix included

解決一個bug以後,當然最好是也要將它包含到upstream,這樣你就可以確保只要其他使用者下載這個套件就已經包含這個solution了,不用在下載套件後在手動去套用你的solution。因為Ubuntu是基於Debian,所以我們想要將這個解法送到Debian那邊,一旦他被包含進去了,它就會被Ubuntu給包含了。為了盡快解決這個bug,所以你必須將這個solution送到各方的bug tracker。

將這個patch送到Debian,只要簡單輸入:

submittodebian

這將會有一系列的步驟,來保證你的bug solution會到正確的地方,這邊當然也要增加該有的描述,請友善的描述他。如果這步驟成功了,你將會收到從Debian bug tracking system那邊寄來的信件,這封信會有更多的訊息。

Note 如果這個問題只有在Ubuntu,你或許只要考慮用「 Seeking Review and Sponsorship 」就好了。

5.8. Additional considerations

如果你發現了一個套件,且裡面有許多的東西你可以一次修復它,就處理它吧,這將會加快檢視的速度。 並且也建議分多次送出patches和merge request,因為如果其中有個bug已經存在了,這樣就會比較好分類並處理。


Ref:
http://packaging.ubuntu.com/html/fixing-a-bug-example.html

results matching ""

    No results matching ""