Mantenga los archivos generados por RPM después de volver a ejecutar rpm -e

¿Es posible mantener el contenido RPM en el sistema de archivos después de la desinstalación?

Básicamente, no quiero borrar los archivos generados por RPM cuando alguien ejecuta rpm -e, pero aún así elimino el paquete de la lista de RPM instalados. Quiero desinstalar mi aplicación manualmente del servidor y no encuentro la forma de hacerlo.

Gracias de antemano.

preguntado el 03 de mayo de 12 a las 10:05

¿Qué quiere decir con 'mantener' contenido RPM? Lo instalaste con rpm -i package.rpm, esto en esencia, 'extrae' el contenido del paquete en los lugares correctos de su sistema. los package.rpm permanece donde está. Cuando tu lo hagas rpm -e package (¿No estás registrado como package.rpm), en esencia, 'borra' lo que se extrajo anteriormente. El archivo del paquete está intacto. -

Sí, quería saber si era posible mantener los archivos extraídos en el sistema de archivos después de un rpm -e. Quiero poder eliminarlos manualmente. -

¿No es simplemente mejor no corrida rpm -e? Cuando corro rpm -e I quieres los archivos a borrar. Estaría violando el 'principio de menor sorpresa' si sus rpm fueran especiales de alguna manera. Los administradores del sistema estarían bastante molestos por esto, por ejemplo. -

¿Qué podría hacer si quisiera reinstalar mi RPM pero conservar el contenido anterior? Una actualización eliminaría los archivos antiguos de todos modos. -

Para que quede claro, el comportamiento que desea es: cuando alguien ejecuta rpm -e para borrar su paquete en un sistema donde su paquete está instalado, usted no desea que se borren los archivos, pero desea que el paquete se elimine de la lista de paquetes instalados del sistema. Si es así, creo que debería editar y mencionar esto específicamente en su pregunta. Ahí no está claro. De todos modos, como dije, me parece una mala idea (si es que fuera posible) -

3 Respuestas

Creación de archivos de especificaciones

Desde esta perspectiva, como creador de paquetes, puede marcar archivos como configuraciones. John Warbrick en Cambridge Uni tiene un buen resumen de las diferentes marcas de archivos que puede usar en un archivo de especificaciones RPM y cómo se comportan durante la actualización.

Archivos marcados %config, si se modifican, son:

  • dejado atrás en la desinstalación pero renombrado con un .rpmsave extensión
  • intacto en la actualización o reinstalación, pero la copia de la carga útil se instala con un .rpmnew extensión

Warbrick no se ocupa de la eliminación directa de paquetes: si un archivo marcado %config is sin alterar, al borrar el paquete se eliminará el archivo. (Tenga en cuenta que, según Pedido de scriptlet RPM, RPM actualización or reinstalar comienza con el borrado del paquete anterior, antes de que se coloquen los nuevos archivos. Es decir, la antigua configuración sin cambios es reemplazado con la nueva configuración)

Sería un abuso de la clasificación de archivos RPM marcar algo como %config eso no es realmente una configuración. Esto es importante porque los administradores de sistemas deben poder confiar en la carga útil del paquete. Además, probablemente no desee cambiar el nombre de dicho archivo con una extensión.

Entonces, lo mejor que puede hacer es crear el archivo durante el %post de RPM. Archivos copiados al sistema de archivos en %install se comprueban contra el %files lista y almacenado en la base de datos RPM, pero los archivos creados en %post no son. Nuevamente, esto es un abuso del formato de archivo de especificaciones RPM, pero si lo mencionas en el %description y cualquier otra documentación, pero especialmente si es un comportamiento lógicamente esperado en el contexto de su paquete, Quizas obtener un poco de simpatía.


Paquetes existentes

Para los administradores de sistemas que deseen eliminar un paquete sin eliminar su carga útil, utilice rpm --justdb. Primero, verifique la lista de archivos:

# rpm -ql $PACKAGE | tee $PACKAGE.payload
[rpm returns list of files, tee saves it in the file $PACKAGE.payload]

# rpm -e --justdb $PACKAGE

(En esta etapa, es posible que reciba una queja sobre deps, así que repita con --nodeps si debes.)

Y finalmente, verifique que el paquete se haya ido, pero que la carga útil todavía esté allí:

# rpm -q $PACKAGE
package $PACKAGE is not installed
# ls -l $(<$PACKAGE.payload)
[ls queries list of files saved in $PACKAGE.payload]

(O para una más confiable ls si los nombres de archivo contienen espacios, lo que sería inconcebible en RPM).

# cat $PACKAGE.payload|xargs -d '\n' ls -l

Otras observaciones

Tenga en cuenta que para un paquete creado con el método descrito en la parte superior de mi respuesta, intentar enumerar los archivos que posee con rpm -ql $PACKAGE no mostrará esos archivos persistentes. Otra consecuencia de tirar archivos durante %post es que otro paquete que "posee" esos archivos podría sobrescribirlos inesperadamente; no están incluidos en la base de datos de RPM, por lo que no están protegidos.

Los dos métodos que he descrito rompen las mejores prácticas tanto para la creación de paquetes RPM como para el administrador del sistema. Por favor, se cuidado con la forma en que utiliza este peligroso "poco de conocimiento". Tal vez haya algo más que puedas hacer para crear la situación deseada.

(Finalmente, sé que esta es una pregunta de hace cuatro años. No fue respondida. Necesitaba respuesta. Saludos).

contestado el 12 de mayo de 16 a las 22:05

Tal vez ayuda sobre %config "uso indebido": fedoraproject.org/wiki/PackagingDrafts/Logfiles - Onilton Maciel

rpm -e --repackage package_name colocará una copia reinstalable en /var/spool/repackage. Puede extraer de ese rpm usando rpm2cpio si necesita esos archivos individualmente.

contestado el 05 de mayo de 12 a las 13:05

En teoría, sí. Pero AFAIR esto deja un RPM con sumas de verificación incorrectas o algo así. (Al menos, hubo una vez un problema correspondiente...) - glglgl

Eso no lo he escuchado, pero sí, si el OP ha modificado los archivos, sus sumas de verificación (y marcas de tiempo, etc.) no serían válidas al verificar las rpm cuando se instalan o cuando se extraen. - Aarón D. Marasco

Una de las ventajas de RPMS es exactamente esa: puede desinstalar (eliminar) todos los archivos fácilmente. Si desea instalar manualmente los archivos provistos por un RPM, simplemente descomprima el RPM como root, con:

cd / && rpm2cpio *.rpm | cpio-idmv

No es una buena idea, pero puede desempaquetar RPMS así en otro lugar (por ejemplo, en ${HOME}), y eso es muy útil. Sin embargo, es posible que deba ajustar algunas variables de entorno. No contamina la base de datos de RPM, pero aún usa el contenido de un RPM. Por supuesto, su aplicación puede verse afectada por las actualizaciones del sistema, ya que no está protegida por dependencias. De todos modos, así es como "instalas" y RPM si no eres root. La eliminación también es fácil (si la ruta de instalación se elige adecuadamente).

Respondido el 14 de junio de 12 a las 18:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.