为不同的基于 Debian 的发行版构建相同的源代码包

为不同的基于 Debian 的发行版构建相同的源代码包

我想从同一源为不同版本和发行版构建多个 .deb 包。即使源代码完全相同,debian 文件夹中的某些文件也无法共享,因为依赖项和发行版名称不同。

因此,我想为每个版本/发行版创建多个“debian”目录,并指定在构建包时在哪里搜索它。是否可以?

供您参考,我正在使用 debuild 命令来构建 .deb 包。

答案1

使用不同的分支是一种方法,如果合适的话我可以建议对 @mestia 的答案进行编辑(但请继续阅读......)。

另一种方法是并排保存不同的文件;看索拉尔举个例子。

但这两种方法都有一个显著的缺点:它们不适用于 Debian 或 Ubuntu(或其他衍生产品)中的软件包。如果您打算将来在发行版中安装软件包,则应该以这样的方式打包它,即同一组文件在各种发行版中都能产生正确的结果。

有关此示例,请查看Solar 的 Debian 包装(全面披露:我做了包装)。

总体思路是问dpkg-vendor分布是什么;因此对于在 Debian 和 Ubuntu 中具有不同依赖关系debian/rules的Solar

derives_from_ubuntu := $(shell (dpkg-vendor --derives-from Ubuntu && echo "yes") || echo "no")

并进一步向下覆盖以dh_gencontrol根据需要填写“substvars”:

override_dh_gencontrol:
ifeq ($(derives_from_ubuntu),yes)
        dh_gencontrol -- '-Vsolaar:Desktop-Icon-Theme=gnome-icon-theme-full | oxygen-icon-theme-complete' -Vsolaar:Gnome-Icon-Theme=gnome-icon-theme-full
else
        dh_gencontrol -- '-Vsolaar:Desktop-Icon-Theme=gnome-icon-theme | oxygen-icon-theme' -Vsolaar:Gnome-Icon-Theme=gnome-icon-theme
endif

这将填写适当的变量debian/control

Package: solaar
Architecture: all
Depends: ${misc:Depends}, ${debconf:Depends}, udev (>= 175), passwd | adduser,
 ${python:Depends}, python-pyudev (>= 0.13), python-gi (>= 3.2), gir1.2-gtk-3.0 (>= 3.4),
 ${solaar:Desktop-Icon-Theme}

Package: solaar-gnome3
Architecture: all
Section: gnome
Depends: ${misc:Depends}, solaar (= ${source:Version}),
 gir1.2-appindicator3-0.1, gnome-shell (>= 3.4) | unity (>= 5.10),
 ${solaar:Gnome-Icon-Theme}

您可以使用测试debian/rules来控制您可以在 makefile 中执行的任何操作,这意味着您可以将其与替代文件结合起来,例如,在包构建中使用适当的文件之前链接它们。

答案2

也许您可以将git-buildpackage不同的 debian 目录保留在不同的分支中。

相关内容