【问题标题】:Test installation of RPM packagesRPM包的测试安装
【发布时间】:2012-04-25 05:23:36
【问题描述】:

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

我想构建一个安装在不同位置的 rpm 测试版本,并为 apache、cron 和日志记录提供不同的配置。应该可以在同一台机器上安装生产和测试 rpm。

安装两个 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

什么是实现这一目标的好方法?

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

是否有任何现有的 rpm 可以尝试执行此操作?

【问题讨论】:

    标签: rpm


    【解决方案1】:

    在我的规范文件中,我使用 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
    

    【讨论】:

    • 我们决定改用虚拟化并忽略这个问题。不过,rpmdb 提示看起来很有用,谢谢。
    • 你们中的任何一个人是否正在使用 Maven 完成此类工作?我正在寻找可以为我提供更好的使用 Maven RPM Plugin 的教程的人。
    【解决方案2】:

    即使您有不同的解决方案,我还是决定提出另一种方法来实现这一目标。不过,虚拟化并没有错。无论如何,可能是一个更好的解决方案,因为我猜在与生产相同的机器上运行测试环境并不安全/可靠。那就是……

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

    ...
    # 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 中的自定义宏进行任何更改(这将根据构建它的系统而改变)

    【讨论】:

      猜你喜欢
      • 2019-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-06
      • 1970-01-01
      • 2012-12-15
      • 1970-01-01
      • 2011-06-27
      相关资源
      最近更新 更多