【发布时间】:2013-01-09 07:13:32
【问题描述】:
当我们使用 %define tag 在规范文件中使用 rpmbuild 命令构建一个 RPM ... 是否可以在 %pre 上更新它的值并在以后使用它?
【问题讨论】:
-
感谢您的通知!更正了这个词。
标签: linux rpm specifications
当我们使用 %define tag 在规范文件中使用 rpmbuild 命令构建一个 RPM ... 是否可以在 %pre 上更新它的值并在以后使用它?
【问题讨论】:
标签: linux rpm specifications
没有。
%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 脚本中完成。
【讨论】:
%prep 部分。 %pre 在 target 机器上执行,其中 %install 在构建 RPM 时使用。
%pre 和 %post 在目标机器上,此时每个宏都已硬编码在 RPM 文件中。您必须使用常规的 shell 变量,并且需要在每个部分中重新评估它们。
%pre 和%post 中应该没问题,即您没有将文件写入%install 并期望它存在于%pre 中。并且还假设您使用 mktemp 之类的安全方式创建了文件,因为 RPM 安装运行为 root。