代码之家  ›  专栏  ›  技术社区  ›  serbaut

测试安装RPM软件包

rpm
  •  0
  • serbaut  · 技术社区  · 15 年前

    我们正在使用RPM在内部部署我们的Web应用程序。RPM安装文件,配置Apache、Cron、日志等。

    我想构建一个RPM的测试版本,它安装在不同的位置,具有不同的Apache、Cron和日志配置。应该可以在同一台机器上安装生产和测试转速。

    安装了两个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”?
    • 是否为产品/测试创建不同的子包?
    • 是否使用RPM宏更改规范中的位置和名称?
    • 使用RPM——重新定位?

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

    2 回复  |  直到 12 年前
        1
  •  1
  •   Alexandre Pauzies    15 年前

    在我的规范文件中,我使用 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
    
        2
  •  0
  •   Stan    12 年前

    即使你有不同的解决方案,我还是决定建议另一种方法来实现这一点。不过,虚拟化没有问题。可能是更好的解决方案,因为在生产环境下的同一台机器上运行测试环境是不安全的。也就是说…

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

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