我有 3 个软件包corepkg
、corepkg-optB
和corepkg-optC
。corepkg-optC
依赖于corepkg-optB
,corepkg-optB
依赖于corepkg
。 我已经为这 3 个软件包创建了一个仓库。 当我运行 yum install 时corepkg-optC
,corepkg
失败了, yum 会安装corepkg-optB
和corepkg-optC
。 这不是我想要的。
corepkg-optB
如果corepkg
失败了,我愿意失败;corepkg-optC
如果corepkg-optB
因为失败而失败,我愿意失败corepkg
。
我的 spec 文件如下所示:
Name: corepkg
Version: 1.0.0
%pretrans
if ! grep -q foo /etc/hosts
then
exit 1
fi
%package optB
Requires: corepkg = 1.0.0
%package optC
Requires: codepkg-optB = 1.0.0
我尝试了 Requires 然后 Requires(pre),但结果相同:
# yum install corepkg-optC
error: %pretrans(corepkg-1.0.0-1.el7.noarch) scriptlet failed, exit status 1
Error in PRETRANS scriptlet in rpm package corepkg-1.0.0-1.el7.noarch
Installing : corepkg-optB-1.0.0-1.el7.noarch 1/3
error: corepkg-1.0.0-1.el7.noarch: install skipped
Installing : corepkg-optC-1.0.0-1.el7.noarch 2/3
Verifying : corepkg-optC-1.0.0-1.el7.noarch 1/3
Verifying : corepkg-optB-1.0.0-1.el7.noarch 2/3
Verifying : corepkg-1.0.0-1.el7.noarch 3/3
Installed:
corepkg-optC.noarch 0:1.0.0-1.el7.noarch
Dependency Installed:
corepkg-optB.noarch 0:1.0.0-1.el7.noarch
Failed:
corepkg.noarch 0:1.0.0-1.el7.noarch
我尝试了 Requires(pretrans),但是这毫无意义,因为一切都是单一的 yum 事务。
所有 corepkg 都是我的,我可以修改 specfile。有什么想法吗?谢谢!
编辑:包 B 和 C 不是依赖包,更像是 corepkg 的附加内容。它类似于包 php-* 或 python-*。相似之处在于我的包 corepkg-optB 和 corepkg-optC 是模块(文本文件),没有 corepkg 就毫无意义。我之所以这么说是因为有些 php-* 包可以独立运行。
答案1
看起来你的问题没有简单的答案。我发现问题和你的类似。而且看起来这只是一种方法,您应该检查%pre
部分中是否正确安装了软件包,但不要使用rpm
命令。可能是检查现有文件或类似的东西。