У меня есть эта проблема, и я хотел бы понять, почему это так. У меня есть 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