2010年9月8日 星期三

用 apt-get 節省系統開發和評估的時間

Standard
使用 Debian 系統(包括 Ubuntu)的人,應該早就熟於使用 apt-get 去安裝、移除或更新系統,其無痛和方便的操作,帶給 Debian 家族很大的優勢。而對於研發人員而言,我們比較在乎的是如何取得各套件的程式碼,更在乎的是能在『不出錯』的情況下將取得的程式碼完整編譯通過。

你可能碰到過一種情況,辛辛苦苦從各程式的專案首頁去抓回 Source Code 後,卻怎麼也無法在自己的電腦上編譯,單純點的情況是相依性問題,複雜點則是在不同系統上的相容問題,更誇張的是根本不清楚下載回來的 Source Code 是不是『真的沒問題』。相信很多人早已浪費過不少生命在這些麻煩問題上,導致開發效率低落,不過以上問題,卻在 Debian 裡相當容易解決,因為 apt-get 提供了一系列選項,讓我們輕易從下載原始碼、解決相依性問題、到確保通過編譯一次搞定。

# 下載套件原始程式碼:
apt-get source <package>
# 安裝該套件編譯過程必要的東西
apt-get build-dep <package>

從 apt-get 下載回來的程式碼,會在自動解開時將該 Package Maintainer 所做的 Patch 一併打進程式碼,以此方法解決系統相容性問題,這邊用 lxterminal package 為例,粗字部份就是在解壓縮時上的 patch:
$ apt-get source lxterminal
正在讀取套件清單... 完成
正在重建相依關係          
正在讀取狀態資料... 完成
NOTICE: 'lxterminal' packaging is maintained in the 'Git' version control system at:
git://git.debian.org/git/collab-maint/lxterminal.git
需要下載 293kB 的原始套件檔。
下載:1 http://ftp.tw.debian.org/debian/ sid/main lxterminal 0.1.8-2 (dsc) [1,372B]
下載:2 http://ftp.tw.debian.org/debian/ sid/main lxterminal 0.1.8-2 (tar) [280kB]
下載:3 http://ftp.tw.debian.org/debian/ sid/main lxterminal 0.1.8-2 (diff) [11.2kB]
取得 293kB 用了 1s (240kB/s)    
dpkg-source: info: extracting lxterminal in lxterminal-0.1.8
dpkg-source: info: unpacking lxterminal_0.1.8.orig.tar.gz
dpkg-source: info: unpacking lxterminal_0.1.8-2.debian.tar.bz2
dpkg-source: info: applying alt-number-key.patch
dpkg-source: info: applying hide-menu.patch
dpkg-source: info: applying fix_shortcuts.patch

再經過 apt-get build-dep 指令,會將 package 編譯需要的 library 或 Headers 安裝好,然後就可以接著用 ./configure 和 make 等步驟開始編譯了,如果沒有特殊意外(如:某些 package 需在 ./configure 的階段設定自有的參數),通常都會無痛編譯成功。

後記

通常在教育訓練或是和朋友談論研發議題時,總是推薦使用 Debian 系列的 Linux 發行版本(Debian 或 Ubuntu),通常原因就是其套件管理軟體能節省我們大量時間,而且其 Package 進入 Repository 的省核和驗證相當嚴格,並不容易得到壞的 source code package 。