如何覆盖anaconda / kickstart包的sorting?

我正在构build一个可引导的ISO来安装Linux映像(Oracle Linux,5.8)。 这是使用anaconda和kickstart文件来select要加载的包。 其中一些软件包在其“%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 ),并在其他地方进行广泛的search,所以我认为答案实际上是“不,你可以”不要这样做“。 这将是一个耻辱。

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

我希望他们可能是一些隐藏/未logging的kickstart文件的选项,这可能会增加额外的依赖。 理想情况下,我希望能够像这样添加到%包部分:

 %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来添加依赖关系?

非常感谢您的帮助。

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

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

这将在默认编辑器中创建一个重新创建的spec文件,您可以在其中对需求行进行更改。 另外,你可能也想更改软件包名称,以便重新构建的版本与上游供应商的版本不同(我通常在软件包名称后面附加“-local”)。

你的软件包“第三方工具”需要指定所有的需求。 如果你可以得到这个软件包的SRPM,你可以修改这个spec来表明你需要在你的软件包中使用coreutils,bash等。

如果你根本不能修改这个包,你最好的选择是创建一个具有必要条件的包装包。 只需使用你最喜欢的编辑器创建一个文件“thirdparty-tools-installer.spec”,并确保你包含coreutils作为一个要求,以及“第三方工具”。 你可以参考rpm.or获取更多信息http://www.rpm.org/max-rpm/s1-rpm-build-creating-spec-file.html

最后,你可以做yum -y在Kickstart的%post部分安装thirdparty-tools。 肯定是丑陋的,但它可能会起作用。