# 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.

Categories:

- Package management (Русский)
- Eye candy (Русский)
- Tutorials (Русский)
- Русский