我目前正在开发我的第一个 Linux RPM 包以供发布。在 %post 挂钩期间,我想确保特定文件驻留在目标系统上。如果此文件存在,我希望继续安装。如果此文件丢失,我希望 RPM 中止安装并报告错误代码。
.spec 文件中的条件逻辑工作正常,但在错误情况下添加“return 1”会导致 RPM 抛出错误(具有讽刺意味的是,在这种情况下,RPM 确实返回错误代码)。但是,告诉 RPM 安装失败并正常退出的“正确”方式是什么?
谢谢!
我目前正在开发我的第一个 Linux RPM 包以供发布。在 %post 挂钩期间,我想确保特定文件驻留在目标系统上。如果此文件存在,我希望继续安装。如果此文件丢失,我希望 RPM 中止安装并报告错误代码。
.spec 文件中的条件逻辑工作正常,但在错误情况下添加“return 1”会导致 RPM 抛出错误(具有讽刺意味的是,在这种情况下,RPM 确实返回错误代码)。但是,告诉 RPM 安装失败并正常退出的“正确”方式是什么?
谢谢!
该特定文件是 RPM 的一部分吗?如果不是,则进行此检查的正确位置是在 %pre 部分。如果是,您可以使用 %verify 进行验证。当 %post 运行时,包已经安装,所以不能“失败”
将支票放在该%pre
部分中,或将其添加到该Requires
字段以使rpm
自己为您检查。
告诉 RPM 安装失败并正常退出的“正确”方式是什么?
最佳实践是,如果满足所有列出的依赖项,则 RPM 安装不应该失败。
听起来确实很像该文件是一个依赖项,在这种情况下,它应该被列为Requires:/路径/到/文件。
如果它是您控制部署的特定于站点的文件,那么 RPM 应该部署自己的良好默认值,您可以在%files下使用%config(noreplace)指定它。这将确保不会覆盖任何现有配置,并且默认写入为/path/to/file.rpmnew。
如果要替换现有配置,可以使用不带(noreplace)选项的%config,这会导致将现有文件移到/path/to/file.rpmsave