rpm:决定软件包是更新前一个软件包还是另外安装的因素

rpm:决定软件包是更新前一个软件包还是另外安装的因素

只是安装路径吗?如果是这种情况,那么名称/路径中具有版本的任何包都将永远不会更新另一个包,因此不可能是这样。我在手动依赖信息中没有看到对此的提及。创建 RPM 时,如何告诉 cAPI-3.1.6-x86_64.rpm 安装时应该更新 cAPI-2.1.7-x86_64.rpm,而不是在 /usr/lib 下创建新路径并忽略现有的包?

答案1

基本同意@msuchy相关特征是包的组合姓名建筑学,它有助于提供一些概述。

查找信息的地方不是“升级”,而是安装多个版本一个包的:

多个安装版本(在 rpm.org 上)给出了很好的概述:

所有包管理工具都使用某些键来引用包/程序。通常该密钥是包 姓名 或包装 姓名 和包装

也就是说,有两种选择(通常):包名称本身,或包名称与体系结构的组合。它接着说

内核包是专门构建的,因此它们不会提供从一个版本的内核到下一版本的任何冲突文件

也就是说,内核受到特殊对待,因为(包开发人员)知道 Linux 内核包中的所有文件都具有不同的名称(文件名嵌入了版本,或者文件位于嵌入版本的目录中) 。这是一种特殊情况。太多的特殊情况让 RPM 的维护者无法工作。

它还展示了如何使用这些版本号作为程序包的一部分来构建具有长期稳定版本的程序的程序包姓名,从而允许在同一台机器上安装该程序的多个版本。给出的示例适用于 python。您可能会看到使用相同方案的其他程序包括 apache、autoconf、gcc、java。以下是 Fedora22 的一些示例:

SDL2-2.0.3-5.fc22.x86_64
openjpeg2-2.1.0-6.fc22.x86_64
pygobject2-2.28.6-13.fc22.x86_64
pygobject3-3.16.2-1.fc22.x86_64
pygobject3-base-3.16.2-1.fc22.x86_64
python3-3.4.2-6.fc22.x86_64
qt5-qtbase-5.5.0-15.fc22.x86_64
vte291-0.40.2-1.fc22.x86_64
vte3-0.36.4-1.fc22.x86_64
webkitgtk3-2.4.9-1.fc22.x86_64
webkitgtk4-2.8.5-2.fc22.x86_64

当您看到这些包时,很容易混淆哪些数字是包名称的一部分,哪些是版本发布。 RPM 使用破折号 ( -) 来分隔它们:如果没有破折号,则数字是名称的一部分。

答案2

这是%{name}.%{arch}组合。如果这是相同的那么它是升级。如果不同,则为另一个安装。

即您可以同时拥有cAPI-3.1.6-x86_64和安装。cAPI-3.1.6-i386但你不能在一个系统上拥有cAPI-3.1.6-x86_64cAPI-2.1.7-x86_64(除非你做了非常肮脏的伎俩)。

相关内容