Безопасное удаление пакета в Gentoo

12

Я хотел удалить определенный пакет в Gentoo и просматривал справочную страницу emerge. Я нашел --unmergeвариант:

ВНИМАНИЕ: Это действие может удалить важные пакеты! Удаляет все соответствующие пакеты. Это не проверяет зависимости, поэтому может удалить пакеты, необходимые для правильной работы вашей системы. Аргументами могут быть атомы или сборки. Для зависимой версии --unmerge используйте --depclean или --prune .

Однако я хотел бы, чтобы emerge проверил, требуется ли пакет, который я хочу удалить, какому-либо другому установленному в системе пакету. --depcleanи --pruneне предоставляйте эту функциональность:

  • --depclean удаляет пакеты, которые были установлены как зависимости, но больше не нужны
  • --prune «удаляет из вашей системы все версии пакета, кроме самой высокой»

Разве нет версии для проверки зависимостей --unmerge?

Даниэль Куллманн
источник

Ответы:

17

Я не думаю, что depcleanработает так, как вы описали. Без аргументов это делает, но если вы передаете ему имя пакета, оно работает как unmergeс дополнительной проверкой зависимостей. От emerge(1):

Depclean служит зависимой версией --unmerge. Когда дан один или несколько атомов, он объединит совпадающие пакеты, которые не имеют обратных зависимостей. Используйте --depcleanвместе с, --verboseчтобы показать обратные зависимости.

Я всегда использую --depclean( -c) для удаления отдельных пакетов; работает нормально

Михаил Мрозек
источник
6

На помощь приходит gentoolkit:

equery d <atom>

Сначала вы можете проверить зависимости, а затем приступить к удалению пакета после проверки его зависимостей.

Паучок
источник
5

Еще один способ достижения того же результата (хотя это не команда, которая сливается с проверкой зависимостей): emerge --deselect packageудаление пакета из файла мира. Теперь запуск emerge --depcleanудалит этот пакет, если он не требуется ни для какого другого пакета.

njsg
источник
Означает ли это, что emerge --depcleanудаляются все пакеты, которые были установлены с помощью emerge --oneshot(если эти пакеты не нужны пакету из мира)?
Даниэль Куллманн
@danielkullmann да. он вычисляет весь граф зависимостей и удаляет то, что не тянет ни один пакет в мире. Вы можете использовать emerge --noreplace --selectдля добавления уже установленных пакетов без их перекомпиляции, кстати.
njsg
1

Иногда emerge --unmergeвыдает это предупреждение:

 * This action can remove important packages! In order to be safer, use
 * `emerge -pv --depclean <atom>` to check for reverse dependencies before
 * removing packages.

Похоже, что это рекомендуемый способ проверки зависимостей перед распаковкой пакета. Я все еще надеюсь, что есть лучший, более автоматизированный способ достижения этого.

Даниэль Куллманн
источник