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



























