【问题标题】:RPM overwrite file if it was not modifiedRPM 覆盖文件(如果未修改)
【发布时间】:2018-10-20 20:46:32
【问题描述】:

我有一个 RPM 和 SPEC 文件。我的应用程序有一个文件 (myfile.txt),它安装在 /mypath 中。因此,当我的 RPM 安装完成后,我们在服务器中就有了 /mypath/myfile.txt。

文件/mypath/myfile.txt 包含一个单词:hello

我想要实现的是:从全新安装或升级中,仅在内容未更改的情况下安装 myfile.txt。

用例:

  • 如果/mypath/myfile.txt 不存在,请安装它。
  • 如果/mypath/myfile.txt 存在并且保持原始值“hello”,则覆盖它。
  • 如果/mypath/myfile.txt存在且内容更改为“whatever”,则升级应用时不应覆盖/mypath/myfile.txt

谢谢

【问题讨论】:

    标签: rpm rpmbuild rpm-spec


    【解决方案1】:

    您描述的用法几乎就是 rpm 对 %config 文件的作用。

    不同之处在于 rpm 使用 .rpmold 后缀重命名旧的修改文件。

    如果您还添加了 %noreplace,那么新文件将使用 .rpmnew 后缀写入,而原始文件将保留在原处。

    【讨论】:

    • 是的,使用 %noreplace 我可以避免情况 1 和 2,但不能避免情况 3,因为我有条件
    • 当文件被标记为 %config(noreplace) 时,rpm 不会在它被修改时替换它。它会将新文件安装为 myfile.txt.rpmnew 并且原始文件将保持不变
    【解决方案2】:

    正如 msuchy 所说,你需要 %config(noreplace)

    来源:https://www.cl.cam.ac.uk/~jw35/docs/rpm_config.html

    【讨论】:

      猜你喜欢
      • 2021-12-13
      • 2019-07-14
      • 1970-01-01
      • 2017-10-03
      • 1970-01-01
      • 2019-09-22
      • 2022-06-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多