Отменить установку rpm на %post не удалось

В %post я запускаю несколько тестов, которые проверят установку rpm. Но если тесты не удались или постскриптум не удался, как я могу отменить установку rpm?


person Mohyt    schedule 12.12.2014    source источник


Ответы (2)


Вы действительно не можете и не должны.

Вы должны утверждать все, что возможно, с помощью строк `Requires: в файле спецификаций, чтобы вы не зашли так далеко.

%post уже слишком поздно для прерывания. Все ваши файлы уже помещены на диск/и т.д.

Вы можете отключить себя, чтобы не бегать, но это все.

Если это вещи, которые вы действительно не можете допустить, то лучшее, что вы можете сделать, это протестировать во время %pre и прервать там (но даже это зло).

person Etan Reisner    schedule 12.12.2014
comment
Как вы можете протестировать во время %pre? Это проблема курицы и яйца. - person shrewmouse; 11.11.2018
comment
Любопытно, как поздно откатиться, если %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.

person mikequentel    schedule 03.11.2016
comment
Это как минимум ответ на вопрос. - person shrewmouse; 11.11.2018
comment
это приведет к взаимоблокировке, если пакет установлен, например, с yum - person Piotr; 25.07.2020