2017-02-20 21 views
0

Моя проблема в том, что у меня есть пакет, содержащий несколько RPM, например rpmA, rpmB, rpmC. rpmC зависит от rpmA, и версии блокируются вместе, поэтому rpmC (v1) зависит от rpmA (v1).yum оставляет зависимость от

Но пакет v2 имеет устаревший rpmC и содержит rpmA (v2) и rpmB (v2). Файл SPEC для rpmA (v2) указывает, что rpmC (v1) устарел, но я не могу заставить yum позволить мне перейти на v2 - кто-нибудь знает почему?

Какая yum, похоже, пытается обновить rpmA и rpmB, но затем она выдает ошибку, поскольку она не удаляет rpmC (v1), а rpmC (v1) требует rpmA (v1), который был удален и обновлен до РАПН (v2).

К сожалению, я не контролировал оригинальные RPM v1, поэтому я не могу, например, заставить rpmC (v1) зависеть от rpmA (> = v1), и я также не могу найти способ сделать yum let me выполните обновление.

Предложения по поводу того, что я могу делать неправильно?

+0

Мы должны были бы видеть заголовки каждой спецификации RPM, вероятно, или, по крайней мере, точную ошибку. Вы можете попробовать «' Обеспечивает », а также« 'Obsoletes'» и посмотреть, поможет ли это. –

+0

Хорошо, попробуем позже получить более подробную информацию позже, но я попытался добавить «обеспечивает», и, похоже, не имеет значения. –

+0

Созданные RPM - это новая версия Erlang, и она удалила несколько RPM. То, что я пытался сделать, - это «верхний уровень» Erlang RPM устарел RPM, которые больше не требуются. Таким образом, файл SPEC содержит записи «Обязательные» для RPM, которые все еще существуют, а затем «Предоставляет и обрезает» для тех, которые больше не существуют: .... Требуется: erlang-asn1% {? _ Isa} =% {version} -% {выпуск} ' ... Обеспечивает: Эрл-AppMon% ... Obsoletes: Эрл-AppMon% <% {версия} - {%} выпуск {_ иша?} {_ иша?}. .. –

ответ

0

В соответствии с комментариями проблема заключается в том, что каждый RPM неявно предоставляет как «функцию», так и «функцию (архитектуру)», например. 'ssl' и 'ssl (x86_64)'. Мои усталости явно включали архитектуру, поэтому только устаревшие (например,) ssl (x86_64) «оставляют» ssl для генерации нерешенных зависимостей.

Если вы удалите архитектуру из директивы obsoletes, то и «функция» и «функция (архитектура)» устарели, и все начинает работать.

Подведем итоги:

  1. Использование Obsoletes, что один из оставшихся РПМ устаревшим РПС, что вы будете удалять как часть обновления
  2. НЕ указать архитектуру в директивах Obsoletes так, что все экземпляры функции/RPM удаляются.
  3. В то же время рассмотрите, требуют ли ваши директивы для указания конкретных версий зависимостей или используют> =, что может позволить работать над уровнем выше, - это тоже меня кусает!

Радость наследования определений RPM :-).

+0

Хм. Вся арка с x86_64 против i686 иногда может сбивать с толку. –

+0

Я вижу - поэтому материал «без архитектуры» на самом деле является i686 (что я считаю 32-разрядной реализацией)? –