【问题标题】:How to access the user specified --prefix value in the postinstallation script during RPM installation?如何在 RPM 安装期间访问安装后脚本中用户指定的 --prefix 值?
【发布时间】:2011-08-11 07:07:27
【问题描述】:

我使用前缀值 /usr/local 创建了一个带有安装后脚本的 rpm 包。当我使用 --prefix=/tmp/mylocation 安装 rpm 时,脚本执行无法在新位置下查找文件。

%发布 mv /usr/local/PACKAGE/文件 /etc

在脚本中使用 %{prefix} 也不起作用(mv %{prefix}/PACKAGE/file /etc)。

【问题讨论】:

    标签: rpm


    【解决方案1】:

    以防万一,其他人想知道,使用 $RPM_INSTALL_PREFIX 有效。

    【讨论】:

      【解决方案2】:

      是的,您可以使用 $RPM_INSTALL_PREFIX 访问 scriptlet 中的真实前缀,但如果您的 RPM 创建正确,通常没有理由使用它。

      如果您真的知道自己在做什么,那么使用 scriptlet(%post/%postun 代码)就可以了。但是请注意,所有 RPM 宏都会在构建期间进行扩展。 Ergo 之类的:

      %post
      echo %{_prefix}
      

      将始终扩展为 echo /usr。您实际上可以查看生成的 RPM 中的小脚本,以了解它们的扩展情况。那就是……

      从简短的 sn-p 看来,您的安装不正确。复制/移动文件通常不会在 %post/%postun scriptlet 中完成。它们在用户系统上运行(通常以 root 身份运行),很容易犯下彻底破坏用户系统的毁灭性错误。

      所以一个有点有效的sn-p:

      SourceX: <config_file>
      ...
      %install
      ...
      mkdir -p %{buildroot}%{_sysconfdir}
      cp %{SOURCEX} %{buildroot}%{sysconfdir}
      ...
      
      
      %files
      %config(noreplace) %{_sysconfdir}/<config_file>
      ...
      

      另一方面,安装到 /usr/local 通常是不受欢迎的(除非您创建 RPM 供自己使用)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-06-04
        • 2019-05-16
        • 1970-01-01
        • 2020-03-28
        • 2015-08-17
        • 2012-06-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多