The way to fix Ubuntu
修正 Ubuntu 的方法
自我介紹
Canonical 軟體工程師,專長是客製化與安裝 Ubuntu 系統到任何硬體上面,還有修 Bug。
多年經驗的自由軟體開發者,偶而也會使用其它的 Linux Distribution,有打包 RPM Package 的經驗,主要是 Debian/Ubuntu 系統的使用者。
週二 TOSSUG 台北土虱社群 (值日生)
週四 Hacking Thursday (婚後比較少去)
http://www.hackingthursday.org
Ubuntu Edge 需要贊助
0. 前言
請開始弄髒自己的手,動手去做點真正的事情。
FLOSS 需要大家的實際參與。
可是我不會耶...
去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!去學!
1. 確認問題是如何發生的
所需技能:
找出可以複製問題的步驟
交叉驗證找出來的步驟
例如:
我在軟體中心找不到 PCManX GTK+ BBS Client 耶~
我在好幾台不同的 Ubuntu 系統上面都是同樣的狀況。
2. 找尋是否有現存的 Bug
所需技能:
English Read/Write
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系統整個強制關機耶~
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
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
謝謝大家
<(_::_)>