Pergunta
Estamos usando rpm para implantar nossas aplicações web internamente. O rpm instala os arquivos, configura o Apache, cron, registro e assim por diante.
Gostaria de construir uma versão de teste do rpm que se instala em um local diferente com uma configuração diferente para apache, cron e registro. Deve ser possível instalar tanto a produção e teste rpm na mesma máquina.
Com as duas rpms instalado i teria 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
O que seria uma boa maneira de conseguir isso?
- Copie a especificação e renomeação de tudo para "teste"?
- Criar diferentes subpacotes para prod / teste?
- Usar macros rpm para alterar a localização e os nomes na especificação?
- Use rpm --relocate?
Existe alguma rpm existente que tentativas de fazer isso que eu posso olhar?
Solução
Em meus arquivos de especificação, eu uso o built-in macros e, em seguida, com uma conta de teste (não root) e um personalizados ~ / .rpmmacros, eu altere o prefixo padrão:
%_prefix %{_home}
funciona bem.
Você pode até criar um banco de dados de teste rpm:
$ rpmdb --initdb --dbpath /home/test/var/lib/rpm
e colocar isso em suas .rpmmacros:
%_dbpath /home/test/var/lib/rpm
%_rpmlock_path %{_dbpath}/__db.000
Outras dicas
Mesmo que você tenha uma solução diferente, eu decidi sugerir uma outra maneira de conseguir isso. errado nada com a virtualização embora. Provavelmente a melhor solução de qualquer maneira desde a execução de um ambiente de teste na mesma máquina como a produção não é seguro / secure eu acho. Dito isto ...
Eu provavelmente usar um arquivo de especificações como um modelo e, em seguida, o seguinte:
...
# 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
...
Note que especailly a macro %{?testrel}
é a coisa interessante. Ele permite que você atualize as coisas simultaneamente para ambas as versões, mas se você deseja manter algo específico para uma versão ou o outro ainda pode. Ele também não exige quaisquer alterações para o banco de dados, macros personalizadas em ~ / .rpmmacros (que mudam de acordo com o sistema que está sendo construído sobre)