The way to fix Ubuntu

修正 Ubuntu 的方法

Shih-Yuan Lee (FourDollars)

CC-BY-SA 3.0

COSCUP 2013, TICC, Taipei

自我介紹

Canonical 軟體工程師,專長是客製化與安裝 Ubuntu 系統到任何硬體上面,還有修 Bug。

多年經驗的自由軟體開發者,偶而也會使用其它的 Linux Distribution,有打包 RPM Package 的經驗,主要是 Debian/Ubuntu 系統的使用者。

http://about.me/fourdollars

週二 TOSSUG 台北土虱社群 (值日生)

http://www.tossug.org

週四 Hacking Thursday (婚後比較少去)

http://www.hackingthursday.org

Ubuntu Edge 需要贊助

0. 前言

請開始弄髒自己的手,動手去做點真正的事情。

FLOSS 需要大家的實際參與。

可是我不會耶...

去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!

1. 確認問題是如何發生的

所需技能:

找出可以複製問題的步驟

交叉驗證找出來的步驟

例如:

我在軟體中心找不到 PCManX GTK+ BBS Client 耶~

我在好幾台不同的 Ubuntu 系統上面都是同樣的狀況。

2. 找尋是否有現存的 Bug

所需技能:

English Read/Write

https://bugs.launchpad.net

Google Search

site:bugs.launchpad.net [關鍵字]

學習使用 apport-bug 及 apport-collect

2.1. 如果沒有現成的,就用 apport-bug 開一個新的。

使用說明:

man apport-bug

例如:

$ ps aux | grep software-center # 找出問題程式

$ apport-bug 5784 # 收集系統資訊

2.2. 如果有現成的 Bug 請用 apport-collect

使用說明:

man apport-collect

例如:

$ apport-collect 920377

2.3. 更多教學請參考以下連結

https://help.ubuntu.com/community/ReportingBugs

另外有一點建議,請盡量使用英文

Ubuntu 的開發者大多是外國人不懂中文,寫中文一點用處都沒有,除了一種情況例外,就是開發者大多是華人

另外,請不要中英混雜的回報問題,要嘛就全寫中文,要嘛就全寫英文。

3. 搜尋是否已經有解決問題的方法

所需技能:

直接堵軟體開發者

找到上游軟體的版本控制系統

在裡面找找看有沒有已經解決問題的方法

上游專案所使用的版本控制系統

CVS/Subversion/Mercurial/Git/...

上游專案所使用的程式語言及軟體開發架構

Assembly/C/C++/JavaScript/Java/Python/Ruby/Perl/PHP/...

3.1. 如果幸運的找到修正方法

所需技能:

相關系統元件的除錯知識

將上游的程式碼修正移植到 Ubuntu

Bazaar, Debian packaging, PPA, Launchpad

例如:

我的 Apple Magic Mouse 在快沒電的時候會讓 Ubuntu 12.04系統整個強制關機耶~

https://bugs.launchpad.net/bugs/1153488

3.1.1. 開始修正軟體套件

例如:

$ pull-lp-source upower precise # 將原始碼下載回來

$ edit-patch debian/patches/02-fix-bluetooth-issue.patch # 開始移植修正程式碼

$ dpkg-buildpackage -S # 打包 Debian source package

$ pbuilder-dist precise amd64 build upower_0.9.15-3git1ubuntu1.dsc # 打包 deb

3.1.2. 更多資訊請參考以下連結

3.2. 如果找不到現有的解決方法

所需技能:

自己跳下去解決問題,並且回報到上游。

理解軟體專案的 coding style, 文化與技術。

隨時都會打掉重練的心理準備。

溝通合作要有耐心,也許會等個一年半載,也許可能就此石沉大海。

3.2.1. 案例分享 一

https://bugzilla.gnome.org/show_bug.cgi?id=521751

目標:

讓 gnome-screenshot 支援不同的圖片格式

所需技能:

Git/GTK+/JHBuild

修正時間:2012-06-29 至 2012-09-05

合併時間:2013-04-30

總共修正了六次

3.2.2. 案例分享 二

http://www.eglibc.org/archives/patches/msg01234.html

目標:

讓 libc 裡面的 memcpy 在 ARM 平台上面能夠自動偵測 NEON 指令集的存在與否來進行最佳化

所需技能:

ARM Assembly, Debian packaging, Cross Compilation, Ubuntu installation on ARM

結果被 Linaro 工程師的成果蓋掉了。冏

3.2.3. 案例分享 三

http://lists.freedesktop.org/archives/devkit-devel/2013-August/001416.html

目標:

讓系統正確地辨示 Bluetooth Keyboard/Mouse 的電源

所需技能:

Linux kernel /sys, udev, UPower, dbus, gnome-settings-daemon, gnome-power-manager

正在進行中,COSCUP 前一天晚上才送出去。

4. 將 upstream 的修正 backport 回 Ubuntu

所需技能:

請參考 3.1.1. 以及 3.1.2.

再搭配 https://wiki.ubuntu.com/DistributedDevelopment 服用

4.1. 到 #ubuntu-release, #ubuntu-devel, #ubuntu-motu @ FreeNode 尋求值日生的協助

目標:

讓自己的修正能夠進到 *-proposed 中

需要技能:

English Communication on IRC.

http://webchat.freenode.net/?channels=#ubuntu-release,#ubuntu-devel,#ubuntu-motu

4.2. 驗證在 *-proposed 裡面的軟體套件

4.3. 等待一兩週就會進入 *-updated 了

需要技能:

耐心

Q&A

謝謝大家

<(_::_)>

The way to fix Ubuntu. - Google Slides