从编译源替换多个 Debian 软件包

从编译源替换多个 Debian 软件包

我必须从源代码存储库下载并安装库的一个版本。问题是 Kubuntu 包管理器中的其他包需要安装这个库。现在我正在使用 ffmpeg,但我以前必须这样做(例如 OpenCV),并且我正在寻找未来执行此操作的最佳方法......

所以我想做的是创建一个 debian 软件包,我可以使用 checkinstall 与 dpkg 一起安装它。我已经解压了 deb 文件来修改它,试图让它正常工作

问题是,ffmpeg 在包管理器中被分成多个包,如果不需要的话,我不想编写 5/6 个包来替换每个包。我已确保它已使用所有这些包所需的所有内容正确编译。

我一直在尝试使用“需要”和“替换”,但它似乎无法正常工作。当我之后尝试安装 VLC 时,它要求安装包管理器中的所有内容。我还确保版本号比包管理器中的版本号晚。

VLC 先决条件

这是我的 deb 控制文件中写入的内容。据我所知,这一切都在 muon 包管理器中被识别。

Package: ffmpeg
Priority: extra
Section: checkinstall
Installed-Size: 172216
Maintainer: root@skund
Architecture: amd64
Version: 8:1.2.1-git-2
Provides: ffmpeg,libav-tools,libpostproc52,libavdevice53,libavutil51,libavformat53,libavcodec53,libswscale2
Replaces: ffmpeg,libav-tools,libpostproc52,libavdevice53,libavutil51,libavformat53,libavcodec53,libswscale2
Description: Package created with checkinstall 1.6.2

这里它被安装在包管理器中:

ffmpeg 包管理器 ffmpeg 包管理器 2

有人对让它发挥作用有什么想法吗?

答案1

一方面,它Provides:不适用于指定版本的依赖项。来自Debian 政策手册,“虚拟包 - 提供”:

如果关系字段附加了版本号,则只有真正的包才会被考虑[...]。换句话说,如果指定了版本号,则这是忽略该包名称的所有 Provides 并仅考虑真实包的请求。

对库的依赖关系几乎总是有版本的。所以那是行不通的。

相反,您可以:

  • 下载 Debian 软件包 ( apt-get source PACKAGE) 并将其更新为最新的 ffmpeg(事实上,您甚至可以将所需的补丁发送到 Debian bug 跟踪器)。当然,您需要更新库的 sonames(我敢打赌 ABI 已更改),并且可能需要重建许多依赖于 ffmpeg 的东西。如果 API 发生变化,其中一些可能需要更改源代码。
  • 或者,简单的方法:将其安装到/usr/local.您可以构建其中.deb的一个,并为其指定一个不同的包名称(例如,local-ffmpeg)。然后您可以将它与 Debian 提供的 ffmpeg 一起安装,而不必担心上述所有问题。您也可以使用stow将其安装在/usr/local.

相关内容