2010年3月6日 星期六

淺談 debian packaging -3

既然要談 control 檔,當然不能不提到 maintainer's guide 裡關於 control 檔的說明
這份說明是關於 source package 中的 control 檔,與 binary package 裡的大同小異。

幾個比較主要的標籤有

  • Source: source package 的名字
  • Package: binary package 的名字
  • Section: 套件的分類。在 debian 裡,套件依授權的方式分為 main(完全採用自由授權的軟體)、contrib(本身是自由軟體,但依賴一些非自由軟體,比如 java-package - 將 sun 的 java 打包成 deb 檔的程式,打包程式本身是 GPL 的自由軟體,但它會去下載 sun 的 java,這就不是自由軟體了)、non-free(非自由的軟體,比如 sun-java)三大類,底下再依功能細分成文件、程式庫、網際網路…等等。
    而在 ubuntu 裡則是依授權和更新及支援的方式分成 main(由官方提供更新及支援的自由軟體)、universe(官方不提供支援的自由軟體)、multiverse(官方不提供支援的非自由軟體)、restricted(不提供原始碼的非自由軟體,主要是驅動程式)四大類,底下一樣細分成很多小類。
    如果看不懂 maintainer's guide 所寫的意思,這裡有幾張圖可以參考一下
    1. Aptitude 中文介面,multiverse/doc
    2. Aptitude 英文介面,main/doc
    3. Synaptic 中文介面,main/doc
    4. Synaptic 英文介面,main/doc
  • Priority: 套件的優先程度,這可以想成是「系統有多需要這個套件」。像是 adduser 的優先程度,在ubuntu 裡標為 important(重要),而 fuseiso 這個套件則是 optional(次要)。
  • Maintainer: 套件維護者的連絡方式,格式就是標準的 email 地址。
  • Architecture: 支援的 CPU 種類。最常見的就是 i386(INTEL 80386 相容的 CPU,幾乎INTEL、AMD 的 CPU 都算在內了)、amd64(64bit 的 CPU)、arm(常用於嵌入式系統的 ARM CPU),還有一個特殊的 any,如同字面上的意思,是和硬體無關的,比如文件檔或用 python、php、java 等語言開發的程式。
  • Description: 套件的說明


這些標籤只是比較一般性的標籤, deb 的偉大並不在此。
所謂好囧沈甕底,最重要的幾個標籤是(以下有部份引用 maintainer's guide 的內容)

  • Build-Depends: 要編譯 source package 時,所必要的套件
  • Depends: 想要安裝這個套件的話,必需要先裝某幾個特定的套件;也就是俗稱的「套件相依」
  • Pre-Depends: 它的要求比Depends:更強。除非它需要的套裝軟體已經安裝並且正確配置好,它才會被安裝。使用這個標籤是非常sparingly的,要使用它一定要先在debian-devel信件列表上討論完才可以。讀一遍這句話:絕對不要使用它。
  • Recommands: 推薦安裝的套件。這些套件雖然沒有相依性,不過通常你也會需要它 (比如 gedit 的 plugins:你不裝 gedit-plugins 也能使用 gedit,但裝了之後會方便不少。在 dselect 中這是一定要安裝的,aptitude 和 synaptic 則是預設會安裝 (但可以取消)
  • Suggests: 建議安裝的套件。這些套件也沒有相依性,雖然有關連,但一般來說,不裝也沒差。
  • Conflicts: 衝突的套件。這個完全如字面上的意思,所以應該不用解釋了吧(?)
  • Replaces: 當你的套裝軟體會取代一些其它套裝軟體的檔案或是是整個套裝軟體(與Confilicts:聯用)時,可以使用這個字串。這裡提到的套裝軟體中的檔案將會被你的套裝軟體中的文件覆寫。
  • Provides: 這個套件所提供的虛擬套件。虛擬套件的觀念會在接下來兩篇文章之一提到。

更細的資料可以直接看 maintainer's guide,算是寫的滿簡單易懂的了。

下篇預定來講更細一點的相依處理,所以八成會提到 apt :D