Debian 打包:如何防止“尝试覆盖”错误

Debian 打包:如何防止“尝试覆盖”错误

我有两个 Debian 软件包,它们之前都是在我们的内部存储库中制作的。它们都共享相同的源代码,但使用不同的选项进行编译,从而创建了两个具有相同库的单独二进制文件。它们应该安装在不同的服务器上

因此,这两个包不能同时安装,因为它们尝试安装相同的库,因此出现 dpkg 错误“试图覆盖 /my/lib”。

问题:我需要将它们安装在同一台服务器上。

问题是:我应该添加什么修改才能使它们兼容?

一些线索:

  • 从同一源创建第三个包,编译整个源而不是两个单独的源(但我猜这是肮脏的方法)

  • 找到一个选项来告诉这两个包可以互相配合(但我不知道它是否存在)

  • 创建一个“package-common”包,其中包含其他 2 个包所依赖的库、手册页等。(但我不知道如何以这种方式编译上游源代码)

我知道这个问题很难解释,特别是用糟糕的英语,但我希望你能给我一些线索:)

感谢社区!

答案1

第三个选项是最常见的。通常你会看到它被称为 -common 或 -base。它在很多地方都用于提供单独的库包以及文档包或插件。你实际上是从一个源创建多个包。大多数 -doc 包和 -common 包以及许多 lib* 包都是以这种方式创建的。

例如

package-base
package-option1
package-option2

package-option1 和 package-option2 都依赖于 package-base。这是最好和最安全的方法。Debian / Ubuntu 软件包存储库中有很多此类示例 - apache2、php5、dhcp3、nagios3、vim

dh_make 支持从一个源创建这些库包或多个二进制包,值得一试。

答案2

Phil 描述的通用基础包方法可能是最好的选择,但是如果你将一个包标记为替换另一个是它将允许包 B 覆盖包 A 拥有的文件。当然,这只是一个快速解决方案,而不是长期解决方案。

相关内容