Вопрос
Мы используем rpm для внутреннего развертывания наших веб-приложений.RPM устанавливает файлы, настраивает Apache, cron, ведение журнала и так далее.
Я хотел бы создать тестовую версию rpm, которая устанавливается в другое место с другой конфигурацией для Apache, cron и ведения журналов.Должна быть возможность установить как производственную, так и тестовую версию на одной машине.
С обеими установленными оборотами у меня было бы что-то вроде
/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
Каким будет хороший способ добиться этого?
- Скопировать спецификацию и переименовать все в «test»?
- Создавать разные подпакеты для prod/test?
- Использовать макросы rpm для изменения местоположения и имен в спецификации?
- Используйте rpm --relocate?
Есть ли какой-либо пакет, который пытается это сделать, на который я могу посмотреть?
Решение
В своих файлах спецификаций я использую встроенные макросы а затем с помощью тестовой учетной записи (не root) и настроенного ~/.rpmmacros я меняю префикс по умолчанию:
%_prefix %{_home}
Работает отлично.
Вы даже можете создать тестовую базу данных rpm:
$ rpmdb --initdb --dbpath /home/test/var/lib/rpm
и поместите это в свой .rpmmacros:
%_dbpath /home/test/var/lib/rpm
%_rpmlock_path %{_dbpath}/__db.000
Другие советы
Несмотря на то, что у вас есть другое решение, я решил предложить другой способ добиться этого.Однако в виртуализации нет ничего плохого.В любом случае, вероятно, лучшее решение, поскольку запуск тестовой среды на той же машине, что и производственная, я думаю, небезопасен.Тем не менее...
Я бы, вероятно, использовал один файл спецификации в качестве шаблона, а затем этот:
...
# 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
...
Обратите внимание, что особенно %{?testrel}
макро это интересная вещь.Это позволяет вам обновлять данные одновременно для обеих версий, но если вы хотите сохранить что-то специфическое для одной или другой версии, вы все равно можете это сделать.Он также не требует каких-либо изменений в базе данных, пользовательских макросов в ~/.rpmmacros (которые могут меняться в зависимости от системы, на которой он создан).