我们正在使用rpm在内部部署我们的Web应用程序。 rpm安装文件,配置apache,cron,日志记录等。
我想构建一个rpm的测试版本,它安装在不同的位置,具有不同的apache,cron和logging配置。应该可以在同一台机器上安装生产和测试rpm。
安装了两个rpms后,我会有类似
的内容/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
实现这一目标的好方法是什么?
是否有任何现有的rpm试图这样做,我可以看一下?
答案 0 :(得分:1)
在我的spec文件中,我使用built-in macros,然后使用测试帐户(不是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
答案 1 :(得分:0)
即使您有不同的解决方案,我还是建议采用另一种方法来实现这一目标。但虚拟化没有错。可能是一个更好的解决方案,因为在同一台机器上运行测试环境因为生产不安全/安全我猜。那说......
我可能会使用一个spec文件作为模板,然后这个:
...
# 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中的自定义宏进行任何更改(这将根据构建它的系统而改变)