如何获取 rpm 安装一组新软件包的顺序?

如何获取 rpm 安装一组新软件包的顺序?

我有一组 rpm 包。我打算一次性安装所有包,但在安装之前,我想获取它们的安装顺序。我知道如果我以随机顺序将它们全部提供给包管理器,管理器将确定它们之间的依赖关系并按正确的顺序安装它们。我如何获取此顺序?

答案1

您可以使用选项 --test 来调试 rpm 的输出。这意味着不会安装任何软件包,但 stderr 输出将包含内部顺序,如下所示:

D: ========== tsorting packages (order, #predecessors, #succesors, depth)
D:     0    0    2    1   +cla-v1-r45.0.0.x86_64
D:     1    0   11    2   +ace-6.5.15-1.x86_64
D:     2    0    1    3       +ace-kokyu-6.5.15-1.x86_64
D:     3    0    1    3       +ace-xml-6.5.15-1.x86_64
D:     4    0    7    4       +tao-2.5.15-1.x86_64
D:     5    0    0    5       +tao-cosconcurrency-2.5.15-1.x86_64
D:     6    0    0    5       +tao-cosevent-2.5.15-1.x86_64
D:     7    0    0    5       +tao-cosnaming-2.5.15-1.x86_64
D:     8    0    0    5       +tao-cosnotification-2.5.15-1.x86_64
D:     9    0    0    5       +tao-costrading-2.5.15-1.x86_64
D:    10    0    0    5       +tao-rtevent-2.5.15-1.x86_64
D:    11    0    0    5       +tao-utils-2.5.15-1.x86_64
D:    12    0    0    3     +ace-gperf-6.5.15-1.x86_64
D:    13    0    0    1   +mpc-6.5.15-1.x86_64
D:    14    0    0    1   +PCMX-6.0A90-02.x86_64
D: installing binary packages

然后使用一些过滤器来解析它,例如 awk

rpm -Uvv --test *.rpm 2>&1 | awk 'BEGIN { FS = "+" }; /D: ========== tsorting packages/,/D: installing binary packages/ { printf "%s ",$2 }'

答案2

yum没有打印此订单的选项(请参阅手动的),也没有一个众所周知的数据库接口和库可以做到这一点。因此,解决方案必须是外部 yum。您始终可以要求yum打印软件包的附加依赖项的完整列表,但该信息对于获取命令必须安装哪些软件包。询问会更简单rpm

原则上,可以编写一个脚本,使用

rpm -qpR package-file

对于每个包文件,获取依赖项并按步骤排序,例如,

  • 不依赖其他任何包的包,那么
  • 依赖于上述一个或多个软件包(也可能依赖于其他软件包)组),以及
  • 依此类推,直到没有剩余的包裹

(我做了相反的事情——寻找包裹消除,虽然复杂,但可行)。

相关内容