本文为读者 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> 补丁外的所有补丁,比较临时目录和源代码 |