Pregunta

Estamos usando rpm para implementar nuestras aplicaciones web internamente. El rpm instala los archivos, configura apache, cron, registro, etc.

Me gustaría compilar una versión de prueba del rpm que se instala en una ubicación diferente con una configuración diferente para apache, cron y registro. Debería ser posible instalar tanto la producción como la prueba de rpm en la misma máquina.

Con ambos rpms instalados, tendría algo como

/opt/app/www/...
/opt/app-test/www/...
/etc/httpd/conf.d/app.conf
/etc/httpd/conf.d/app-test.conf
/etc/cron.d/app
/etc/cron.d/app-test
/etc/init.d/app
/etc/init.d/app-test

¿Cuál sería una buena manera de lograr esto?

  • Copie la especificación y cambie el nombre de todo a " prueba " ;?
  • ¿Crear diferentes subpaquetes para prod / test?
  • ¿Utilizar macros rpm para modificar la ubicación y los nombres en la especificación?
  • Use rpm --relocate?

¿Hay algún rpm que intente hacer esto que pueda ver?

¿Fue útil?

Solución

En mis archivos de especificaciones, uso el macros incorporadas y luego, con una cuenta de prueba (no root) y un ~ / .rpmmacros personalizado, cambio el prefijo predeterminado:

%_prefix %{_home}

Funciona bien.

Incluso puedes crear una base de datos de prueba de rpm:

$ rpmdb --initdb --dbpath /home/test/var/lib/rpm

y pon esto en tu .rpmmacros:

%_dbpath /home/test/var/lib/rpm
%_rpmlock_path %{_dbpath}/__db.000

Otros consejos

Aunque tiene una solución diferente, decidí sugerir otra forma de lograrlo. Sin embargo, no hay nada malo con la virtualización. Probablemente sea una mejor solución de todos modos, ya que ejecutar un entorno de prueba en la misma máquina que la producción no es seguro, supongo. Dicho eso ...

Probablemente usaría un archivo de especificaciones como plantilla y luego esto:

...
# somwwhere in the beginning of spec
%global testrel test

#rest of document
Source0: tarball-with-things%{?testrel}.tar.bz
...
%if ${?testrel:1}${!?testrel:0}
# this will execute only in test rpm
%endif
...

Tenga en cuenta que especialmente la macro % {? testrel} es lo interesante. Le permite actualizar cosas simultáneamente para ambas versiones, pero si desea mantener algo específico para una versión u otra, aún puede hacerlo. Tampoco requiere ningún cambio en la base de datos, macros personalizadas en ~ / .rpmmacros (que cambiarían dependiendo del sistema en el que se está construyendo)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top