2012-01-13 15 views
10

Tengo un paquete de software para el que creé un RPM. No puedo pegar todo el RPM aquí por razones de propiedad intelectual, pero aquí está el quid del problema:¿Por qué el servicio se detiene después de actualizar RPM?

%pre 
/sbin/pidof program 
if [ "$?" -eq "0" ] 
then 
    /sbin/service program stop 
fi 

%post 
/sbin/chkconfig program on 
/sbin/service program start 

%preun 
/sbin/service program stop 
/sbin/chkconfig program off 

%postun 
rm -rf /program_folder 

Cada vez que intento actualizar el paquete, se detiene el servicio de programa, instala todo, se inicia el servicio, y luego lo detiene nuevamente y borra la carpeta ... ¿Alguna idea?

+0

Creo que esta pregunta pertenece a http://superuser.com/ – Cyclonecode

+2

Creo que esto todavía califica como una pregunta de programación, porque se trata de secuencias de comandos rpm. –

Respuesta

24

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.

+0

¡Muchas gracias! Esto lo hace mucho más claro. He estado buscando en varios sitios web y todos explicaron el orden, pero no pude encontrar nada sobre los valores del argumento, tal vez ciego. Lo probaré y publicaré lo antes posible. – Sagar

+0

Eso funcionó, ¡gracias! Además, gracias por el enlace! – Sagar

Cuestiones relacionadas