创建 deb 包时如何强制覆盖文件?

Rdl*_*dlP 4 debian dpkg debian-installer deb

我正在尝试创建 programX.Y 的 deb 包,如果我使用以下命令生成 deb pacakge,则目标系统中可能存在相同的程序但其他版本(programX.Z):

dpkg-buildpackage -us -uc --source-option=--include-binaries --source-option=-isession
Run Code Online (Sandbox Code Playgroud)

当我尝试在具有其他程序版本 (programX.Z) 的系统中安装 pacakge 时,我得到:

dpkg: error processing programX.Y.deb (--install):
    trying to overwrite `/usr/lib/XXX', which is also in package programX.Z
Run Code Online (Sandbox Code Playgroud)

我知道如果我通过 --force-overwrite 就可以解决问题,但我不想要那个解决方案。

问题是如何创建可以安装在系统中并自动强制覆盖的程序版本的 deb 包。一个例子可能是python。Python3 有很多版本(3.1、3.2、3.3、3.4、3.5...)。我想在安装了 python3.4 的系统中安装我的自定义 python 包版本 3.6。

有可能的?

Ste*_*itt 6

您无法创建与 等效的包--force-overwrite,但还有其他解决方案。

  • 包可以将冲突的文件移开;这称为转移,使用dpkg-divert.
  • 两个包共有的文件(使它们冲突)通常在第三个包中提供(假设它们相同)。这可能是您/usr/lib/XXX问题的合适解决方案。
  • 一个包的多个版本可以共同安装,如有必要,使用替代品或“默认”包选择默认值。这是 Python 解释器包、GCC 编译器采用的方法……目前在 Debian 不稳定版中,Python 3.5 和 3.6 可用并且可以并排安装;默认的 Python 3 (3.5) 是使用python3包集中的符号链接确定的。