来自一个来源的两个不同版本的二进制 Debian 软件包

drd*_*man 5 packaging debian

我正在考虑正确地 Debianizing 一个包,它在一个上游 tarball/git 分支中包含两个部分:

  • 用户空间二进制文件和库,版本 1.5.0(foobard二进制包)
  • 内核模块,版本 0.8.5 ( foobar-dkms)

问题是版本不同。在这种情况下,是否有任何理智和正确的方法可以从一个源包构建两个不同版本的二进制包?

如果可能,我想要比创建两个源包或将两个包版本化为 1.5.0(即使模块MODULE_VERSION在源中正确指定)更简洁的东西。

Ste*_*itt 5

Debian 中二进制包的版本由 决定dpkg-gencontrol,它会生成最终的控制文件,该文件最终出现在二进制包中。该-v选项指定版本号;默认情况下,版本号取自debian/changelog,但可以被覆盖。

档案中有一些这样的例子;例如,请参阅我自己的gcc-mingw-w64包,它有自己的(源)版本号,但生成二进制包,其版本合并底层gcc-source(当前gcc-7-source)版本号和源包的编号。因此,在 Debian 9 中,gcc-mingw-w64版本 19.3 生成版本为 6.3.0-18+19.3 的二进制包。

要从单个源构建具有不同版本的不同二进制包,您可以将该-v选项与该-p选项(指定要处理的包)结合起来,并根据需要多次运行dpkg-gencontrol(或其包装器之一,例如)。dh_gencontrol

存档中至少有一个包演示了这一点:android-sdk-meta构建具有两个不同版本的二进制包(android-sdk采用源版本),以及其他四个包,其二进制版本在debian/rules.

有关控制字段的Debian 政策章节更详细地介绍了源控制文件和二进制控制文件之间的差异。