2010-06-04 11 views
32

Estoy modificando una construcción automatizada, y quiero decir rpmbuild a utilice un área de construcción específica al invocarlo.Cómo configurar el área de construcción para rpmbuild por invocación

Esto es similar a existing question, pero más específico.

  • No quiero ejecutar ninguno de los comandos de compilación como el usuario raíz; el objetivo es solo tener un RPM, no instalar nada en el sistema.

  • No quiero require the user to change their dotfiles (por ejemplo, $HOME/.rpmrc); la construcción debe ser independiente y no afectar la configuración existente del usuario.

  • No deseo codificar la ubicación en el archivo foo.spec; ese archivo debería ser utilizable tal como está si el usuario desea construir en una ubicación diferente.

  • El --buildroot option no es lo que necesito; que establece un sistema de archivos pseudo-root para la parte make del proceso de compilación, pero debo especificar el "área de compilación" para el proceso de compilación entero de RPM.

Lo que estoy buscando es una hipotética opción --build-area FOODIR que se puede dar al comando rpmbuild, o una variable de entorno equivalente. Por lo tanto, debería afectar solo esa invocación única del comando y hacer que use una ubicación especificada por el usuario para su área de construcción.

He visto referencias a una macro _topdir que parece ser de lo que estoy hablando, pero no parece ser configurable por invocación.

Sería ideal si rpmbuild pudiera establecer su propio entorno en esa ubicación cuando lo necesita, pero no me importa configurar los directorios para esa estructura, ya que eso se puede automatizar como parte de la compilación. El objetivo es que la ubicación que pueda escribir el usuario exista solo durante la ejecución de la compilación y luego elimine toda esa ubicación una vez que se haya generado el archivo RPM.

Respuesta

67

No está documentado, pero la _topdir macro determina el área de construcción.

Para que pueda establecer esta invocación por rpmbuild --define "_topdir ${PWD}/foobar" ... para configurar el directorio a lo que desee.

--define es la clave para establecer valores para cualquier macro, no solo _topdir.

+1

Gracias! ¡Este realmente me ayudó! – yonix

+1

gracias! realmente me ayudó a – Joakim

+3

Para el caso particular del paquete de kernel de Linux, puede pasar esa opción a través de 'RPMOPTS = 'definir" foo bar "'' en la línea de comando make. – Novelocrat

3

La opción --buildroot no es lo que estás buscando. El nombre es un poco engañoso ya que no está cambiando la raíz de construcción, sino que está configurando la raíz para la fase de instalación de la compilación. RPM básicamente está haciendo una "instalación de make" como parte de la construcción y luego está empaquetando los resultados de esto. La opción buildroot le permite realizar esta instalación en, por ejemplo,/tmp/myinstallroot.

Recientemente tuve que integrar rpm package building en una compilación automatizada y tuve el mismo problema. Lo que hice fue generar un archivo .rpmmacros personalizado con% topdir configurado apropiadamente. Luego, simplemente cambio temporalmente HOME a la ubicación de ese archivo .rpmmacros personalizado.

"HOME=mytopdir rpmbuild ...". 
+0

Gracias, pero no es necesario que el usuario cambie sus archivos dotfiles. Intento que el proceso de compilación sea independiente, de modo que un solo comando sea suficiente para generar el RPM sin tener que realizar ningún otro cambio en el entorno de usuario. – bignose

+0

El truco es que no estoy cambiando el entorno de los usuarios. Genero un archivo .rpmmacros en algún lugar dentro de mi árbol de compilación y luego llamo a rpmbuild con un $ HOME modificado. Así que sí, cambiando temporalmente $ HOME estoy modificando el entorno de los usuarios. Desafortunadamente encontré otra manera de hacerlo. –

+0

Ah, está diciendo que usa un archivo '.rpmmacros' que no está en el directorio de inicio real. Ese es un enfoque interesante; aunque parece un hack horrible. Espero que haya una manera más limpia. – bignose

Cuestiones relacionadas