如何覆盖 anaconda/kickstart 包排序?

Con*_*ill 5 rpm kickstart system-installation installer-anaconda

我正在构建一个用于安装 Linux 映像(Oracle Linux,5.8)的可引导 ISO。这是使用带有 kickstart 文件的 anaconda 来选择要加载的包。其中一些软件包在其 %post 部分因依赖问题而失败。

例如,安装完成后在 /root/install.log 中可以看到:

Installing thirdparty-tools-1.00-09.noarch
/var/tmp/rpm-tmp.97891: line 1: ln: command not found
/var/tmp/rpm-tmp.97891: line 2: ln: command not found
/var/tmp/rpm-tmp.97891: line 3: ln: command not found
/var/tmp/rpm-tmp.97891: line 4: ln: command not found
error: %post(thirdparty-tools-1.00-09.noarch) scriptlet failed, exit status 127
Run Code Online (Sandbox Code Playgroud)

我试图找出是否可以控制/覆盖包排序,而无需编辑任何 RPM 来添加依赖项。我一直在浏览 anaconda/kickstart 文档(https://fedoraproject.org/wiki/Anaconda/Kickstart#Chapter_3._Package_Selection),并在其他地方广泛搜索,所以我认为答案实际上是“不,你可以”不这样做',这将是一种耻辱。

问题是我试图包含各种第三方RPM,它们不受我的控制并且已经过数字签名。这些包括在 %post 部分中的一些处理。这个处理需要一些标准的Linux 命令,例如'ln'、'touch' 等,这些命令在coreutils 包中提供。第三方包目前不包含对 coreutils 包的依赖,但显然它应该确实如此。Anaconda 使用自己的偏序算法来选择安装这些包的顺序,并且在安装coreutils 包之前安装第三方包。显然,正确的解决方案是让第三方修复这些 RPM;然而,这可能需要太长时间。

我希望它们可能是 kickstart 文件的一些隐藏/未记录的选项,这可能会添加额外的依赖项。理想情况下,我希望能够将这样的内容添加到 %packages 部分:

%packages
@admin-tools
@base
@core
@system-tools
thirdparty-tools

# We would like to add some magic command to indicate a missing dependency
thirdparty-tools dependson coreutils
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是:是否可以在不编辑任何 RPM 以添加依赖项的情况下控制或覆盖包排序?

[ 在我意识到这个 Unix StackExchange 站点存在之前,我在主要的 StackOverflow 站点上问了同样的问题,但还没有收到任何答案;向看到这两次的人道歉。]

Joh*_*ohn 1

在 %packages 部分中,不,这是不可能的。在 kickstart 文件中,您可以将安装命令添加到第三方工具的 %post 部分,以确保仅在安装 %packages 部分中的所有包和依赖项后才安装它们。