Esto tiene que ver con el orden en que se corrieron los guiones:
%pre of new package
(package install)
%post of new package
%preun of old package
(removal of old package)
%postun of old package
Así, en su caso, la %preun
del viejo rpm se corrieron pasado, que cierra el servicio.
Esto se puede resolver mirando el argumento del script de publicación. Aquí hay una tabla para el valor:
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
Así que, es que su script %postun
sea este lugar:
%preun
if [ "$1" = "0" ]; then
/sbin/service program stop
/sbin/chkconfig program off
fi
exit 0
que hará que se detenga el programa sólo en desinstalación completa (es decir; rpm -e
) y debería hacerlo por usted.
NOTA: usted querrá hacer lo mismo con su script %postun
así
NOTA: la exit 0
al final; Me gusta poner eso específicamente allí por si acaso, ya que un código de salida incorrecto del último comando se transferirá y hará que el script salga con ese estado, causando problemas con la instalación de rpm.
NOTA: fijar esto en las nuevas rpm no lo arregla en las rpm instaladas actualmente. Querrá rpm -e
las rpm anteriores con la secuencia de comandos rota, y estará listo para seguir adelante.
Esto solo cubre las secuencias de comandos pre/post; una versión más detallada con disparadores y tal puede ser found here.
Creo que esta pregunta pertenece a http://superuser.com/ – Cyclonecode
Creo que esto todavía califica como una pregunta de programación, porque se trata de secuencias de comandos rpm. –