debian目錄存放描述deb套件的行為和資訊。也是從原始套件(通常是tarball)中產生deb套件檔案的重要資料。
從Autotools tarball打包deb套件: 不嚴謹style有提到透過執行dh_make在解壓縮目錄下面產生debian目錄。這次的主題是debian目錄下面的資訊,主要是參考Debian New Maintainers’ Guide的第四章。
Debian套件強制規定debian目錄下面要有control, copyright, changelog三個檔案以及rules這個執行檔。分別討論說明如下。
目錄
debian/control檔
從Autotools tarball打包deb套件: 不嚴謹style產生的control內容為:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
詳細檔案規範可以參考:Debian Policy Manual Chapter 5 - Control files and their fields。這邊只列出幾點說明
Source: 套件名稱Section: Debian套件分類有兩層- 第一層
main: 自由軟體,一般來說沒有特別指定的預設值。也就是說如果是main/devel直接使用devel就可以了。non-freecontrib: 基於non-free軟體衍生的軟體
- 第二層
admindeveldoclibsmailnetx11- …
- 第一層
Priority:上傳時管理者有權限修改套件的優先權。requiredimportantstandardoptional: 新的套件不和上面優先權套件衝突時通常使用該權限。extra: 新的套件和上面優先權套件衝突時使用該權限。
Maintainer: Bug tracking system發生錯誤時聯絡的信件。Build-Depends: 從原始碼編譯成binary時需要的套件,例如libtool或是autoconf等。Standards-Version: 遵循的Debian Policy Manual版本Homepage:不解釋Package: 套件名稱Architecture:any: 任何平台皆可,通常是需要編譯的套件。all: 套件和平台無關,可能是文件、圖片會是直譯式的語言套件。
Description: 80字元寬度,總字數不建議超過60字元。- 套件原始碼VCS: 以git為例
Vcs-Git: Git repository URLVcs-browser: 瀏覽器可瀏覽的Git repository URL
和其他相關套件的關係描述
Depends: Must have.Recommends: Nice to have. 安裝套件程式如apt-get或是dpkg會出現提示訊息詢問使用者是否安裝Recommends的套件。Suggests: apt-get或是dpkg不會提示這些套件,但是aptitude會詢問。Pre-Depends: 少用的關係描述,比Depends強。Conflicts: 除非衝突的套件有被反安裝,否則不與安裝。Breaks: 安裝該套件將會把Breaks裏面的套件搞爛。通常表示Breaks裏面的套件該被更新到新的版本。Provides: 因為版本相容考量或是其他因素,一個系統中可以由不同套件提供相同功能。這就是Virtual packages概念。不同的套件可以透過Provides提供類似的功能。Replaces- 和其他相關套件的關係表示法為:
<<: 低於<=: 低於或等於=: 等於>=: 高於或等於>>: 高於- 範例:
1 2 3 4 5 | |
- 另外 ${shlibs:Depends}, ${perl:Depends}, ${misc:Depends}這樣的描述是給debhelper呼叫相對的計算相依性程式。有興趣的人可以
man dh_shlibdeps或是man dh_perl等取得更多資訊。
debian/copyright檔
原始套件的版權聲明。除了版權聲明外,還有一些maintain資訊。maintainer可以直接修改dh_make產生的範本。
常見的版權可以透過dh_make --copyright 版權(ex: gpl2, bsd)自動產生debian/copyright檔。如果沒有原本套件的版本,可以搜尋/usr/share/common-licenses/下面是否有符合的版權宣告。再沒有就必須手動修正該檔了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | |
debian/changelog檔
dpkg或是其他套件管理工具會參考這檔案取得版本號碼等資訊。另外這個檔案會被存放到/usr/share/doc/套件名稱/changelog.Debian.gz。
詳細規範可以參考Debian Policy Manual, 4.4 “debian/changelog”。簡單說明如下
- 第一行提供下面資訊:
- 套件名稱。
- 套件版本。
- 套件應該上傳到FTP的dists的哪個目錄,如unstable或是testing,新的套件通常是unstable。
- 緊急度:新的套件通常是low 。
- 接下來是以
*開頭的更動說明。第一次的更動,可以看到ITP。ITP是Intent To Package,新的套件會在Debian bug tracking system發出需求。所以會有對應的issue number。詳細可以參考Work-Needing and Prospective Packages需要maintainer或是期望的新套件認領流程。
1 2 3 4 5 | |
debian/rules執行檔
這是dpkg-buildpackage會呼叫到的script,這些script本質上就是Makefiles。需提供下面的target:
- 必備target
- clean
- build
- build-arch
- build-indep
- binary
- binary-arch
- binary-indep
- 可有可無的target
- install
- get-orig-source
- install
很恐怖嗎?基本上dh_make完在debian就會順便幫你產生一個預設的rules執行檔範例。基本上就是呼叫dh執行檔,列出如下
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
dh是一個wrapper,會根據參數呼叫其他的script如dh_testdir, dh_auto_clean, dh_clean等。另外產生binary時手冊上面使用fakeroot模擬root權限,主要是將要安裝到系統的執行檔、函式庫、設定檔等安裝到假的root filesystem然後打包成deb檔。手冊的範例如下:
fakeroot debian/rules binaryfakeroot debian/rules binary-arch
請注意的dh_make產生的rules範本在面對複雜的套件可能會有非預期的錯誤,此時人肉修改rules script將會是無可避免的事。
關於rules和dh的詳細用法這邊偷懶省略,請讀者自行參考手冊。