Как отменить установку RPM, если %pre раздел скрипта файла SPEC возвращает false

Я новичок в построении RPM. Мне нужно собрать RPM, который установит пакет, только если файл /etc/i-am-a-requirement существует на целевой машине. Итак, я написал

%pre
if test -f "/etc/i-am-a-requirement"; then 
echo "I'm OK to continue"
else
echo "The file is not found, the RPM won't be installed"
-- How to add failure here? --
fi

Я знаю, что обычно мы ожидаем, что RPM будет иметь пакеты зависимостей, но в этом случае «/etc/i-am-a-requirement» распространяется как двоичный файл, поэтому у него вообще нет пакета.


person Nadia Solovyeva    schedule 05.08.2016    source источник
comment
stackoverflow.com/questions/9932562/   -  person Nadia Solovyeva    schedule 11.08.2016


Ответы (1)


%pre, %post и другие скрипты не могут остановить установку rpm. Как только вы окажетесь внутри скриптлетов; установка продолжится вне зависимости от кода завершения ваших скриптлетов.

Вы должны использовать Requires:

Requires: /etc/i-am-a-requirement
person Chris Maes    schedule 05.08.2016
comment
Работает ли это, если /etc/i-am-a-requirement не находится в самом пакете rpm? - person WilQu; 05.08.2016
comment
%post не может, а %pre может - просто позвоните false. Он не отменит ничего, что вы сделали в сценарии. Что касается флага Requires, которым вы ответили, это правильное решение. Я не уверен навскидку, смотрит ли он непосредственно на файловую систему или проверяет базу данных RPM. - person Aaron D. Marasco; 06.08.2016
comment
Спасибо @aaron за разъяснение. wilqu: да, он работает только с файлом, но, как сказал Аарон, не уверен, будет ли он искать файл на диске или только в базе данных rpm. - person Chris Maes; 06.08.2016