当两个 apt 软件包依赖于同一软件包的两个不同版本时会发生什么?

当两个 apt 软件包依赖于同一软件包的两个不同版本时会发生什么?

假设这MyPackage.deb取决于 GTK 2.19,因为它基于 2.20 中已弃用的功能。当我想要apt-get install TheirProgramordpkg -i TheirProgram.deb并且 GTK 2.21+ 是必需的依赖项时会发生什么?遇到这样的情况我该怎么办?

答案1

一般来说,引入向后不兼容性的库的新版本应该更改其soname,然后这将产生一个新的包名称对于运行时库(例如对于 GTK+,libgtk2.0-0libgtk2.1-0/或任何合适的)。在不遵循此规则的情况下引入破坏性版本升级通常被认为是一个严重的错误。

这意味着,在大多数情况下,两个运行时库以及依赖包都可以同时安装:您MyPackage.deb将拉入旧库,TheirProgram.deb也会拉入新库。这在 Debian 库转换期间使用:当上传一个新的、向后不兼容的库版本时,过渡启动后,直到所有依赖包都被重建后,库的两个版本都可以在存档中使用。

当然,作为一般规则,发行版尝试一次只携带一个版本的库,因此旧库将从档案中消失,但只要您安装了它,MyPackage就应该继续工作。不过,您不会在旧版本的库上获得任何安全支持,并且不能保证它将继续工作(或者没有其他包会破坏它),因此从长远来看,您最好修复MyPackage以便它可以与较新版本的 GTK+ 一起使用。

如果新版本的 GTK+ 向后兼容,则包名称不会更改,但(错误除外)运行时库仍将允许MyPackage工作 - 因此安装TheirProgram将强制 GTK+ 升级,但MyPackage不应受到影响。 (它可能会在执行期间打印更多弃用警告。)

相关内容