build-process packaging rpm rpmbuild

build process - Cómo configurar el área de construcción para rpmbuild por invocación



build-process packaging (2)

Estoy modificando una construcción automatizada, y quiero decirle a rpmbuild que use un área de construcción específica cuando la invoque .

Esto es similar a una pregunta existente , pero más específico.

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

  • No quiero exigir al usuario que cambie sus archivos punto (por ejemplo $HOME/.rpmrc ); la construcción debe ser independiente y no afectar la configuración existente del usuario.

  • No quiero 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.

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

Lo que estoy buscando es una --build-area FOODIR hipotética --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 de escritura del usuario solo exista durante la ejecución de la compilación y, a continuación, elimine esa ubicación completa una vez que se haya generado el archivo RPM.


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 ...".


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

Por lo tanto, puede configurar esta invocación con 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.