【问题标题】:Reassign values to %define variables in spec file - RPM将值重新分配给规范文件中的 %define 变量 - RPM
【发布时间】:2013-01-09 07:13:32
【问题描述】:

当我们使用 %define tag 在规范文件中使用 rpmbuild 命令构建一个 RPM ... 是否可以在 %pre 上更新它的值并在以后使用它?

【问题讨论】:

  • 感谢您的通知!更正了这个词。

标签: linux rpm specifications


【解决方案1】:

没有。

%define 宏总是被重新评估,在规范文件中从上到下,所以你不能有循环。

%global 宏是一次性的。

例如,来自another question concerning 'requires' processing:

%global _use_internal_dependency_generator 0
%global __find_requires_orig %{__find_requires}
%define __find_requires %{_builddir}/%{?buildsubdir}/build/find-requires %{__find_requires_orig}

如果我使用%define 来声明__find_requires_orig,则会出现宏循环错误。

如果这不能回答您的问题,请详细说明您要查找的信息或您的最终目标。


预计到达时间:

在构建 RPM 时,%pre%post 部分已经包含硬编码的宏。如果您需要做出额外的运行时决策,则需要在这些 shell 脚本中完成。

【讨论】:

  • 啊,我明白了,那么是否可以为任何变量分配一些值并在另一个标签中使用它。例如。我在 %pre 标记中进行了一些验证并创建了一个变量,然后在 %install 标记中使用它的新值?
  • 不,您不能对 RPM 变量执行此操作,除非您指的是 %prep 部分。 %pretarget 机器上执行,其中 %install 在构建 RPM 时使用。
  • 不,同样,%pre%post 在目标机器上,此时每个宏都已硬编码在 RPM 文件中。您必须使用常规的 shell 变量,并且需要在每个部分中重新评估它们。
  • 目前,我所做的是在 /temp 文件夹中创建一个临时文件,然后在退出 rpm 时将其删除。可以吗?
  • 如果它只存在于%pre%post 中应该没问题,即您没有将文件写入%install 并期望它存在于%pre 中。并且还假设您使用 mktemp 之类的安全方式创建了文件,因为 RPM 安装运行为 root
猜你喜欢
  • 2023-02-09
  • 2012-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-04
  • 2018-05-01
相关资源
最近更新 更多