RPM规范决定首先安装哪个依赖项

问题描述

我正在尝试创建一个具有10多个依赖项的RPM(my-main-rpm)(其中大多数不是我创建的),但我想首先安装另一个已创建的RPM(my-rpm-prerequisite)由我。这个my-rpm-prerequisite RPM创建/修改了一些在安装其他依赖项之前需要完成的文件

我希望能够使用单个命令dnf/yum/zypper install my-main-rpm安装整个rpm,该命令应该安装所有依赖项。但我希望该命令首先安装my-rpm-prerequisite

有什么办法可以做到这一点?

或者在安装依赖项之前有什么方法可以执行脚本吗?

解决方法

使用Chris所说的Requires是不可能实现的。但是,如果您“仅”要执行一些脚本,则还有其他方法。

首先,您可以在my-rpm-prerequisite.spec中指定:

Supplements: rpm-prerequisite

通过这种方式,默认安装将安装my-rpm-prerequisite,以增强rpm-prerequisite。

第二,您指定%pretrans脚本。它在交易开始时就运行。参见https://docs.fedoraproject.org/en-US/packaging-guidelines/Scriptlets/#pretrans

但是请注意,即使安装基本系统,也可能会执行%pretrans。因此,系统(或chroot)中没有安装任何东西。因此,它应该用Lua编写,由rpm本身解释。

,

不可能的Afaik。 rpm依赖项系统仅确保已安装每个软件包的依赖项,但未按顺序安装。在运行my-main-rpm安装之前,您的依赖项可能已经存在于系统上。在这种情况下,由于已经安装了依赖项,因此无法在安装依赖项之前使脚本运行。

我看到您可以影响安装顺序的唯一方法是设置依赖项,但是您只能在自己创建的软件包上这样做:

  • 如果A依赖于B,而B依赖于C,则它们将以C-> B-> A的顺序安装。
  • 如果A依赖于B和C,则B和C将在A之前安装,但是不能保证顺序。可以是C-> B-> A,也可以是B-> C-> A。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...