Все об Arch Linux

Arch Linux будет тем, что вы из него сделаете!

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

Сразу к делу: переустановить все пакеты в Arch Linux можно одной командой pacman -Qqn | pacman -S -. Она берёт список явно установленных пакетов и переустанавливает каждый из них той же версии. Это крайняя мера для лечения битых пакетов: когда после неудачного обновления пропали библиотеки, файлы в /usr удалены или повреждены, а точечный ремонт не помогает. Но сначала проверь масштаб бедствия через pacman -Qkk: возможно, хватит переустановки пары пакетов.

Почему пакеты ломаются

Битые пакеты почти всегда появляются после неудачного обновления или ручного вмешательства. Самые частые сценарии:

  • Прерванное обновление. Отключилось питание, оборвалась сеть, закрылся терминал во время pacman -Syu. База pacman успела обновиться, а файлы на диск не записались.
  • Частичное обновление. Ты обновил часть пакетов, а остальные остались старыми. Библиотеки и программы перестали совпадать по версиям.
  • Ручные правки в /usr. Удаление или перезапись файлов вручную, например rm в системных каталогах или замена бинарника на скачанный из интернета.
  • Восстановление диска из частичного снапшота. Часть файлов вернулась из старого состояния, часть осталась от новой системы.
  • Проблемы с диском: битые сектора, сбойные записи, файловая система с ошибками.

Во всех этих случаях pacman считает пакеты установленными, но реальные файлы на диске не совпадают с базой. Отсюда ошибки вроде «не найдена библиотека» или «нет такого файла» при запуске программ. Чем больше пакетов затронуто, тем хаотичнее выглядит поломка: падают то одни программы, то другие, и чинить всё по одному не получается.

Полностью избежать битых пакетов нельзя, но риск снижается, если не прерывать обновления и не трогать файлы в /usr руками.

Когда нужна переустановка всех пакетов

Переустановка всех пакетов решает одну задачу: вернуть файлы пакетов в состояние, которое записано в базе pacman. Она нужна, когда:

  • Система ведёт себя случайно: программы падают с ошибками про отсутствующие библиотеки, хотя пакеты числятся установленными.
  • Файлы в /usr удалены или заменены вручную.
  • Диск восстановлен из частичного снапшота.
  • База pacman в странном состоянии: пакеты есть в списке, но их файлов на диске нет.

Если повреждён один-два пакета, полная переустановка избыточна. Она оправдана, когда проблема размазана по всей системе и точечный ремонт превращается в бесконечный список.

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

Как проверить целостность пакетов через pacman -Qkk

pacman -Qkk сверяет файлы каждого пакета с базой. Без аргументов проверяются все пакеты. Для каждого пакета вывод показывает, сколько файлов пропало (missing) и сколько изменено (altered).

pacman -Qkk | grep -v ' 0 missing\| 0 altered'

Фильтр оставляет только пакеты с проблемами. Если вывод пустой, все файлы на месте.

Разница между -Qk и -Qkk:

  • pacman -Qk: быстрая проверка, только пропавшие файлы, без сверки содержимого.
  • pacman -Qkk: полная проверка, сверяет содержимое файлов с хешами из базы.

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

Как переустановить только повреждённые пакеты

Если pacman -Qkk показал конкретные пакеты, переустанови их точечно:

pacman -S имя-пакета

Если пакет уже установлен, pacman -S переустановит его той же версии, а не обновит. Источник: кеш в /var/cache/pacman/pkg или репозиторий. Это быстро и безопасно. Для пакетов из AUR пересобери их через yay или paru.

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

Как переустановить все явно установленные пакеты

Стандартный сниппет из ArchWiki:

pacman -Qqn | pacman -S -

Разбор по частям:

  • pacman -Qqn выводит список явно установленных пакетов, без зависимостей.
  • - в pacman -S - говорит pacman читать список пакетов из stdin.
  • pacman переустанавливает каждый пакет из списка той же версии.

Это покрывает всё, что ты ставил руками. Зависимости не трогаются, но они обычно целы, если повреждения начались с явных пакетов.

Нюанс с AUR: pacman -Qqn включает AUR-пакеты в список, но pacman не найдёт их в репозиториях и выдаст ошибку. Это не страшно: остальные пакеты переустановятся, а AUR-пакеты пересобери отдельно.

Список из pacman -Qqn снимается с текущей базы. Если база повреждена, список может быть неполным. В этом случае сначала почини базу, потом переустанавливай.

Что происходит во время переустановки

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

Переустановка не обновляет пакеты. pacman -S - ставит те же версии, что уже стоят. Если хочешь заодно обновиться, сначала переустанови, потом выполни pacman -Syu.

Переустановка не чинит конфиги и не возвращает удалённые файлы из /etc и /home. Она возвращает только файлы пакетов. Если проблема в конфиге, переустановка не поможет.

Если переустановка прервалась

Просто запусти команду ещё раз. pacman продолжит с того места, где остановился. Если pacman ругается на повреждённую базу, разбор ошибок вроде «invalid or corrupted database» есть в статье «Ошибка pacman: invalid or corrupted database».

Как переустановить вообще все пакеты

Если явных пакетов мало, а система развалилась целиком, переустанови всё:

pacman -Qq | pacman -S -

pacman -Qq выводит все установленные пакеты, включая зависимости. Это полный набор. Процесс дольше, но лечит и зависимости, если они тоже пострадали.

Моя рекомендация по порядку действий:

  1. pacman -Qkk: найди повреждённые пакеты.
  2. Переустанови их точечно через pacman -S.
  3. Если картина тяжёлая, выполни pacman -Qqn | pacman -S -: все явные пакеты.
  4. Только после этого, если не помогло, pacman -Qq | pacman -S -: весь набор.

Не начинай с полной переустановки. Сначала дешёвые шаги, потом дорогие.

Что нужно перед переустановкой

Переустановка всех пакетов скачивает сотни файлов, поэтому подготовься:

  • Обнови базы: pacman -Syy. Иначе pacman может не найти версии пакетов.
  • Проверь зеркала. Медленные зеркала превратят переустановку в многочасовое ожидание. Настройка описана в статье «Медленные зеркала: настройка Reflector».
  • Проверь свободное место. Пакеты скачиваются в /var/cache/pacman/pkg, при переустановке всех пакетов кеш вырастет на несколько гигабайт. Команда df -h покажет свободное место.
  • Убедись, что питание и сеть стабильны. Прерванная переустановка хуже, чем та проблема, которую ты лечишь.
  • Запасись временем. На HDD переустановка всех пакетов идёт заметно дольше, чем на SSD.

Если работаешь по SSH, обрыв соединения прервёт процесс. Запусти переустановку внутри tmux или screen, чтобы она пережила разрыв связи.

Как проверить результат

После переустановки прогони проверку ещё раз:

pacman -Qkk | grep -v ' 0 missing\| 0 altered'

Пустой вывод значит, что все файлы на месте. Затем перезагрузись и проверь, что система работает: запусти пару программ, посмотри journalctl -b на ошибки.

Если какая-то программа всё ещё падает, посмотри её вывод в терминале: часто он прямо указывает на недостающую библиотеку. Проверь, какому пакету принадлежит этот файл: pacman -Qo /путь/к/файлу.

Если проблемы остались, дело может быть не в файлах пакетов, а в конфигах или ядре. Общая методика диагностики описана в статье «Методика решения проблем в Arch Linux».

Частые вопросы

Переустановка всех пакетов удалит мои настройки?

Нет. pacman переустанавливает файлы пакетов, но изменённые конфиги в /etc не трогает: для них создаются файлы .pacnew. Личные файлы в /home вообще не затрагиваются.

Что делать с AUR-пакетами при переустановке?

pacman -Qqn включает их в список, но pacman не найдёт их в репозиториях и выдаст ошибку. Остальные пакеты переустановятся, а AUR-пакеты пересобери отдельно через yay или paru.

Чем отличается pacman -Qqn от pacman -Qq?

pacman -Qqn показывает только явно установленные пакеты, те, что ты ставил руками. pacman -Qq показывает все пакеты, включая зависимости. Для лечения обычно хватает -Qqn.

Опасна ли переустановка всех пакетов?

Сама операция безопасна: pacman ставит те же версии, что уже стоят. Главный риск, прерванный процесс из-за отключения питания или обрыва сети. Поэтому перед стартом проверь питание и сеть.

Поможет ли переустановка, если сломан сам pacman?

Нет. Переустановка через pacman требует работающего pacman. Если pacman не запускается, сначала почини его вручную: скачай пакет pacman и распакуй его поверх системы. После этого переустановка остальных пакетов заработает.

Полезные ресурсы

Заключение

Переустановка всех пакетов лечит битые файлы, когда точечный ремонт не помогает. Начни с pacman -Qkk, чтобы понять масштаб, переустанови повреждённые пакеты, и только в тяжёлых случаях запускай pacman -Qqn | pacman -S -. Полный набор через pacman -Qq | pacman -S - оставь на самый край. После переустановки проверь результат тем же pacman -Qkk и перезагрузись.



Не получилось? Поможем настроить

Задай вопрос в чате — отвечаем быстро, по делу и без воды.

Читайте также

Комментарии

Загрузка…

Откроется GitHub: создайте новый issue с вашим комментарием (кнопка «Submit new issue»). После отправки обновите эту страницу — комментарий появится ниже.

Telegram Max