rpm 依赖项安装失败,但软件包仍然安装

rpm 依赖项安装失败,但软件包仍然安装

我遇到了这个问题,我想了解为什么会这样。我构建了 3 个非常简单的 rpm 包,分别称为 a、b 和 c,并且我创建了一个独立的包,b 依赖于 a,而 c 依赖于 a 和 b。它们每个都有一个仅由一个文件组成的源,该文件应该放在 /home/ 中(这不是重点)。

它们每个的代码或多或少都相同,只是依赖项从一个包变为另一个包。我在工作中测试过其他包,其中的依赖项是这样组织的。有时一个包失败了,但总是会安装下一个包,即使依赖包失败了。

这是我的测试代码,我尝试让 b 包失败:

Name:           b
Version:        1
Release:        1%{?dist}
Summary:        Package b

License:        GPL
Source0:        b.tar.gz
BuildRoot:      %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)

PreReq:         a

%description
Install package b

%prep
%setup -q

%pre
if [ ! -f "/home/b" ]
then
        exit 1
fi

%install
rm -rf %{buildroot}
mkdir -p %{buildroot}/home/
mv b %{buildroot}/home/

%clean
rm -rf %{buildroot}

%files
%defattr(-,root,root,-)
/home/b

因此,您可能会注意到,这个包总是会失败,但这就是它的目的。当我尝试安装包时,我得到了这个:

[root@oradm|in ~]# rpm -ivh a-1-1.el6.x86_64.rpm b-1-1.el6.x86_64.rpm c-1-1.el6.x86_64.rpm 
Préparation...              ########################################### [100%]
   1:a                      ########################################### [ 33%]
erreur: %pre(b-1-1.el6.x86_64) scriptlet failed, exit status 1
erreur:   install: échec du scriptlet %pre (2), on saute b-1-1.el6
   2:c                      ########################################### [ 67%]

因此,软件包 a 正在安装,这很合理,没有任何问题。然后软件包 b 按照预期失败。但是软件包 c 也安装了!这应该会失败,因为这是软件包 c 的代码:

Name:           c
Version:        1
Release:        1%{?dist}
Summary:        Package c

License:        GPL
Source0:        c.tar.gz
BuildRoot:      %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)

PreReq:         a,b

%description
Install package c

%prep
%setup -q

%install
rm -rf %{buildroot}
mkdir -p %{buildroot}/home/
mv c %{buildroot}/home/

%clean
rm -rf %{buildroot}

%files
%defattr(-,root,root,-)
/home/c

如您所见,它应该需要 a 和 b,但 b 失败了。这怎么可能呢?我尝试使用“Requires”指令代替 PreReq,结果完全相同。

谁可以给我解释一下这个 ?

编辑:我忘了补充,我在安装 rpm 包的服务器上使用的是 RPM 版本 4.8.0,它是 RHEL 6.3

相关内容