我有两个 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 拥有的文件。当然,这只是一个快速解决方案,而不是长期解决方案。