Целостность установленных пакетов проверяется командой pacman -Qkk. Одна буква k сверяет, все ли файлы пакета на месте, две буквы kk дополнительно сверяют контрольные суммы MD5 каждого файла. Если pacman нашёл расхождение, он выведет предупреждение, а ты переустановишь проблемный пакет командой pacman -S <пакет>. Вся проверка занимает пару минут, а на большой системе чуть дольше.
Пакеты в Arch Linux ломаются редко, но такое случается. Самая частая причина: прерванное обновление. Выключилось питание посреди pacman -Syu, оборвался интернет, завис терминал. Что делать в такой ситуации, разобрано в статье «Что делать, если pacman -Syu завис или прервался». Вторая по частоте причина: частичное обновление, когда часть пакетов обновлена, а часть осталась на старых версиях. Подробности есть в статье «Частичное обновление и IgnorePkg».
После такого сбоя система обычно продолжает работать, но часть файлов может оказаться обрезанной, старой или вовсе отсутствующей. Симптомы поломки: команда не находится, хотя пакет установлен, программа падает с сегфолтом, библиотека не подхватывается. Вместо того чтобы гадать, какой пакет виноват, запусти проверку целостности. Она покажет проблему точно.
Проверка целостности полезна и в других случаях. Например, после восстановления системы из резервной копии, когда файлы копировались не полностью. Или после сбоя файловой системы, когда часть данных потерялась. Или когда подозреваешь, что какой-то файл подменили. Во всех этих ситуациях pacman -Qkk даёт честный ответ: какие пакеты повреждены, а какие в порядке.
При установке пакета pacman записывает в локальную базу данных список файлов и их контрольные суммы. База лежит в каталоге /var/lib/pacman/local, для каждого пакета там отдельная папка. Внутри неё файл files хранит список файлов, а файл mtree хранит контрольные суммы и права доступа.
Именно с этими записями и сравнивает pacman -Qkk содержимое диска. Поэтому проверка работает даже без интернета: эталоны уже сохранены локально. Если база цела, а файлы на диске отличаются, pacman это увидит.
Отсюда же следует важный вывод: проверка бессмысленна, если повреждена сама база. Тогда pacman не с чем сравнивать, и он либо ошибётся, либо покажет ложные расхождения. В такой ситуации сначала чини базу, потом проверяй файлы.
Проверка одного пакета выглядит так:
pacman -Qkk firefox # проверка файлов и контрольных сумм одного пакета
Разберём флаги. -Q означает запрос к локальной базе данных пакетов. Первая буква k включает проверку наличия файлов: pacman сверяет список файлов пакета с тем, что реально лежит на диске. Вторая буква k добавляет проверку контрольных сумм MD5: каждый файл сравнивается с эталонной суммой из базы.
Одна k работает быстро, потому что проверяет только существование файлов:
pacman -Qk firefox # быстрая проверка: только наличие файлов
Две kk медленнее, зато ловят подменённые и повреждённые файлы. Для точечной проверки одного пакета используй именно -Qkk.
Если с пакетом всё в порядке, команда молчит и возвращает код 0. Любое сообщение в выводе уже повод присмотреться. Полный список команд pacman с примерами есть в статье «Pacman от А до Я: команды».
Без аргумента pacman пройдётся по всем установленным пакетам:
pacman -Qkk
На большой системе проверка займёт несколько минут, это нормально. Вывод получится длинным, поэтому удобнее сохранить его в файл:
pacman -Qkk > /tmp/qkk.log 2>&1
После этого открой лог и посмотри, что pacman счёл подозрительным. Если лог большой, ищи строки со словами warning и error, остальное можно пропускать.
Проверить можно и отдельную группу пакетов, например все пакеты, установленные явно:
pacman -Qq | pacman -Qkk -
Здесь pacman -Qq выводит список установленных пакетов, а - в конце говорит pacman читать имена из стандартного ввода. Такой приём удобен, когда полная проверка слишком долгая, а проверить хочется всё.
Для каждого пакета pacman печатает итоговую строку вида:
firefox: 1234 total files, 0 altered files
Первое число показывает, сколько файлов числится за пакетом. Второе: сколько из них изменено или отсутствует. Ноль во второй позиции значит, что пакет в порядке. Если число больше нуля, смотри подробности выше в выводе.
Типичные строки вывода:
warning: firefox: /usr/lib/firefox/libxul.so (MD5 checksum mismatch)
error: firefox: /usr/bin/firefox was not found in database
warning с пометкой MD5 checksum mismatch означает, что файл на месте, но его содержимое отличается от эталонного. Такое бывает после ручной правки файлов, принадлежащих пакету, или после сбоя при записи.
error с фразой was not found in database означает, что файл есть на диске, но в базе пакета он не числится. Чаще всего это конфиги, созданные программами, или остатки старых версий. Не всегда это поломка.
А вот если pacman пишет, что файл пакета отсутствует на диске, это уже реальная проблема: программа не запустится или будет работать неправильно.
Отдельно стоит сказать про файлы в /etc. Конфиги там почти всегда отличаются от эталона, потому что ты их правишь руками. pacman помечает такие файлы как изменённые, и это нормально. Обращай внимание в первую очередь на бинарники в /usr/bin, библиотеки в /usr/lib и файлы в /usr/share.
Самый простой способ лечения: переустановка пакета.
pacman -S firefox
pacman заново распакует файлы из кеша или скачает их из репозитория. Если пакет уже установлен, команда всё равно переустановит его, pacman напишет об этом предупреждение.
Иногда pacman отказывается перезаписывать файл, потому что он изменён или принадлежит другому пакету. Тогда добавь флаг --overwrite:
pacman -S --overwrite '/usr/lib/*' firefox
Флаг --overwrite заставляет pacman заменить файлы, даже если они не совпадают с базой. Используй его аккуратно и только для конкретного пакета. Если перезаписать всё подряд, можно затереть чужие конфиги.
Если повреждений много и непонятно, с чего начать, проще переустановить все пакеты. Полный разбор этого способа есть в статье «Переустановка всех пакетов». Кратко: список пакетов передаётся pacman на переустановку, и он заново распаковывает каждый.
После массовой переустановки снова прогони проверку:
pacman -Qkk
Если предупреждений больше нет, система в порядке. Если остались, смотри, какие именно пакеты ещё проблемные, и разбирайся с ними по отдельности.
Чтобы не листать длинный лог, отфильтруй проблемные пакеты через awk:
pacman -Qkk 2>&1 | awk '/warning|error/ {print $2}' | sort -u
Команда выведет уникальные имена пакетов, у которых есть предупреждения или ошибки. Дальше проверяй каждый из них отдельно и переустанавливай. Такой подход удобен, когда пакетов сотни, а глазами искать проблемные строки долго.
pacman -Qk проверяет только наличие файлов пакета на диске. pacman -Qkk дополнительно сверяет контрольные суммы MD5. Быстрая проверка -Qk подходит для регулярного контроля, полная -Qkk нужна, когда подозреваешь повреждение. Разница в скорости заметная: сверка сумм читает каждый файл целиком, а проверка наличия только смотрит, существует ли он.
Файл есть на диске, но не числится в базе пакета. Часто это конфиги, созданные программами, или остатки старых версий. Не всегда это поломка, но присмотреться стоит. Если таких файлов много, проверь, не остались ли они от удалённого пакета.
После каждого прерванного обновления и при подозрительных симптомах: command not found, сегфолты, странное поведение программ. В спокойном режиме достаточно раз в месяц. Можно добавить проверку в cron или systemd-таймер, чтобы не забывать.
Нет. Если сама база сломана, pacman -Qkk не запустится или выдаст ошибки. Сначала восстанови базу, потом проверяй файлы. Признак проблем с базой: ошибки вроде invalid or corrupted database при любых операциях pacman.
Тогда дело не в целостности файлов, а в конфигурации или зависимостях. Общая методика диагностики есть в статье «Методика решения проблем в Arch Linux». Начни с запуска программы из терминала: она часто сама пишет, чего ей не хватает.
-Qkk.pacman -Qkk: быстрый способ убедиться, что установленные пакеты целы. Одна k проверяет наличие файлов, две kk сверяют контрольные суммы. При обнаружении поломки переустанови пакет командой pacman -S, при конфликте файлов добавь --overwrite. Если повреждений много, переустанови все пакеты разом. Регулярная проверка после прерванных обновлений избавит от загадочных command not found и сегфолтов.
Запомни главное: проверка сверяет файлы с локальной базой, поэтому работает без интернета и занимает минуты. Начинай с одного подозрительного пакета, при массовых проблемах переходи к полной проверке и переустановке. Такой порядок действий быстро возвращает систему в рабочее состояние.
Задай вопрос в чате — отвечаем быстро, по делу и без воды.
Комментарии