RedHat: ¿es posible instalar paquetes en una especie de entorno simulado para construir RPM?

10

¿Existe una herramienta que permita instalar las dependencias de un RPM .spec en un entorno aislado? No instalaré tales dependencias globalmente en el sistema y no puedo hacerlo porque no tengo privilegios de root.

La razón

Quiero construir un paquete A que depende de una versión más nueva de B (que no se puede instalar globalmente en el sistema).

Me gusta construir la versión más reciente de B y dejar que la herramienta de construcción de instalación B 's -develen un entorno aislado para que todos los archivos necesarios para la construcción de una .

Soluciones

  • ¿Hay alguna herramienta para hacer esto?
  • Si no, ¿qué debo tener en cuenta al intentar hacer esto con say chroot?
  • ¿Sería esta una mala práctica?
tratar de atrapar finalmente
fuente

Respuestas:

8

Sí, se llama a la herramienta mocky está en EPEL.

Uso típico:

rpmbuild -bs mypackage.spec
mock -r epel-6-x86_64 mypackage-0.1-1.src.rpm

Esta es realmente la forma preferida de construir RPM, precisamente porque aísla el proceso del sistema para que las dependencias inesperadas no lleguen.

Puede modificar los archivos /etc/mockpara que traiga sus propios paquetes, repositorio privado, etc., o consulte los documentos para obtener información sobre cómo agregar paquetes al mockentorno chroot manualmente.

Tenga en cuenta que los usuarios deben agregarse al mockgrupo para poder usarlos mock.

No es coincidencia que el kojiservidor de compilación que Red Hat usa mockpara crear cada paquete individual. Si tiene que construir muchos paquetes todo el tiempo, puede valer la pena considerar la configuración de un kojiservidor de compilación.

Michael Hampton
fuente
Gracias michael Esto suena muy bien y me alegra que mi pregunta no haya sido tan tonta como pensaba. ;)
try-catch-finally
3

Creo que intentar construir paquetes en hosts de producción es una mala práctica e intentar hacerlo sin privilegios de root es más complicado que abrir sus propias máquinas de construcción. Lo que normalmente hago es lo siguiente.

  1. Instale VirtualBox o una herramienta similar en su computadora de escritorio / portátil
  2. Cree 32/64 máquinas virtuales del sistema operativo que usa en producción
  3. Instale las herramientas usualmente simuladas, rpmbuild, etc.
  4. Cree los RPM para el paquete y cualquier departamento adicional para ambos arcos en sus máquinas virtuales
  5. Después de la prueba, inserte los RPM en su repositorio interno para su distribución a sus servidores
  6. Vuelva a probar para asegurarse de que las dependencias adecuadas se están incorporando
  7. Lanzamiento a través de su gestión de configuración.
Ramin
fuente
Esto funcionará ¿Cómo es mejor que usar simulacro? Creo que el simulacro sería más fácil, pero sospecho que de cualquier manera está sucediendo lo mismo.
emory
No tengo ningún problema con el simulacro y creo que casi todos los documentos de "cómo hacer un rpm" lo tienen instalado. Sin embargo, sin acceso de root, no estoy seguro de cómo el OP va a agregar su cuenta al grupo simulado, instalar simulacros, etc. Además, tener máquinas virtuales de compilación limpias ayuda a evitar que se agreguen involuntariamente dependencias extrañas a los paquetes.
Ramin
Excelente punto No pude considerar eso. Con eso en mente, creo que esta es la respuesta correcta.
emory
@emory en función de sus comentarios, aclaré por qué creo que las máquinas virtuales de compilación son una mejor solución en general, lo que creo que es una mejor respuesta. Gracias por pincharme. :-)
Ramin
@Ramin en mi situación (en el trabajo) Solo soy un usuario . El sistema es un sistema de compilación dedicado y bueno, si todos los desarrolladores de ese host tuvieran privilegios de root, ese cuadro no se iniciaría después de 1 semana. ;) ¡Así que usar una herramienta como Mock es exactamente lo correcto! La configuración de máquinas virtuales también es una buena idea si se puede automatizar bien. Creo que Vagrant (aún no lo he probado) es la herramienta adecuada para eso.
try-catch-finally