用 apt-get 節省系統開發和評估的時間
使用 Debian 系統(包括 Ubuntu)的人,應該早就熟於使用 apt-get 去安裝、移除或更新系統,其無痛和方便的操作,帶給 Debian 家族很大的優勢。而對於研發人員而言,我們比較在乎的是如何取得各套件的程式碼,更在乎的是能在『不出錯』的情況下將取得的程式碼完整編譯通過。
你可能碰到過一種情況,辛辛苦苦從各程式的專案首頁去抓回 Source Code 後,卻怎麼也無法在自己的電腦上編譯,單純點的情況是相依性問題,複雜點則是在不同系統上的相容問題,更誇張的是根本不清楚下載回來的 Source Code 是不是『真的沒問題』。相信很多人早已浪費過不少生命在這些麻煩問題上,導致開發效率低落,不過以上問題,卻在 Debian 裡相當容易解決,因為 apt-get 提供了一系列選項,讓我們輕易從下載原始碼、解決相依性問題、到確保通過編譯一次搞定。
從 apt-get 下載回來的程式碼,會在自動解開時將該 Package Maintainer 所做的 Patch 一併打進程式碼,以此方法解決系統相容性問題,這邊用 lxterminal package 為例,粗字部份就是在解壓縮時上的 patch:
再經過 apt-get build-dep 指令,會將 package 編譯需要的 library 或 Headers 安裝好,然後就可以接著用 ./configure 和 make 等步驟開始編譯了,如果沒有特殊意外(如:某些 package 需在 ./configure 的階段設定自有的參數),通常都會無痛編譯成功。
後記
通常在教育訓練或是和朋友談論研發議題時,總是推薦使用 Debian 系列的 Linux 發行版本(Debian 或 Ubuntu),通常原因就是其套件管理軟體能節省我們大量時間,而且其 Package 進入 Repository 的省核和驗證相當嚴格,並不容易得到壞的 source code package 。
你可能碰到過一種情況,辛辛苦苦從各程式的專案首頁去抓回 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 。
用 source based Gentoo Linux 也是很不錯的選擇喔!
回覆刪除Cross compiling 時很方便的. 尤其是當有 customize package features 時特別好用 (以 global USE flag 完成), 不需要一個一個去調整.
麻煩的是有時候會 build 失敗要自已找問題, 安裝時間也會長些.