How to repair a local pacman database (Русский)
Введение
У Вас что-то не так с 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.