【问题标题】:Can I add something like an anti-dependency to a debian package?我可以在 debian 包中添加类似反依赖的东西吗?
【发布时间】:2018-01-29 15:34:28
【问题描述】:

我有两个相同库的包,但 API 非常不同。每个库版本都应该有自己的包,例如lib1.deb 和 lib2.deb。 我不想重命名所有库和头文件以使它们可共存,但是一些库/头文件将具有相同的路径/相互覆盖。在“控制”文件中,当 f.i.使用 debuild 生成一个包,我可以以某种方式指定一个不能在安装我的其他包的同时安装的包吗? 如果在尝试安装 package2 时,apt 会自动删除 package1,那就太好了。我想我在安装软件包时已经看到了类似的东西。

【问题讨论】:

    标签: debian deb


    【解决方案1】:

    您仍然应该考虑使这些软件包可共同安装(想象一下,您需要安装一个图形程序,而apt 想要删除您的整个网络堆栈,只是因为一些“聪明”的软件包维护者认为它更容易输入Conflicts 而不是解决问题)。

    通常没有那么难:

    • 将所有头文件放入库特定的子目录中,例如/usr/include/lib1/ 分别。 /usr/include/lib2/(任何编写良好的库都应该提供一个需要更新的 pkg-config 文件)。

    • 通常,库文件很少,主要是 3 个(libfoo.so.x.ylibfoo.so.xlibfoo.x)。单独重命名它们应该很容易。 (再次更新您的 pkg-config 文件以反映名称更改)。

    最后:“同一个库的两个包,但具有非常不同的 API”总体上听起来是一个非常糟糕的想法。如果它们没有 same API/ABI,为什么它们是 same 库?

    哦,如果这只是关于(不兼容的)版本,这通常被处理为:

    • libfoo3 是带有 ABI 版本 3 的 libfoo 的包,例如它提供了/usr/lib/libfoo.so.3.14/usr/lib/libfoo.so.3,这是前者的符号链接
    • libfoo7 是带有 ABI 版本 7 的 libfoo 的包,例如它提供了/usr/lib/libfoo.so.7.42/usr/lib/libfoo.so.7,这是前者的符号链接)
      • libfoo-dev 是开发包,它为正确 ABI soname (/usr/lib/libfoo.so.3 resp /usr/lib/libfoo.so.7) 提供标题和符号链接/usr/lib/libfoo.so。这个包在正确的libfooX 上有一个Depends,使用精确的版本说明符。

    您只能安装一个版本的libfoo-dev(因为apt 禁止多次安装单个软件包)。 但是,您可以同时安装 libfoo3libfoo7(这对于使用它的应用程序很重要)。

    【讨论】:

    • 是否也可以拥有 libfoo3-dev 软件包或者这是一种不好的做法?并且包含目录将是 /usr/include/foo3 而不是 /usr/include/libfoo3 wrt 约定,对吧?
    • 如果您希望两个版本的开发人员包 (lib*-dev) 可共同安装,您当然可以libfoo3-dev。有许多软件包可以做到这一点(apt-cache search lib*[0-9]-dev),但这不是一种非常常见的模式。至于包含路径,两种约定都存在(只需检查您的 /usr/include 路径 - 例如,在这里我找到了 /usr/include/harfbuzz/usr/include/libsoup-2.4/)。如果版本号后缀特定于您的包,我认为通常使用破折号:/usr/include/foo-3
    【解决方案2】:

    嗯,在 stackexchange 上找到了一个帖子,内容涉及 https://unix.stackexchange.com/a/393243

    似乎有“Breaks”和“Conflicts”关键字https://www.debian.org/doc/debian-policy/#conflicting-binary-packages-conflicts

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-24
      • 2021-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-16
      • 1970-01-01
      相关资源
      最近更新 更多