【问题标题】:How to override anaconda/kickstart package ordering?如何覆盖 anaconda/kickstart 包排序?
【发布时间】:2013-07-23 10:31:31
【问题描述】:

我正在构建用于安装 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

我正在尝试找出是否可以控制/覆盖包排序,无需编辑任何 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

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

非常感谢您的帮助。

【问题讨论】:

标签: linux installation rpm


【解决方案1】:

如果无法获取源 RPM,可以使用 rpmrebuild 重新创建 RPM:

rpmrebuild -e -n -d . -p thirdparty-tools-1.00-09.noarch

这将在您的默认编辑器中打开一个重新创建的规范文件,您可以在其中更改需求行。此外,您可能还想更改包名称,以便您重新构建的版本与上游供应商的版本区分开来(我通常将“-local”附加到包名称)。

【讨论】:

    【解决方案2】:

    您的“第三方工具”包需要指定其所有要求。如果你能得到这个包的 SRPM,你可以修改规范以表明你的包中需要 coreutils、bash 等。

    如果您根本无法修改此包,最好的选择是创建一个具有必要要求的包装器包。只需使用您最喜欢的编辑器创建一个文件“thirdparty-tools-installer.spec”,并确保您将 coreutils 和“thirdparty-tools”都包含在内。更多信息可以参考rpm.或http://www.rpm.org/max-rpm/s1-rpm-build-creating-spec-file.html

    最后,您可以在 Kickstart 的 %post 部分执行 yum -y install thirdparty-tools。它肯定更丑陋,但它可能会起作用。

    【讨论】:

    • 不,我无法编辑第三方工具 RPM。一个 wrapper 包仍然有同样的问题;它不能确保第三方工具将在其缺少的依赖项之后加载,尽管当然两者都将在这个新的包装程序包之前加载。
    猜你喜欢
    • 2017-10-06
    • 1970-01-01
    • 1970-01-01
    • 2013-07-29
    • 1970-01-01
    • 1970-01-01
    • 2012-09-15
    • 1970-01-01
    • 2018-09-27
    相关资源
    最近更新 更多