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