我的 rpm 包的一些文件(取决于某些条件)在%post scriptlet 中被删除,这会在卸载过程中导致警告:“删除失败:没有这样的文件或目录”
注意:该问题不会出现在具有旧版本 RPM 的系统中,并且仅在 RHEL7 和 SLES12 上出现。
在试图弄清楚这一点时,我在 RPM 源代码 (fsm.c) 中发现了以下代码:
/*
* Missing %ghost or %missingok entries are not errors.
* XXX: Are non-existent files ever an actual error here? Afterall
* that's exactly what we're trying to accomplish here,
* and complaining about job already done seems like kinderkarten
* level "But it was MY turn!" whining...
*/
if (rc == RPMERR_ENOENT && missingok) {
rc = 0;
}
/*
* Dont whine on non-empty directories for now. We might be able
* to track at least some of the expected failures though,
* such as when we knowingly left config file backups etc behind.
*/
if (rc == RPMERR_ENOTEMPTY) {
rc = 0;
}
if (rc) {
int lvl = strict_erasures ? RPMLOG_ERR : RPMLOG_WARNING;
rpmlog(lvl, _("%s %s: remove failed: %s\n"),
S_ISDIR(sb.st_mode) ? _("directory") : _("file"),
fpath, strerror(errno));
}
}
似乎%missingok 虚拟文件属性解决了问题,但实际上,没有%missingok属性,而是有%config(missingok)属性。
让我觉得奇怪的是我们将文件标记为配置文件,尽管 AFAICS 配置文件和普通文件之间没有严格的区别。
问题:是否可以将上述属性用于非配置文件(用于二进制文件)?这会导致升级或其他问题吗?
谢谢。