deb 源代碼包新格式
本文為讀者 tumashu 在 man dpkg-source 過程中所作的閱讀筆記,其中包含 deb 源代碼新格式的一些介紹,也許有的朋友會感興趣。
一.新格式的優點
支持 bzip2、lzma (估計就是 7z 格式)、gzip 壓縮格式
支持多個上游 tarballs
支持包含二進制文件,舊格式使用 diff 文件(diff.gz)來存儲打包過程中對源代碼的改變,而 diff 文件是處理文本文件的,所以如果想添加一個二進制文件(比如 png 圖標),就需要使用 uuencode 把二進制文件轉換為文本文件,比較麻煩
不需要因為 strip debian 目錄而重新打包上游 tarball(debian 目錄在 deb 源代碼包解壓縮的時候自動被.debian.tar.{gz,bz2,lzma}里面的內容取代)
Debian-specific 的改變現在不是保存在單一的 .diff.gz 文件里面而是保存在 debian/patches/ 下的多個 patch 文件里。這種處理方式和 quilt 的處理方式兼容但不需要使用 quilt,因為 dpkg-source 可以處理所有的事情,它在解壓縮過程中使用 patch 文件,在構建二進制包的過程中更新 patch series
NMU workflow is now really: unpack, hack, rebuild (for all 3.0 (quilt) packages).
二.新格式的種類
Format:1.0
Format:2.0
Format:3.0 (native)
Format:3.0 (quilt)
Format:3.0 (git)
Format:3.0 (bzr)
三.Format:1.0 格式介紹
這個是原來的格式:一個 .dsc 文件,一個 .orig.tar.gz 文件,一個 .diff.gz 文件
四.Format:2.0 格式介紹
這個格式不建議廣泛使用,是個過渡格式
五.Format:3.0 (native) 格式介紹
這個格式是 Format:1.0 的擴展,可以支持多種壓縮方式{gz,bz2,lzma}
六.Format:3.0 (quilt) 格式介紹
這個格式可能被 debian 的下一個版本采用,它是 Format:2.0 的擴展,因為它補丁的處理方式和 quilt 兼容,所以如此命名
源代碼包的組成:
一個 .orig.tar.{gz,bz2,lzma}壓縮包,這個包是上游源代碼更名后得到的
一個 .debian.tar.{gz,bz2,lzma}壓縮包,這個包包含了 debian 化的所有更改
零個或者多個 .orig-<component>.tar.{gz,bz2,lzma},比如:.orig-hello.tar.{gz,bz2,lzma} 或 .orig-world.tar.{gz,bz2,lzma}。這是為了支持多個上游 tarball
一個 .dsc 文件
源代碼包的解壓縮:
orig 包首先解壓縮,產生一個目錄,比如:helloworld_0.1.1.orig.tar.gz 就會生成 helloworld-0.1.1 這個包含上游源代碼的目錄
所有 orig-<component> 解壓縮,產生一個目錄,比如:helloworld_0.1.1.orig-toy.tar.gz 就會生成 helloworld-0.1.1/toy/ 目錄,這個目錄包含 helloworld_0.1.1.orig-toy.tar.gz 里面所有的內容,原來存在的 helloworld-0.1.1/toy/ 將被取代 (man dpkg-source 這一段沒有看懂,可能理解有誤。)
debian 包解壓縮,生成 debian 目錄,比如:helloworld_0.1.1.debian.tar.gz 就會生成 helloworld-0.1.1/debian/ 目錄,原來存在的這個目錄在這個過程中將被刪除….注意:debian.tar.{gz,bz2,lzma}里面必須包含一個 debian 目錄,它也可以包含二進制文件。
應用補丁:文件 debian/patches/debian.series 或者 debian/patches/series 里面羅列的補丁。補丁必須是 patch -p1 的。補丁也可以刪除文件。如果在解壓縮過程中應用了某些補丁,那么 debian/patch/.dpkg-source-applied 文件會記錄它們。
和 quilt 的默認相似,這里使用補丁也可以刪除文件
源代碼包的構建:
更新 debian-changes-<version> 補丁:當前目錄中所有的源代碼包 (orig 包,component 包) 都會解壓縮到一個臨時目錄中,然后 debian 目錄也拷貝到這個臨時目錄最后打上除 debian-changes-<version> 補丁外的所有補丁,比較臨時目錄和源代碼所得補丁(如果不同),會保存為 debian/patches/<debian-changes-version> 補丁文件,任何二進制文件的變化都不會出現在 diff 中,否則會導致構建失敗,除非維護人員決定在 debian 包中包含二進制文件 (相對于源代碼目錄,在 debian/source/include-binaries 中列出添加或更改的二進制文件的文件名) 如果發現 debian 子目錄中有二進制文件,構建也會失敗,除非文件名已經在 debian/source/include-binaries 中列出。
更新 debian.tar.{gz,bz2,lzma}:通過更新的 debian 目錄和更改過的二進制文件 (列出的) 會重新生成 debian 包
注意:自動生成的 diff 不包含 VCS 描述文件和許多臨時文件 (參照 -i 選項) 的變化,例如:quilt 使用的 .pc 目錄在生成自動補丁時就會被忽略。
七.Format:3.0 (git)
這個源代碼格式是實驗性質的,也許會在 debian 的下下或者下下下個版本采用,也許永遠不會采用……這是源代碼包和版本控制系統 (git) 的結合,具體細節請:man dpkg-source。
八.Format:3.0 (bzr)
這個源代碼格式是實驗性質的,也許會在 debian 的下下或者下下下個版本采用,也許永遠不會采用………這是源代碼包和版本控制系統 (bzr) 的結合,具體細節請:man dpkg-source。
【編輯推薦】