如何让Debian打包生成两个软件包,基于上游源代码存档文件?

我正在为我的PPA打包一些东西。上游源是一个基于Makefile的.tar.gz归档文件。

由于这个软件包有大量与体系结构无关的数据,最好有构建脚本生成两个软件包:

  • 软件包名称
  • 软件包名称-data

我该如何设置这个?我已经编辑了我的Debian control文件以生成两个软件包,但我不知道如何将正确的文件放入正确的软件包。

由于数据文件目前都是通过Makefile安装的,所以我在这方面有点迷茫。

1个回答

这是一个我一直觉得文档不足的地方。我基本上是通过查看其他软件包的实现方式来学习它的工作原理的。在Debian打包中,像大多数事情一样,有几种方法可以做到这一点。我发现最简单的方法是使用debian/package.install文件。下面是我曾经参与开发的一个软件包imagination (bzr branch)的示例。
首先,我们需要在debian/control中创建软件包。现在有三个部分。一个用于源码软件包,每个二进制软件包都有一个。请注意,foo-data软件包应该是Architecture: all。还要注意,imagination依赖于imagination-common (= ${source:Version})
接下来,我们创建一个debian/imagination.install文件。这个文件包含了我们想要放入imagination软件包中的特定文件或路径。对于这个软件包,我们希望包含所有与架构相关的文件。桌面文件也被包括在内,因为它的Exec:行需要指定调用的二进制文件。
usr/bin/
usr/lib/
/usr/share/applications/imagination.desktop

我们需要创建一个debian/imagination-common.install文件。这个文件将包含所有的与架构无关的文件、图片、翻译、文档等内容。
/usr/share/doc/
/usr/share/icons/
/usr/share/imagination/
/usr/share/locale/

man dh_install在这里描述了实际发生的情况:

也许你有一个大型软件包,构建多个二进制软件包。您可以使用上游的Makefile将所有内容安装到debian/tmp中,然后使用dh_install将目录和文件从那里复制到正确的软件包构建目录中。

所谓“正确的软件包构建目录”是指在构建过程结束时,最终生成的foo.deb中的所有内容都将在src/debian/foo中找到。最终会出现在foo-data.deb中的文件将在src/debian/foo-data中找到。由于debian/rules本质上只是一个Makefile,您可以想象其他一些获得相同结果的方法。


非常感谢!解释得非常清楚,而且完美运作。 - Nathan Osman