Назад | Перейти на главную страницу

Не удалось установить зависимость 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, результат точно такой же.

Может кто-то объяснить это мне ?

РЕДАКТИРОВАТЬ: я забыл добавить, я использую версию 4.8.0 RPM на сервере, где я устанавливаю пакеты rpm, это RHEL 6.3