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

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

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

在基于Debian的系统上有DPKG(在apt下面)可以使用dpkg-divert命令设置分支

dpkg-divert是用来设置和更新转移列表的工具。

文件转移是强制dpkg(1)不要将文件安装到其位置的方式,而是转移到的位置。 …系统pipe理员也可以使用它来覆盖某些软件包的configuration文件,或者当某些文件(不标记为“conffiles”)需要由dpkg保存时,安装包含这些文件的软件包的较新版本。

所以对于你的情况,你可以使用这样的命令来设置一个改道。 (我没有testing,检查手册页,并validation这似乎是正确的。)

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

我find的另一个解决scheme是改变我如何build立ffmbc包。 通常可以传递一个备用​​前缀来改变已安装文件的最终path:

 ./configure --prefix=/usr/local 

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

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

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

提供相同文件的软件包应该相互冲突 – 它不是一个错误(请考虑报告这种情况)。 如果您从源代码构build软件并使用make install (或类似软件) make install确保它转到/usr/local以避免与软件包pipe理发生冲突。

请注意, deb-multimedia.org已被弃用,因官方软件包的冲突而臭名昭着的非官方仓库。

如果您需要的软件不是为Debian打包的,那么您可以提交包装请求RFP,但是请先检查现有的请求 。