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

使用 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 。

留言

  1. 用 source based Gentoo Linux 也是很不錯的選擇喔!
    Cross compiling 時很方便的. 尤其是當有 customize package features 時特別好用 (以 global USE flag 完成), 不需要一個一個去調整.
    麻煩的是有時候會 build 失敗要自已找問題, 安裝時間也會長些.

    回覆刪除

張貼留言

這個網誌中的熱門文章

有趣的邏輯問題:是誰在說謊

Web 技術中的 Session 是什麼?

淺談 USB 通訊架構之定義(一)

淺談 USB 通訊架構之定義(二)

Reverse SSH Tunnel 反向打洞實錄