Восстановление пакетной базы в Debian |
Автор: admin Просмотров: 2335 Комментарии: 1
Добавлен: 25 декабря 2017
Обновлено: 20.04.2020 - 12:13
Я чистил систему и случайно удалил системный файл где-то в /var. В результате при обновлении списка пакетов, установке и удалении программ в консоль вывались 1500 однотипных предупреждений:
dpkg: предупреждение: список файлов пакета «net-tools» отсутствует; предполагаем, что на данный момент у пакета нет установленных файлов
dpkg: предупреждение: список файлов пакета «adduser» отсутствует; предполагаем, что на данный момент у пакета нет установленных файлов
dpkg: предупреждение: список файлов пакета «cmake» отсутствует; предполагаем, что на данный момент у пакета нет установленных файлов
...
При этом новые пакеты устанавливались и удалялись. Но если удалить какой-либо пакет из списка предупреждений, то dpkg просто сделает вид, что пакет удалился, но на самом деле он удалит только запись о этом пакете в своей пакетной базе .
То есть мне нужно было вернуть записи о пакетах, но так как пакетов более 1500 я не представляю это возможным.
Если такие "удалённые" пакеты установить, то они устанавливаются без каких-либо ошибок, получают запись в пакетной базе и их можно удалить. Остаётся только переустановка всего Дебиана или только пакетов из списка предупреждений. Я выбрал второй вариант.
Так как список из 1500 предупреждений не умещаются в память терминала, можно увидеть лишь небольшую часть этого списка. Чтобы получить полный список предупреждений, я перенаправил его в файл:
apt-get install adduser > 1.txt
Получился файл объемом в 25 кб, в котором однотипные строки такого вида:
dpkg: предупреждение: список файлов пакета «adduser» отсутствует; предполагаем, что на данный момент у пакета нет установленных файлов
dpkg: предупреждение: список файлов пакета «cmake» отсутствует; предполагаем, что на данный момент у пакета нет установленных файлов
dpkg: предупреждение: список файлов пакета «ulatency» отсутствует; предполагаем, что на данный момент у пакета нет установленных файлов
...
Перестанавливать 1500 пакетов по отдельности слишком долго, но в линуксе можно одной командой установить кучу пакетов. А для этого нужно удалить предупреждения из списка и оставить только названия пакетов через пробел. Это можно сделать в обычном блокноте методом поиска и замены.
Далее вводим в терминале команду apt-get install --reinstall и тут же вставляем наш обработанный список пакетов. Переустанавливать сразу все 1500 пакетов лучше не надо. Безопаснее переустанавливать небольшими порциями.
Пример:
apt-get install --reinstall cups-server-common libfam0 libio-socket-ip-perl gvfs-daemons libxcb-render0 libnet-smtp-ssl-perl glx-alternative-nvidia pidgin-skype-common python3.4-minimal libsnmp30 swell-foop libgnome-keyring-common python-debianbts libmbim-glib4 libasyncns0 libasyncns0:i386 fonts-cantarell libperl4-corelibs-perl nvidia-cuda-doc libhogweed2 libhogweed2:i386 libhtml-format-perl pavucontrol pocketsphinx-hmm-en-hub4wsj gconf2 libqt5x11extras5 poppler-utils aisleriot clamav-freshclam libpulse-mainloop-glib0 python-dbus-dev libjack0 libx32gcc1 libpango1.0-0 libxml-twig-perl mono-mcs libqt5widgets5 libcogl-path20 libxcb-util0 libegl1-mesa-drivers libcdio13 libpam-cap grep libgtkmm-2.4-1c2a libmono-microsoft-visualc10.0-cil ifupdown glib-networking-common icewm libboost-system1.55.0 geeqie python-chardet libqt5network5 libharfbuzz-icu0 libjpeg62-turbo libjpeg62-turbo:i386 libmono-system-js
На вопросы о конфигурационных файлах отвечаем по умолчанию (нажимаем Enter).
После одной такой переустановки могут возникнуть ошибки о недоступности каких-либо пакетов. Это могут быть пакеты не из репозиториев. Их можно переустановить командой:
dpkg -i packageneame.deb
Если возникнет ошибка E: Sub-process /usr/bin/dpkg returned an error code (1), алгоритм действий такой:
cd /var/lib/dpkg/info
sudo rm paket.* (удаляем файл связанный с этим пакетом)
Запускаем команду исправления:
apt-get install -f && dpkg --configure -a
Переустановив все пакеты из списка предупреждений, предупреждения останутся, но их станет меньше. Тогда надо будет еще раз получить список пакетов, как описано выше и переустановить их. Чтобы полностью исправить пакетную базу, мне со своими 1500 предупреждениями пришлось раз 5 повторять эту процедуру.
Некоторые программы, в моем случае это wine и pulseaudio перестали запускаться. Wine восстановился простой переустановкой, а в Pulseaudio пришлось изменить настройки. Pulseaudio не запускался, соответственно звук в скайпе, в хроме и в некоторых играх отсутствовал. В консоли pulseaudio показывал ошибку:
E: [pulseaudio] module-console-kit.c: GetSessionsForUnixUser() call failed: org.freedesktop.DBus.Error.Spawn.ExecFailed: Failed to execute program org.freedesktop.ConsoleKit: Success
E: [pulseaudio] module.c: Failed to load module "module-console-kit.so" (argument: ""): initialization failed.
E: [pulseaudio] main.c: Module load failed.
E: [pulseaudio] main.c: Не удалось инициализировать демон.
Этот вопрос решается переустановкой пакета consolekit, удалением профайла pulseaudio из домашнего каталога:
rm -r ~/.config/pulse
и редактированием файла /etc/pulse/default.pa, в котором нужно найти строки:
.ifexists module-console-kit.so
load-module module-console-kit.so
.endif
и закрыть их знаками решётки:
#.ifexists module-console-kit.so
#load-module module-console-kit.so
#.endif
Проверяем работоспособность Pulseaudio:
test@test:~$ pulseaudio -D
Кроме pulseaudio у меня больше ошибок не было.
Перезагружаем систему и убеждаемся, что все работает.
------------------------
ТРИО теплый пол отзыв
Заработок на сокращении ссылок
Earnings on reducing links
Код PHP на HTML сайты
Категория: Компьютерные советы