【问题标题】:How to execute shell script in RPM spec file?如何在 RPM 规范文件中执行 shell 脚本?
【发布时间】:2016-10-03 14:46:22
【问题描述】:

我有一个 RPM,其中包括在目标机器上放置文件。如何编写shell脚本,如果文件已经存在则不要复制它。

说明:

当 RPM 被安装时,它不应该替换该文件,如果该文件已经存在于该位置。目前,它正在更改配置,因为它正在替换。我打算在 %install 脚本部分写一个条件。我试过了,它不起作用,抛出诸如“else”/“fi”之类的错误未找到。

【问题讨论】:

  • “在规格文件夹中”是什么意思?试着在你的问题中更精确一点。您是指 %files 部分中的文件吗?如果您安装 rpms,现在会发生什么;你想发生什么?
  • 啊一个“规范文件”;与“规格文件夹”的完全不同......天哪
  • 很抱歉给您带来了困惑。这是文件:)
  • 好的;我调整了我的答案。如果你真的想要脚本;查看 %pre 和 %post 部分;不是 %install 部分!但我强烈建议查看 %files 部分中的 %config(noreplace) 指令

标签: rpm rpmbuild rpm-spec


【解决方案1】:

在规范文件的 %files 部分;您可以使用 %config(noreplace) 标记您的文件。这样,如果文件已经存在于目标机器上;它不会被覆盖(除非它保持不变......查看更多详细信息here)。

如果您无论如何都想保留现有文件;那么你可以在 %pre 和 %post 部分搞乱,但如果可以的话,请避免......类似:

%pre
# gets executed before installation of the files: 
if [ -e /path/to/file]
then
    cp /path/to/file /path/to/backup
fi

%post
# gets executed after installatin of the files
if [ -e /path/to/file]
then
    cp /path/to/backup /path/to/file
fi

【讨论】:

  • %pre 部分是否在 %prep 部分之前执行?
  • 您对 rpm 的工作原理感到困惑……在构建 rpm 时; %prep、%install、%files 和 %changelog 部分用于生成 *.rpm 文件。当您安装此 rpm 时; %pre 部分在安装了 rpm 的机器上执行;然后文件(来自 %files 部分)就位;然后安装 %post 部分。
  • 通常在不同的机器上构建和安装!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-27
  • 2014-06-24
  • 2019-06-14
  • 2016-02-19
  • 1970-01-01
  • 2023-02-17
  • 2023-03-15
相关资源
最近更新 更多