Ответ 1
Это связано с порядком запуска скриптов:
%pre of new package
(package install)
%post of new package
%preun of old package
(removal of old package)
%postun of old package
Таким образом, в вашем случае %preun
старого rpm запускается последним, что отключает службу.
Это можно решить, посмотрев аргумент на сообщение script. Вот таблица для значения:
install upgrade uninstall
%pre $1 == 1 $1 == 2 (N/A)
%post $1 == 1 $1 == 2 (N/A)
%preun (N/A) $1 == 1 $1 == 0
%postun (N/A) $1 == 1 $1 == 0
Итак, вы бы хотели, чтобы ваш %postun
script был следующим:
%preun
if [ "$1" = "0" ]; then
/sbin/service program stop
/sbin/chkconfig program off
fi
exit 0
Это остановит программу только при полной деинсталляции (т.е. rpm -e
) и сделает это за вас.
ПРИМЕЧАНИЕ: вы также захотите сделать то же самое со своим %postun
script
ПРИМЕЧАНИЕ: exit 0
в конце; Я хотел бы специально указать, что на всякий случай, так как плохой код выхода из последней команды будет переноситься и вывести script с этим статусом, что вызовет проблемы с установкой rpm.
ПРИМЕЧАНИЕ: исправление этого параметра в новых rpm не устраняет его в текущем установленном числе оборотов. Вы захотите rpm -e
старую rpm со сломанным script, и вы будете хорошо двигаться вперед.
Это просто охватывает сценарии pre/post; более детальную версию с триггерами и т.д. можно найти здесь.