我有一组 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
对于每个包文件,获取依赖项并按步骤排序,例如,
- 不依赖其他任何包的包,那么
- 依赖于上述一个或多个软件包(也可能依赖于其他软件包)这组),以及
- 依此类推,直到没有剩余的包裹
(我做了相反的事情——寻找包裹消除,虽然复杂,但可行)。