2016-08-05 14 views
0

Я новичок в здании RPM. Я должен создать RPM, который установил бы пакет, только если файл/etc/i-am-a-require существует на целевой машине. Так что я написалКак откатить установку RPM, если% pre section скрипта файла SPEC возвращает false

%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 есть пакеты с зависимостями, но в данном случае «/ и т.д./я-ам-а-требование» распространяется как двоичные, так что не имеет пакет вообще.

+0

http://stackoverflow.com/questions/9932562/how-to-exit-rpm-install-in-case-of-an-error?rq = 1 –

ответ

1

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

Вы должны использовать Требуется:

Requires: /etc/i-am-a-requirement 
+1

Работает ли это, если '/ etc/i-am-a-demand' не находится в пакете rpm? – WilQu

+1

'% post' не может, но'% pre' может - просто вызвать 'false'. Он не будет «откатываться» от всего, что вы делали в скрипте. Что касается флага 'Requires', на который вы ответили, это правильное решение. Я не уверен, если он смотрит прямо в файловую систему или проверяет DB RPM. –

+0

Спасибо @aaron за разъяснение. wilqu: да, он работает только с файлом, но, как сказал Аарон, не уверен, будет ли он искать файл на диске или просто в rpm db. –