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

Joe*_*las 14 package-management debian ffmpeg apt

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

从理论上讲,我们的 ffmbc 包覆盖 ffmpeg 包中的文件应该是可以接受的。缺点是 ffmpeg 的更新会覆盖 ffmbc 二进制文件。有没有简单的方法来调和这个?

Zor*_*che 12

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

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

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

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

dpkg-divert --local --divert /usr/bin/ffprobe.ffmpeg --rename /usr/bin/ffprobe
Run Code Online (Sandbox Code Playgroud)


Joe*_*las 8

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

./configure --prefix=/usr/local
Run Code Online (Sandbox Code Playgroud)

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

override_dh_auto_configure:
    ./configure --enable-gpl --prefix=/usr/local
Run Code Online (Sandbox Code Playgroud)

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

  • 包不应该安装任何东西到`/usr/local`——这是违反政策的。`/usr/local` 的全部意义在于将包管理下的文件和手动安装的文件分开。请参阅以下 FHS 相关讨论:https://unix.stackexchange.com/questions/30/where-should-i-put-software-i-compile-myself (3认同)