安装后脚本中的重定位路径

时间:2016-01-07 16:23:22

标签: centos redhat rpm rpm-spec

我正在开发一个将文件部署到/ opt和/ etc。

的RPM包

在大多数情况下,它完美地工作,除了对于给定的环境,不允许写入/ etc ....

所以我使用Relocations来将/ etc文件部署到其他位置:

Relocations : /opt /etc

通过指定--relocate选项,我可以将/ etc文件部署到另一个位置:

rpm -ivh --relocate /etc=/my/path/to/etc mypackage.rpm

现在的问题是,在 postinstall 脚本中,有一些对/ etc的硬编码引用在部署包时不会被替换:

echo `hostname --fqdn` > /etc/myapp/host.conf

我希望有一种方法(宏,关键字,......)可以使用而不是硬编码路径,以便在rpm执行期间执行替换。

如果您有任何相关信息,我真的很感激帮助。

先谢谢

PS:请注意,由于我们正在处理多个重定位路径以及我们需要处理每个重定位路径这一事实,因此这与先前请求的(和已回答的)与根路径重新定位相关的问题不重复。在rpm scriptlet期间单独使用

1 个答案:

答案 0 :(得分:3)

非常感谢来自RPM邮件列表的Panu Matilainen回答了这个问题。我将重新制作他的邮件,以便分享知识:

  

我认为你的意思是(上面是rpm -qi显示它的方式):

Prefixes: /opt /etc
     

前缀通过$RPM_INSTALL_PREFIX<n>传递给scriptlet   环境变量<n>是支持的前缀开始的索引   从零开始。所以在上面,

     

/ opt是$ RPM_INSTALL_PREFIX0      / etc是$ RPM_INSTALL_PREFIX1

     

因此,scriptlet示例变为:

echo `hostname --fqdn` > $RPM_INSTALL_PREFIX1/myapp/host.conf

像魅力一样,非常感谢Panu!