Вопрос или проблема
После удаления нескольких директорий пакетов dnf
все еще считает, что эти пакеты установлены. Хотя мы можем иметь некоторые идеи, мы не уверены, какие именно пакеты затронуты. Может ли dnf
проверить целостность файлов всех пакетов и автоматически удалить их?
Примечание: Я не эксперт, и надеюсь, что вы получите гораздо лучший ответ, чем этот, но …
Вы можете использовать rpm
для --verify
установленных пакетов/файлов. Т.е. rpm
может проверить, что должно было быть установлено для каждого пакета, и убедиться, что все еще находится на своих местах (и много других вещей – читайте страницу руководства rpm
). Если было удалено много файлов, rpm
должен будет закричать на вас с кучей сообщений о «недостающих» файлах.
Вот супер хакерское и неэстетичное bash
одно-строчное выражение, которое выведет пакеты rpm, у которых есть проблемы с «проверкой». Я бы не беспокоился слишком сильно о изменении прав доступа к файлам и т.д., так как вы ищете пакеты с недостающими/поврежденными файлами.
for p in $(rpm -q -a); do ret=$(sudo rpm -V $p); if [[ $ret != "" ]]; then echo $p; echo $ret; fi; done
sudo
используется, потому что не все файлы доступны для чтения обычными пользователями.
Чем больше у вас установлено пакетов, тем дольше это займет. Будьте готовы подождать. Вы должны быть в состоянии определить, что именно вы ищете.
После агрессивного удаления некоторых Python-пакетов с помощью pip3 uninstall
я понял, что некоторые из этих пакетов на самом деле были установлены с помощью yum/dnf
.
Итак, чтобы узнать, какие файлы из RPM отсутствуют в общем, я запустил rpm -Va
, который дал мне список всех измененных и недостающих файлов. В данном случае нас интересуют недостающие файлы. С помощью последовательности запросов rpm -qf /missing/file/path
я выяснил, какие пакеты были затронуты, удалил их с помощью yum remove package
и повторил процесс, пока rpm -Va
не дал мне приемлемый список измененных файлов, в основном конфигов.
Ответ или решение
Проверка и Устранение Окончившихся или Поврежденных Пакетов в DNF: Подробное Руководство
Вопрос о том, может ли пакетный менеджер DNF (Dandified YUM) сканировать на наличие отсутствующих или поврежденных файлов в установленных пакетах, имеет важное значение для обеспечения целостности и корректной работы системы. Проблема, с которой вы столкнулись, часто возникает в результате удаления директории пакетов вручную, что создает несоответствия в базе данных RPM – системы, на которой основывается DNF.
Механизм работы DNF и RPM
-
Понимание DNF и RPM: DNF является интерфейсом, который использует RPM для управления пакетами. Однако, в отличие от DNF, RPM напрямую управляет файлами, предоставленными пакетами, и может выполнять более детальную проверку целостности.
-
Проверка целостности с помощью RPM: Для поиска отсутствующих или поврежденных файлов в RPM-пакетах вы можете воспользоваться командой:
rpm -Va
Эта команда отображает все установленные пакеты и указывает на изменения, такие как отсутствующие файлы или изменения в их состояниях. Особенно вам будет интересен вывод, который предупреждает о "missing" файлах.
Автоматизированные Решения
Если вы хотите автоматизировать процесс проверки целостности и удаления поврежденных пакетов, можно использовать небольшой скрипт. Пример такого bash-скрипта:
for p in $(rpm -q -a); do
ret=$(sudo rpm -V $p);
if [[ $ret != "" ]]; then
echo "$p имеет проблемы:";
echo "$ret";
sudo dnf remove -y $p;
fi;
done
Этот скрипт перебирает все установленные пакеты, выполняет проверку целостности и автоматически удаляет пакеты, у которых найдены проблемы.
Дополнительные Стратегии
-
Определение Зависимостей: Если вы хотите тщательно проверить только те пакеты, которые могли быть установлены как зависимости для удаленных пакетов Python, вы можете использовать команду:
rpm -q --whatrequires <имя-пакета>
Это поможет вам определить, какие пакеты могли быть затронуты из-за удаления.
-
Удаление Неиспользуемых Пакетов: После этой проверки можно выполнить команду:
dnf autoremove
Это позволит удалить все неиспользуемые пакеты и зависимости, которые больше не нужны системе.
Примечания и Рекомендации
-
Подготовка К Процессу: Убедитесь, что перед выполнением любых команд у вас есть резервные копии важных данных. Если вы используете это на продуктивной системе, лучше выполнить проверку в тестовой среде.
-
Изучение Логов: Обязательно просмотрите логи DNF и RPM для получения дополнительной информации о проблемах, которые могут возникать при установке или удалении пакетов.
Данный подход обеспечивает возможность не только находить и устранять проблемы с отсутствующими или поврежденными пакетами, но и поддерживать общую целостность системы. Правильная практика управления пакетами поможет вашему окружению оставаться стабильным и безопасным.