RPM выдает предупреждение при удалении, если файл не существует

Некоторые файлы моего пакета rpm (в зависимости от некоторых условий) удаляются в скриптлете %post, что вызывает предупреждение во время удаления: "удаление не удалось: нет такого файла или каталога"

Примечание. Эта проблема не возникает в системах с более ранними версиями 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) вместо одного.

Что делает это странным для меня, так это то, что мы помечаем файл как файл config, хотя AFAICS нет строгой разницы между файлами конфигурации и обычными файлами.

Вопрос: Можно ли использовать вышеупомянутый атрибут для файлов без конфигурации (для двоичных файлов)? Это вызовет проблемы при обновлении или что-то в этом роде?

Спасибо.


person n0p    schedule 14.04.2015    source источник
comment
Я не могу сказать наверняка, но я считаю, что это нормально, хотя это будет иметь побочный эффект в виде списка этого файла в качестве файла конфигурации и получения поведения .rpmsave для измененных файлов, я полагаю (но это не должно иметь большого значения). При этом вы, вероятно, можете просто игнорировать предупреждение (например, комментарий указывает, что это не проблема). Мой вопрос, хотя, почему вы делаете это в первую очередь?   -  person Etan Reisner    schedule 14.04.2015
comment
Кому @EtanReisner: я решил объединить бинарники архитектур x86 и x86_64 в один пакет (соответствующий вопрос: stackoverflow.com/questions/25502523/) и удалите один из них в зависимости от архитектуры хоста. Другой вариант - использовать FatElf, но я не хочу, чтобы мой бинарник был таким толстым :). Еще один обходной путь — создать эти файлы в скриптлете %preun и позволить rpm удалить их.   -  person n0p    schedule 14.04.2015
comment
А, теперь я вспомнил вопрос. Вы так и не ответили на мой комментарий (хотя я забыл, почему я спросил это сейчас). =) В любом случае, я думаю, что это плохой способ упаковки бинарных файлов, но это ни здесь, ни там. Я бы, наверное, сделал одно из двух. Просто перестаньте удалять неправильные двоичные файлы (на самом деле они ничему не вредят). Или %ghost создайте символические ссылки на соответствующие двоичные файлы для системы и сохраните настоящие двоичные файлы в каталогах с архитегами и создайте символические ссылки в %post (и перестаньте удалять неправильные двоичные файлы). знак равно   -  person Etan Reisner    schedule 14.04.2015
comment
Если вам не нужно предупреждение, rm -rf FILENAME 2>/dev/null || true должен это сделать.   -  person Aaron D. Marasco    schedule 15.04.2015