如何安装两个写入相同文件的包

如何安装两个写入相同文件的包

我有两个软件包,每个软件包都会创建 /usr/bin/ffprobe。其中一个是来自 Deb Multimedia 存储库的 ffmpeg,另一个是从源代码构建的 ffmbc 0.7-rc5。手动编译的软件包对业务至关重要,我们过去总是在需要时从源代码安装它。我只能假设它会破坏 ffmpeg 文件,而且从来没有任何不良影响。

理论上,我们的 ffmbc 包可以覆盖来自 ffmpeg 包的文件。但缺点是 ffmpeg 的更新会覆盖 ffmbc 二进制文件。有没有简单的方法可以解决这个问题?

答案1

在基于 Debian 的系统上,有 DPKG(apt 下方)可以消遣使用命令进行设置dpkg-转移

dpkg-divert 是用于设置和更新转移列表的实用程序。

文件转移是强制 dpkg(1) 不将文件安装到其位置而是安装到转移位置的一种方式。... 系统管理员还可以使用它来覆盖某些软件包的配置文件,或者在安装包含这些文件的较新版本的软件包时,dpkg 需要保留某些文件(未标记为“conffiles”)。

因此,对于您的情况,您可以使用这样的命令来设置转移。(我还没有测试,请检查手册页并验证这是否正确。)

dpkg-divert --local --divert /usr/bin/ffprobe.ffmpeg --rename /usr/bin/ffprobe

答案2

我发现的另一个解决方案是改变我构建 ffmbc 包的方式。通常,可以传递备用前缀以更改已安装文件的最终路径:

./configure --prefix=/usr/local

对于 Debian 软件包,其在 ${package}/debian/rules 文件中如下所示:

override_dh_auto_configure:
    ./configure --enable-gpl --prefix=/usr/local

通过将 ffmbc 文件放入/usr/local,我可以保留 ffmpeg 文件/usr并允许每个包独立更新。

答案3

提供相同文件的软件包应该相互冲突——如果它们不冲突,则存在错误(请考虑报告此类情况)。如果您从源代码构建软件并使用make install(或类似)进行安装,请确保它转到/usr/local以避免与软件包管理发生冲突。

请注意deb-多媒体.org是一个已弃用的非官方存储库,因与官方软件包发生冲突而臭名昭著。

如果你需要的软件没有打包Debian然后你就可以提交包装请求征求建议书但请检查现有请求第一的。

相关内容