2011-09-13 12 views
25

Estoy actualizando nuestro proyecto RPM. El problema es cuando actualizo de projectname-1.0-0 a projectname-1.0-1, primero instala el nuevo proyecto y desinstala el proyecto anterior, que, en vista general, elimina por completo mi proyecto. He utilizado la opción "vv" durante la actualización y la salida mostró que la desinstalación se realizó después de la instalación.La actualización RPM desinstala el RPM

Alguien por favor ayuda con este problema. ¿Hay algo que deba cambiar específicamente en las especificaciones de RPM o en las opciones de rpmbuild?

Respuesta

5

Sí. Durante la instalación de rpm, se invocarán los scripts% install y% post. Después de una instalación exitosa, se invocarán los scripts% preun y% postun para desinstalar la versión anterior de rpm. Si no se manejan correctamente, estos scripts% preun y% postun pueden manipular los cambios introducidos por% scripts de instalación y% post.

El rpm establece un argumento de $ 1 con los valores adecuados para distinguir la cantidad de versiones de rpm instaladas. Durante la instalación reciente de projectname-1.0-0, se invocarán% install y% post scripts con $ 1 establecido en 1, lo que indica que esta es la única versión activa. Cuando se actualice a projectname-1.0-1, se invocarán% install y% post scripts con $ 1 establecido en 2. Después de lo cual, se invocarán los scripts% preun y% postun con $ 1 establecido en 1 para limpiar los elementos de projectname -1.0-0. Por lo tanto, al escribir el archivo de especificaciones basado en el valor de $ 1, podemos manejar las actualizaciones de manera efectiva.

+0

'% install' no se corrió durante la instalación RPM pero durante la acumulación * * (sí, el nombre puede ser bastante engañosa). Creo que te refieres a '% pre'. –

56

Sí, cuando ocurre una actualización de RPM, RPM primero instala la nueva versión del paquete y luego desinstala la versión anterior del paquete. Solo se eliminan los archivos del paquete anterior. Pero sus scripts (es decir,% pre,% post,% preun,% postun) necesitan saber si están manejando una actualización o simplemente una instalación simple o desinstalación.

El comando rpm pasará un argumento a sus scripts, es decir, $ 1, que es un recuento de la cantidad de versiones del paquete que están instaladas. La siguiente tabla (de la Guía RedHat RPM de Eric Foster-Johnston) proporciona una muestra de valores posibles.

Install the first time:   1 
Upgrade:       2 or higher 
           (depending on the number of versions installed) 
Remove last version of package: 0 

Así, en su preun%, es probable que desee comprobar si "$ 1 = 0" antes de retirar cualquier servicio.

Para obtener más información (y una mejor mesa) ver: http://docs.fedoraproject.org/en-US/Fedora_Draft_Documentation/0.1/html/RPM_Guide/ch09s04s05.html

+1

¿Qué sucede si ya tiene el paquete 1.0.0 en producción y no puede modificar su preun o postun y hacen lo incorrecto? Como para anular qué paquete 1.0.1 acaba de instalar. – DavidG

+0

RPM tiene un indicador '--noscripts' para evitar la ejecución de cualquier script pre o post. No estoy seguro de qué, en todo caso, es el equivalente con yum. –

4

Al actualizar un paquete RPM, las secuencias de comandos se ejecutan en el orden siguiente:

1. %Pre of new package 
2. %Post of new package 
3. %Preun of old package 
4. %Postun of old package 

si la instalación es fresco o actualización, hay se pasa un argumento a cada script que representa el número de RPM instalados del mismo paquete con diferentes versiones. Para los scripts de publicación pre &, será 1 en caso de la primera instalación. Para preun & scripts de postun, será 0 para la última desinstalación.

Lo que podría estar pasando en su caso es que las secuencias de comandos preun o postun podrían estar eliminando archivos que son útiles para el nuevo paquete. No necesita preocuparse por la eliminación manual de archivos en las secuencias de comandos postun, se manejará de forma inteligente RPM.

ref: Upgrading & uninstalling

Cuestiones relacionadas