Как я могу удалить Сиротские пакеты в Fedora?


42

Я только что переключился с Ubuntu на Fedora14. В Ubuntu у нас была apt-get autoremoveвозможность удалить потерянные / неиспользуемые пакеты. Что является аналогом в Fedora?

Ответы:


36

package-cleanup --quiet --leavesиз пакета yum-utils будут перечислены пакеты библиотеки, на которые не полагаются другие пакеты. К сожалению, это, как правило, немного переусердствовать. Например, в моей системе было предложено удалить libvirt. Добавление --exclude-binаргумента помогает. Если вас устраивает это предложение, то для очистки пакетов выполните:

# package-cleanup --quiet --leaves --exclude-bin | xargs yum remove -y

1
Протестировано после установки, удаления netbeans-platformи очистки пакетов, перечислены некоторые вещи, но на самом деле нет ни одной из ранее установленных netbeans-platformзависимостей (с использованием Fedora 17).
maxschlepzig

2
Не работает, как указано @maxschlepzig
c0da

30

DNF, замена yum начиная с Fedora 22, также предоставляет autoremoveподкоманду, которая моделируется после автоматического удаления apt-get / yum.

Примеры:

# dnf autoremove

который пытается удалить все автоматически установленные и в противном случае неиспользуемые пакеты зависимостей - должен быть в значительной степени эквивалентен apt-get autoremove.

# dnf autoremove examplepackage

который удаляет examplepackage и все его автоматически установленные (и не используемые) зависимости.

Yum

Yum имеет команду autoremove начиная с Fedora 19 и документируется начиная с Fedora 20 / RHEL 7.

Использование аналогично реализации dnf, например:

# yum autoremove

или

# yum autoremove examplepackage

Изменить поведение ням удаляет

Yum поддерживает опцию config для изменения поведения removeподкоманды по умолчанию (например, через /etc/yum.conf):

clean_requirements_on_remove=yes

yum.conf (5)

Когда это установлено, next yum removeтакже пытается удалить автоматически установленные зависимости, если они не нужны другим пакетам.

Вы также можете временно проверить эту опцию с помощью чего-то вроде:

# yum --setopt=clean_requirements_on_remove=1 remove examplepackage

Обходной путь для старой версии Fedora

(Для версий Fedora, где подкоманда yum autoremove недоступна и / или clean_requirements_on_removeне работает.)

Хотя во время установки пакетов установленные зависимости помечаются как таковые (кажется, это относительно новая функция rpm / yum).

Вы можете найти ненужные зависимости через:

$ package-cleanup --leaves -q --all \
    | xargs repoquery --installed --qf '%{nvra} - %{yumdb_info.reason}' \
    | grep -- '- dep' \
    | cut -d' ' -f1 > tmp

Эта командная строка вдохновлена сценарием fenris02 .

После проверки tmp(и, возможно, курации) вы можете удалить их через что-то вроде этого:

# xargs yum remove < tmp

Он выдал ошибку «Недопустимый тег запроса yumdb 'причина' для установленного pkg: adobe-release-x86_64-1.0-1.noarch". Что это сейчас?
c0da

@ c0da, я полагаю, что функция, которую yum записывает в своей базе данных как «причину» установки (например, «dep» или «пользователь») для каждого пакета, является относительно новой. Возможно, ваш экземпляр Fedora предшествует введению этой функции, так что у вас есть еще (несколько) старых пакетов, установленных без этого набора тегов.
maxschlepzig

Я установил Fedora 18 несколько дней назад. Поэтому я думаю, что обязательный тег должен быть там.
c0da

1
@ c0da, возможно, «причина» не была записана, потому что вы установили пакет adobe-releaseчерезyum localinstall
maxschlepzig

16

вам нужно установить плагин yum "remove-with-leaves":

# yum install yum-plugin-remove-with-leaves.noarch

после установки:

# yum remove --remove-leaves package

удачи!


3
и как запустить его для всех установленных приложений?
cnd

Кажется, не очень надежным также: skvidal.wordpress.com/2010/11/09/orphaned-dep-cleanup-in-yum
maxschlepzig

1
RHEL / CentOS / Oracle Linux 6 необходим yum-plugin-remove-with-leaves.noarchустановленный пакет для использованияpackage-cleanup
Terry Wang

8
# package-cleanup --orphans >/tmp/junk

отредактируйте /tmp/junkфайл и удалите первую строку, которая является информационной, из командной строки введите следующее:

for file in `cat /tmp/junk`
do
  yum remove $file
done

1
package-cleanup (1) говорит: «--orphans Вывести список установленных пакетов, которые недоступны из настроенных в настоящее время репозиториев». Это не эквивалентно тому, что apt-get autoremoveделает. apt-get (8) говорит: «autoremove используется для удаления пакетов, которые были автоматически установлены для удовлетворения зависимостей для некоторых пакетов и которые больше не нужны».
maxschlepzig

1
Не работает! Должно быть, я ошибся ранее. Спасибо @maxschlepzig
c0da

Раньше это работало для меня, но в CentOS 6.6 фактически перечислены все установленные пакеты, а не только сироты.
Гайя

4

ПРИМЕЧАНИЕ. Этот ответ является правильным, но он применим только к RHEL 7+ и Fedora 20+ (где автоматическое удаление было добавлено в качестве новой функции).

# yum autoremove

Просто подтвердите удаление выбранных пакетов.


0

Опираясь на ответ Ларри Мора :

package-cleanup --orphans | sed '1d' | sed '/^ * /d' | sed '/Loading mirror speeds from cached hostfile/d' | xargs sudo yum remove

(Если вам интересно, включает в себя пропуск для самого быстрого зеркала.)


0

В Fedora бесхозный пакет означает отсутствие потенциальных репозиториев для обновления!

  1. Если вы создали сгенерированные пакеты, отключите yum.repos.d / some.conf.

    yum distro-sync
    
  2. В других бесхозных пакетах эта команда может быть опасной.

    yum remove $(package-cleanup --orphans)
    

    или просто используйте команду безопасности.

    yum remove name-of-page
    

0

Другой способ не вызывать эти проблемы - использовать транзакции.

После настройки базовой системы, при установке с использованием yum, создаются транзакции. Когда вы намереваетесь удалить вещи, откат транзакций.

https://docs.fedoraproject.org/en-US/Fedora/24/html/System_Administrators_Guide/sec-DNF-Transaction_History.html

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.