Предположим, у меня есть список пакетов, которые я хочу установить:

# yum install foo bar baz quux

Но предположим, что baz является зависимостью foo, а quux является зависимостью baz.

Итак, все, что мне на самом деле нужно было запустить, это:

# yum install foo bar

Есть ли способ, учитывая список пакетов, определить этот минимальный набор?

1
Daniel 14 Ноя 2019 в 18:21

1 ответ

Лучший ответ

Учитывая гарантированное отсутствие взаимных зависимостей, следующий алгоритм даст минимальный набор:

  • для каждого пакета в списке перечислите все его требования (rpm -qR foo)
  • для каждого пакета в требованиях удалить его из списка, если он присутствует

Перечисление требований foo дает baz (предположительно среди прочих), а перечисление требований baz дает quux, так что оба варианта можно опустить. Обратите внимание, что вы должны перечислить все требования, прежде чем что-либо удалять, иначе вы рискуете сохранить переходные требования (quux в этом случае, если вы удалите baz сразу после обработки foo).

Однако ваш список пакетов должен отражать ваши зависимости, а не минимальный набор, который приводит к установке ваших зависимостей. Если вам нужно quux, вы должны указать его в своей команде yum install, иначе, если baz перестанет зависеть от него в какой-то момент, ваша установка перестанет соответствовать вашим требованиям.

3
Stephen Kitt 15 Ноя 2019 в 20:19