问题描述
我正在尝试创建一个具有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。