我正在构建一个可引导的ISO,用于安装Linux映像(Oracle Linux,5.8)。这是使用带有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,这些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来添加依赖项?
非常感谢任何帮助。
答案 0 :(得分:2)
如果无法获得源RPM,可以使用rpmrebuild重新创建RPM:
rpmrebuild -e -n -d . -p thirdparty-tools-1.00-09.noarch
这将在默认编辑器中显示重新创建的spec文件,您可以在其中更改require行。此外,您可能还想更改程序包名称,以便重新构建的版本与上游供应商的版本不同(我通常会将“-local”附加到程序包名称)。
答案 1 :(得分:1)
您的包裹"第三方工具"需要指定其所有要求。如果您可以获得此软件包的SRPM,则可以修改规范以指示您的软件包中需要coreutils,bash等。
如果您根本无法修改此软件包,那么最好的选择是创建一个具有必要要求的包装程序包。只需使用您喜欢的编辑器创建一个文件" thirdparty-tools-installer.spec"并确保您将coreutils作为一项要求以及#34; thirdparty-tools"。您可以参考rpm.or获取更多信息http://www.rpm.org/max-rpm/s1-rpm-build-creating-spec-file.html
最后,您可以在Kickstart的%post部分中执行yum -y install thirdparty-tools。这肯定是丑陋的,但它可能会奏效。