【问题标题】:Relocated path in a postinstall script安装后脚本中的重定位路径
【发布时间】:2016-04-12 03:21:35
【问题描述】:

我正在开发一个将文件部署到 /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 scriptlets 期间分别

【问题讨论】:

  • 但也可以在这里查看你的答案](stackoverflow.com/a/25386412/258523) 关于可重定位包如何不与yum 一起使用,并且通常很难做到正确。在我看来,您可能只想始终使用 /opt 位置作为您的包裹并完成它。
  • 您好,感谢您的建议,问题是软件包同时部署到 /opt 和 /etc,所以我需要在 %post 中获取重定位。您提到的帖子仅使用一个重定位...
  • 我作为可能的重复链接到的问题提到了多个重定位前缀(尽管很微妙)。

标签: centos redhat rpm rpm-spec


【解决方案1】:

非常感谢 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

像魅力一样工作,非常感谢帕努!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-17
    • 1970-01-01
    • 1970-01-01
    • 2013-08-07
    • 1970-01-01
    • 2018-08-08
    • 2022-10-23
    相关资源
    最近更新 更多