我正在考虑对一个包进行正确的 Debian 化,该包在一个上游 tarball/git 分支中包含两个部分:
- 用户空间二进制文件和库,版本 1.5.0(
foobard
二进制包) - 内核模块,版本 0.8.5 (
foobar-dkms
)
问题是版本不同。在这种情况下,是否有任何明智且正确的方法可以从一个源包构建两个不同版本的二进制包?
如果可能的话,我想要比创建两个源包更干净的东西,或者将两个包的版本控制为 1.5.0(即使该模块MODULE_VERSION
在源中已正确指定)。
答案1
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 政策控制字段章节有关源控制文件和二进制控制文件之间差异的更多详细信息。
答案2
您可以检查洋泾浜示例。它从一个来源生成 libpurple0、pidgin、pidgin-data、pidgin-dev、pidgin-dbg、finch、finch-dev、libpurple-dev、libpurple-bin 软件包。
获取来源:
http://packages.debian.org/squeeze/pidgin
[pidgin_2.7.3-1+squeeze2.dsc] [pidgin_2.7.3.orig.tar.bz2] [pidgin_2.7.3-1+squeeze2.debian.tar.gz]
控制构建的文件是 debian/rules。更多信息请访问:
http://www.debian.org/doc/debian-policy/ch-source.html
http://www.debian.org/doc/manuals/debian-faq/ch-pkg_basics.html
答案3
在 Debian 和 Ubuntu 软件包中,版本是在debian/changelog
文件中指定的,其设计目的是使源软件包生成的所有软件包都具有完全相同的版本。