2010年1月25日 星期一

淺談 debian packging -1

debian packaging 並不是一門艱深的學問。目前已有許多工具可以作為輔助,讓沒有深入了解的人也能包出 deb 套件,方便散佈。但簡單的工具,相對來說較難處理麻煩、複雜的問題(尤其是在同時處理 source 和 binary package 的時候)。
未來打算以系列文章的方式,淺談一些 debian packaging 的相關知識、工具使用。

當然,最佳的知識來源,莫過於 debian-policymaintainer's guide (也有中文版),以及 debhelper、dh-make 等相關套件的 manual pages。


debian 的 package 主要分成 source package 和 binary package 兩大類。顧名思義,source package 就是源碼,而 binary package 則是編譯後的程式(以及相關的資源)。這兩大類又依據不同的情況,而有不同的變化。

source package 可以再分為兩種狀況: native 和 non-native
native 的套件可以想成「原本就是為了 debian 而開發的程式,源碼中就已經包含了 debian/ 的目錄結構」。
相對地,non-native 則是「原本並非專為 debian 而開發的,需要由套件維護者來維護,以保證未來的安裝能合乎 debian-policy 的規範」。

native 的 source package 包含了三個檔案: 壓縮過的源碼(通常是 tar.gz 格式,但隨著版本的更新,目前也支援 bzip、lzma 壓縮,以及 pristine-tar 格式)、一個控制檔(副檔名是 .dsc)以及一個版本檢查檔(副檔名是 .changes)
non-native 只有源碼的部份比較不一樣。源碼包含了兩個檔案: 一個是原本的開發社群所釋出的源碼,與 native source package 相同,是壓縮後的 tar 檔案;另一個則是 debian/ 目錄結構,以及套件維護者為了讓安裝合乎 debian-policy 或者修正一些錯誤而對源碼的修改。這部份是以 diff 的形式存在,並且以gzip來壓縮 (也就是以 .diff.gz 的方式)。

binary package 只有 .deb 一個檔案。這個檔案的內容也很單純:一些關於這個套件的控制資訊,以及完整的程式檔案及目錄結構。你可以想像 .deb 是個很特殊的壓縮檔,dpkg 會先檢查控制資訊來確認,然後把他解壓到根目錄,最後再依控制資訊的要求,執行一些後續的設定。

下篇文章預定來談談 binary package 的運作,也許會順便聊聊從 source package 編譯成 binary package 的方法。