В %post я запускаю несколько тестов, которые проверят установку rpm. Но если тесты не удались или постскриптум не удался, как я могу отменить установку rpm?
Отменить установку rpm на %post не удалось
Ответы (2)
Вы действительно не можете и не должны.
Вы должны утверждать все, что возможно, с помощью строк `Requires: в файле спецификаций, чтобы вы не зашли так далеко.
%post
уже слишком поздно для прерывания. Все ваши файлы уже помещены на диск/и т.д.
Вы можете отключить себя, чтобы не бегать, но это все.
Если это вещи, которые вы действительно не можете допустить, то лучшее, что вы можете сделать, это протестировать во время %pre
и прервать там (но даже это зло).
%pre
? Это проблема курицы и яйца.
- person shrewmouse; 11.11.2018
%post
не удастся. Конечно, установщик знает, что он сделал до сих пор, и может вернуться, верно?
- person Josh M.; 22.04.2020
Это хак, который я использовал в %post
для отката:
if [ ! -d %{basedeploymentpath} ]; then
echo "ERROR: %{basedeploymentpath} does not exist or is inaccessible. I will uninstall myself."
rpm -ev ${APP_NAME} &
exit 1
fi
В приведенном выше фрагменте, если переменная %{basedeploymentpath}
, представляющая каталог, не найдена, вызовите rpm -ev
по имени пакета, используя &
для разветвления процесса. Скрипт %post
завершает работу с кодом 1
при упомянутом условии.
Если затем процесс установки запускается из командной строки (rpm -ivh
) и возникает ошибка после установки, появится следующий результат: warning: %post(...) scriptlet failed, exit status 1
Это уродливый хак, но он работает. ПРИМЕЧАНИЕ: статус выхода команды rpm -ivh
по-прежнему будет отображаться как успешный (выход 0
), если вы выполните echo $?
после запуска операции rpm -ivh
.