1

我目前正在开发我的第一个 Linux RPM 包以供发布。在 %post 挂钩期间,我想确保特定文件驻留在目标系统上。如果此文件存在,我希望继续安装。如果此文件丢失,我希望 RPM 中止安装并报告错误代码。

.spec 文件中的条件逻辑工作正常,但在错误情况下添加“return 1”会导致 RPM 抛出错误(具有讽刺意味的是,在这种情况下,RPM 确实返回错误代码)。但是,告诉 RPM 安装失败并正常退出的“正确”方式是什么?

谢谢!

4

3 回答 3

2

该特定文件是 RPM 的一部分吗?如果不是,则进行此检查的正确位置是在 %pre 部分。如果是,您可以使用 %verify 进行验证。当 %post 运行时,包已经安装,所以不能“失败”

于 2013-05-12T05:44:22.307 回答
1

将支票放在该%pre部分中,或将其添加到该Requires字段以使rpm自己为您检查。

于 2013-05-14T09:17:28.000 回答
0

告诉 RPM 安装失败并正常退出的“正确”方式是什么?

最佳实践是,如果满足所有列出的依赖项,则 RPM 安装不应该失败。

听起来确实很像该文件是一个依赖项,在这种情况下,它应该被列为Requires:/路径/到/文件

如果它是您控制部署的特定于站点的文件,那么 RPM 应该部署自己的良好默认值,您可以在%files下使用%config(noreplace)指定它。这将确保不会覆盖任何现有配置,并且默认写入为/path/to/file.rpmnew

如果要替换现有配置,可以使用不带(noreplace)选项的%config,这会导致将现有文件移到/path/to/file.rpmsave

于 2014-06-26T21:38:13.593 回答