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

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

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

dpkg-buildpackage -us -uc --source-option=--include-binaries --source-option=-isession

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

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

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

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

有可能的?

答案1

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

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

相关内容