У меня очень старенький винт, потихоньку сыплется. Поэтому часто бывают всякие "неожиданности". Но это не всё. Часто при обновлениях случается чт-то от вас не зависящее, и не всегда этому виной кривые руки. Бывает, что dpkg спотыкается обо что-либо, и дальше всё.. ничего обновить в системе, установить или удалить вы через aptitude (apt-get) вы не сможете... Как вариант, можно посмотреть список зависимостей, и удалять всё ручками, но я считаю что это не айс - удалять каждый файлик, править конфиги... Может это и true linux way, но увы, сейчас уже третье тысячелетие, и я отказался от такого извращения. Поэтому мы просто попытаемся починить dpkg.
Итак, приступим:
dpkg — это программное обеспечение, являющееся основой системы управления пакетами в Debian. dpkg используется для установки, удаления, и получения информации о .deb пакетах.
Подробнее смотрите в Wiki, я лишь опишу некоторые проблемы, встречающиеся при обработке пакетов.
1) Что поможет в 80% случаев:
Зачастую достаточно просто запросить из хранилища(репозитория) новый список пакетов:
sudo aptitude update
sudo aptitude install -f
И установить обновления:
sudo aptitude safe-upgrade
Бывает что проблема - это плохо сконфигурированный пакет. Поэтому мы просто её ещё раз переконфигурируем:
sudo dpkg --configure -a
2) Остальные "сложные" случаи:
Для остальных случаев придётся переконфигурировать всё:
sudo dpkg-reconfigure -a
Осторожно, может занять много времени 8)
Или именно этот пакет:
sudo dpkg-reconfigure --default-priority %pack_name%
Ну бывает что нужно переконфигурировать его, даже если он поломан или неисправен:
sudo dpkg-reconfigure --force %pack_name%
!ВНИМАНИЕ! Использовать осторожно!
Если и это не помогает, то смотрим что именно произошло, не боимся гуглить и так далее, например у меня было вот что:
3) Конкретные случаи:
1) Падение dpkg - /var/lib/dpkg/available: Input/output error.
E: Sub-process /usr/bin/dpkg returned an error code (2)
dpkg: при работе функции buffer_read(fd) произошла ошибка: копирование файла информации /var/lib/dpkg/available: Input/output error
Дааааа... Как всегда косяки, ну ничего, где-то мы такое видали. Минутный поиск по форуму сообщества и на глаза вылазит лекарство:
sudo dpkg --configure -a
либо
sudo apt-get install -f && sudo dpkg --configure -a
К сожалению никаких результатов в моем случае это не дало.
Ищем дальше. Гугл толком ничего не даёт, найдены пару вариантов с англоязычного форума линукс. К сожалению не помогает. Ну ладно значит будем думать головой...
Идём по адресу /var/lib/dpkg/ находим файл available, пытаемся открыть - filed. Осматриваемся в папке,и видим интересный файл под названием available_old.
Значит, при обновлении пакетов была сделана резервная копия этого файла со старым содержимым. Открываем, копируем содержимое , удаляем available и создаём на его месте новый файл с тем же названием. Вставляем содержимое из available_old.
Проверяем обновления
sudo apt-get update
есть. Запускаем
sudo apt-get upgrade
и о чудо, всё работает. Теперь можно и продолжать настройку системы. Также возможен другой вариант лечения dpkg.
sudo dpkg --clear-avail
#удалить информацию о доступных пакетах.
далее
sudo apt-get update
#обновление информации о пакетах.
но это при условии, что ваш файл не окажется битым, как в моём случае.
Да, чуть не забыл при внесении данного сообщения начал меня раздражать SCIM Method? он так и норовил подсунуть мне какой-нибудь арабско-еврейско-хрензнает какой шрифт. Пришлось избавится
apt-get remove scim
Взято с тыц'а
2) Удалил пакет руками - теперь aptitude ругается, что делать?
dpkg: не удалось обработать параметр %pack_name% (--configure):
подпроцесс post-installation script возвратил код ошибки 1
При обработке следующих пакетов произошли ошибки:
%pack_name%
E: Sub-process /usr/bin/dpkg returned an error code (1)
В таком случае можно удалить пакет через dpkg:
dpkg --purge %pack_name%
#удалит всё что о нём было известно вместе с ним 8)
3) в списке файлов пакета %pack_name% отсутствует завершающий символ новой строки
aptitude install -f
Чтение списков пакетов... Готово
Построение дерева зависимостей
Чтение информации о состоянии... Готово
Чтение информации о расширенных состояниях
Инициализация состояний пакетов... Готово
(Чтение базы данных ... dpkg: невосстановимая ошибка, прекращение работы:
в списке файлов пакета %pack_name% отсутствует завершающий символ новой строки
E: Sub-process /usr/bin/dpkg returned an error code (2)
Не удалось установить пакет. Попытка восстановить:
Чтение списков пакетов... Готово
Построение дерева зависимостей
Чтение информации о состоянии... Готово
Чтение информации о расширенных состояниях
Инициализация состояний пакетов... Готово
Я гуглил много, оказалось решение очень простое:
sudo kate /var/lib/dpkg/status
После чего Ctrl+F - вводим в поиск %pack_name% и удаляем всё что с ним связано, после чего делаем пункт 1) и вуаля, dpkg вернулся из мёртвых, Ressurect III lvl окрыляет!
ПОДРОБНАЯ ИНФОРМАЦИЯ о dpkg на русском можно глянуть тут: тыц
Если нада, можно сюда скопипастить, но не думаю что нужно...
Проапгрейдил, исправил бОльшинство орфографических ошибок, привёл всё к единому формату. Любые дополнения приветствуются. В данный момент ищутся любые другие ошибки в dpkg, которые решаются способами, которых тут ещё нет.
Ну и спасибо баламутику за баламутивание 8)
Комментарии (12)
Ну это нужно в первую очередь тебе самому - инфу на винте можно случайно убить записи на бумажке потерять а блог это электронный дневник который всегда сохранят заботливые админы плюс описывая свои проблемы и их решения на этом ресурсе ты помогаешь новичкам осваивать эту замечательную ОС ведь намного проще глянуть решение той или иной проблемы на этом ресурсе чем пол дня гуглить по всему инету да и не у всех траффик безлимитный особенно в глубинке так что даже и не сумлевайся. А при наборе хорошего и провереного материала по этой проблеме я думаю dm с balamutikom эту статью и в подшивку внесут например в раздел "Установка и восстановление" или ещё куда...
раздолбаи(очень хороший синоним матного слова) модераторы...
и случайно затрутКонечно, стоящий материал будет всегда в почёте, хотя и в этой замечательной статье можно, что-то улучшить для понимания и поиска её когда именно она нужна.
Вот, что улучшить, что-то в голову не прийдёт...
ам.... Как только скажите что - будем пилить и пилить ипилить до конца.. Пока исправил все орфографические ошибки русского языка что увидел и привёл статью к единому формату 8)
Помогло при реальной поломке...)) Спасибо большое!
А у меня вопрос, я вот удалила файлы базы данных пакетов установленных (експерементировать сильно люблю), в результате ничего не могла потом установить, замкнутый круг зависимостей получился в результате, это можно как то починить? (я это починила переустановкой кубунты :D приурочив к нему ещё и эксперимент с ядром... )
И вот ещё, у меня в янти aptitude постоянно пытается обновлять пакеты, при чём версии которые уже стоят в системе, и те на которые он хочет обновить одни и те же, был бы интернет хороший я бы может и не заметила, но когда каждый день по 50-100мб хочет обновляться... С этим можно что-то сделать?
У меня была похожая ситуация, когда ветка proposed была включена в репозиториях: сначала появляется в ней тестируемая версия обновления, несколько раз допиливается, а потом попадает в security... Я так ядро одной версии раза 4 ставил =)
Если проблема такая же, то можно просто подправить сорс-лист.
что то я с таким поведением не сталкивался, но все же...
sudo aptitude reinstall название кернела...
может поможет...
на всякий случай скачать отдельно и и сравнить md5sum
может битые пакеты приходят...
или на зеркале оказались битые...
В сорс-листе всё ок. Включены только стабильные ветки.
Огромное спасибо!
Хорошая тема , помогла мне
+1
Очень помогла статья. Автору спасибо.