【问题标题】:How do I mark a file as config(missingok) in fpm non-interactively?如何在 fpm 中以非交互方式将文件标记为 config(missingok)?
【发布时间】:2021-12-06 10:46:58
【问题描述】:

我一直在尝试使用 fpm 创建 rpm,但遇到了问题。安装软件包后,为了节省空间,在安装后脚本中删除了一些我不再需要的文件。不幸的是,当卸载软件包时,它会抱怨文件不存在,因为它们仍然由 rpm 注册为软件包的一部分。当我研究如何通过 rpm 解决这个问题时,我偶然发现了看起来很理想的 %config(missingok) 宏。但是,似乎没有办法通过 fpm 进行设置。

我当前可能的解决方案选项是通过设置 fpm_editor 变量将 -edit 标志从使用 vi 编辑规范文件更改为使用脚本,或者在预删除脚本中触摸文件以尝试欺骗 rpm认为这些有问题的文件仍然存在。这些选项都不是很吸引人。

所以我的问题是:有没有办法使用 fpm 来 a:从 rpm 安装后的“视线”中删除软件包,或者 b:通过 fpm 将文件标记为 noconfig(missingok)? 当然不使用上面的两种解决方案。

【问题讨论】:

    标签: linux installation rpm package-managers fpm


    【解决方案1】:

    执行此操作的通常方法是将这些文件放在%install 部分的末尾rm -f,而不是在post-install 脚本中执行此操作。 这样无用的文件就不会打包到最终的rpm中了。

    我从来没有用fpm 打包过一个rpm,但是查看源代码我看到命令行开关--exclude--exclude-file 应该是你要找的:

      option ["-x", "--exclude"], "EXCLUDE_PATTERN",
        "Exclude paths matching pattern (shell wildcard globs valid here). " \
        "If you have multiple file patterns to exclude, specify this flag " \
        "multiple times.", :attribute_name => :excludes do |val|
        excludes << val
        next excludes
      end # -x / --exclude
    
      option "--exclude-file", "EXCLUDE_PATH",
        "The path to a file containing a newline-sparated list of "\
        "patterns to exclude from input."
    

    【讨论】:

    • 如果我理解这些选项,它们会将路径从 rpm 构建中排除。这不是我需要的。它需要放在构建中,然后在构建完成后删除。然后 rpm 需要与删除时不存在的文件一致。我最终选择了文件触摸选项,但很想听听其他解决方案。
    • 所以我认为 fpm 没有交互式支持的解决方案。您的规范文件对于这个工具来说已经太复杂了。你为什么不自己定制它并运行一个普通的rpmbuild -ba 来创建最终的二进制和源 rpm 包?
    • 另一种解决方案可能是修补安装脚本或 makefile 以避免安装这些不需要的文件。 %install 部分将是标准部分,您将能够使用 fpm。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-18
    • 2013-01-01
    • 2013-07-28
    • 2011-06-26
    相关资源
    最近更新 更多