2009-10-21 106 views
0

我们使用rpm在内部部署我们的Web应用程序。 rpm安装文件,配置apache,cron,日志等。RPM软件包的测试安装

我想建立一个测试版本的rpm,安装在不同的位置,使用apache,cron和logging的不同配置。应该可以在同一台机器上安装生产和测试rpm。

在安装我想有这样的事情

/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包?

  • 复制规范并将所有内容重命名为“test”?
  • 为prod/test创建不同的子包装?
  • 使用rpm宏来更改规格中的位置和名称?
  • 使用rpm --relocate?

是否有任何现有的rpm试图做到这一点,我可以看看?

回答

1

在我的规格文件,我用的是built-in macros,然后用测试帐户(不是根)和一个定制的〜/ .rpmmacros,我更改默认前缀:

%_prefix %{_home} 

工作正常。

你甚至可以创建一个测试rpm数据库:

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

,并把这个在您的.rpmmacros:

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

我们决定改用虚拟化并忽略问题。 rpmdb的提示看起来很有用,谢谢。 – serbaut 2009-11-12 20:39:43

+0

你们中的任何一个人是否都在使用Maven完成这类工作?我正在寻找能够指导我使用[Maven RPM插件](http://mojo.codehaus.org/rpm-maven-plugin/)的更好教程的人。 – blong 2011-10-25 15:22:20

0

即使你有不同的解决方案,我决定提出另一种方式做到这一点。尽管虚拟化没有问题。可能是更好的解决方案,因为在同一台机器上运行测试环境,因为生产不安全/安全我猜。这就是说......

我可能会使用一个规范文件作为模板,然后这样的:

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

注意especailly的%{?testrel}宏是有趣的事情。它使您能够同时更新两个版本的内容,但是如果您希望保留特定于某个版本或其他版本的内容,您仍然可以。它也不需要对数据库进行任何更改,〜/ .rpmmacros中的自定义宏(根据构建系统的不同而不同)