0

我们使用 rpm 在内部部署我们的 Web 应用程序。rpm 安装文件、配置 apache、cron、日志等。

我想构建一个安装在不同位置的 rpm 测试版本,并为 apache、cron 和日志记录提供不同的配置。应该可以在同一台机器上安装生产和测试 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 宏来更改规范中的位置和名称?
  • 使用 rpm --relocate?

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

4

2 回答 2

1

在我的规范文件中,我使用内置宏,然后使用测试帐户(不是 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
于 2009-11-11T21:49:27.600 回答
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
...

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

于 2012-04-24T21:23:36.630 回答