1

我的 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 配置文件和普通文件之间没有严格的区别。

问题:是否可以将上述属性用于非配置文件(用于二进制文件)?这会导致升级或其他问题吗?

谢谢。

4

0 回答 0