How to repair a local pacman database (Русский)

Tango-two-arrows.png

Tango-two-arrows.png

Эта статья или раздел является кандидатом на объединение с Pacman Tips (Русский).

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

Tango-preferences-desktop-locale.png

Tango-preferences-desktop-locale.png

Эта страница нуждается в сопроводителе

Статья не гарантирует актуальность информации. Помогите русскоязычному сообществу поддержкой подобных страниц. См. Команда переводчиков ArchWiki

Введение

У Вас что-то не так с pacman. 'pacman -Q' не дает никаких результатов, и 'pacman -Syu' говорит Вам, что система обновлена, хотя Вы знаете, что это не так. Когда Вы пытаетесь установить пакет командой 'pacman -S package', Вам выводится список зависимостей, хотя вы знаете, что эти зависимости уже установлены.

Ваша проблема в том, что база данных (далее БД) pacman '/var/lib/pacman/local' была повреждена или удалена. Это серьёзная проблема, Вы можете попытаться восстановить '/var/lib/pacman/local', следуя инструкции ниже.

Отказ от Ответственности

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

ИСПОЛЬЗУЙТЕ НА СВОЙ СТРАХ И РИСК!

Командная Строка

В строке ниже показана команда набранная в терминале обычным пользователем (не root):

$ ls

Следующая строка, показывает также набранную команду пользователем root, тот кто имеет полные права в Вашей системе.

# ls

Большинство инструкций ниже, требуют прав root для доступа к Вашей системе. Используйте su для переключения пользователя или sudo для выполнения команд с правами root.

Инструкция

  • Сначала, удостовертесь, что у Вас есть файл журнала pacman.
$ ls /var/log/pacman.log

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

Хорошо, Ваш файл /var/log/pacman.log существует. Вот что нужно сделать:

  • Создайте файл pkglist.sh (это одна многострочная команда - просто скопируйте и вставьте её):
# cat <<END > pkglist.sh
awk '
  $3 == "installed" || $3 == "upgraded" { pkg[$4] = 1 } 
  $3 == "removed" { pkg[$4] = 0 } 
  END { for (i in pkg) if ( pkg[i] == 1 ) print i; }
' /var/log/pacman.log
END

Спасибо 'rdt' https://bbs.archlinux.org/viewtopic.php?id=38531 за идею

# chmod 744 pkglist.sh
  • Теперь запустите pklglist.sh и вывод перенаправьте в pkglist.
# ./pkglist.sh > pkglist
  • pkglist теперь содержит весь список программ, которые были установлены или обновлены. Отредактируйте pkglist и удалите всё, что Вы не хотите переустанавливать. Эта Вам может понадобится в том случае, если Вы собирали пакеты вручную, например, с 'abs'.
# vi pkglist

или

# nano pkglist
  • Если Вас устраивает содержимое файла pkglist, Вы можете переустановить все программы используя его и восстановить '/var/lib/pacman/local'.

Проверка зависимостей Вам не нужна, а сами программы необходимо установить принудительно, с ключом 'force', так как программы уже установлены:

# pacman -Sdf $(cat pkglist)

Pacman покажет Вам длинный список программ, которые надо установить. Скажите 'yes' и ждите пока pacman всё сделает.

  • По завершению, Вам необходимо найти все конфигурационные файлы, которые были изменены. Вы можете сначала обновить БД 'locate':
# updatedb
  • Теперь, Вы можете посмотреть все изменённые конфигурационные файлы:
# locate pacorig

Это команда покажет Вам список всех конфигурационных файлов, которые были заменены. Ваши оригинальные файлы будут иметь расширение .pacorig. Удалите новые файлы и переименуйте файлы с расширением .pacorig, чтобы восстановить Вашу конфигурацию для всех программ. Также, на некотрых директориях изменятся права. Проверьте их, если что-то не запускается.

Поздравляем, Вы удачно восстановили локальную базу данных pacman.