Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: [РЕШЕНО] Как восстановить информацию о установленных в системе пакетах?  (Прочитано 6912 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн V_V_V

  • Автор темы
  • Любитель
  • *
  • Сообщений: 66
  • UbuntuStudio 12.10
    • Просмотр профиля
Сдуру удалил ВСЕ содержимое каталога /var/lib/dpkg/info (чистил упоминания об одном неудачно установленном пакете - дочистился). Особо смертельного (вроде бы) ничего не происходит, но при работе с пакетами начало писать всякую муть. К примеру:
(Нажмите, чтобы показать/скрыть)
ну и другие сообщения (нет сохраненных).
Как восстановить информацию о установленных пакетах?


P.S. Проблема решена. Один из вариантов решения (предложен dimas000) - выполнить команду
aptitude search ~i -F %p --disable-columns | while read pkg ; do [ $(aptitude search ^$pkg$ -F %V) != "<нет>" ] && sudo aptitude reinstall "$pkg" ; done Ниже рассмотрены и другие варианты с их плюсами и минусами, у кого такая же проблема - решайте сами, что использовать.
« Последнее редактирование: 17 Январь 2011, 10:08:09 от V_V_V »
Стучитесь, и вас откопают...

Оффлайн Vitsliputsli

  • Старожил
  • *
  • Сообщений: 1244
    • Просмотр профиля
Ничего кроме как переустановить все пакеты в голову не приходит...

Оффлайн V_V_V

  • Автор темы
  • Любитель
  • *
  • Сообщений: 66
  • UbuntuStudio 12.10
    • Просмотр профиля
Ничего кроме как переустановить все пакеты в голову не приходит...

Тоже самое рекомендуют и здесь. Только там у автора топика хоть оправдание есть - снес все по пьяни...  :)
Мож все же есть более корректный способ?
Стучитесь, и вас откопают...

Оффлайн dimas000

  • Старожил
  • *
  • Сообщений: 1437
  • Ubuntu 9.10 @ 2.6.34
    • Просмотр профиля
а для того, чтоб эту самую информацию добыть, все равно придется качать все пакеты - список файлов, md5, postinst/prerm/postrm-скрипты и пр... короче, если
dpkg --get-selectionsвыдает список пакетов, то пробуй переставлять. что-то типа
sudo aptitude reinstall pkg_nameв более юзабельном виде список можно получить так
aptitude search ~i -F "%p" --disable-columnsи скормить его аптитуду на реинсталл, если таковой заработает
лучше на "ты"

Оффлайн V_V_V

  • Автор темы
  • Любитель
  • *
  • Сообщений: 66
  • UbuntuStudio 12.10
    • Просмотр профиля
Таки победил. Пришлось переустановить все, как и советовали выше. Отдельное спасибо dimas000 за направление куда конкретно рыть. Плюс гуглу и напильнику.
Информацию о пакетах собрал командой:
dpkg --get-selections | grep '[[:space:]]install'| awk '{print $1}' > packages.list
(убираются из стандартного вывода dpkg --get-selections пробелы и колонка слов install)
А для переустановки написал маленький скрипт:
#!/bin/sh
for package in $(cat packages.list); do aptitude reinstall $package; done

ну и запустил его.
Отрабатывало долго, много чего выкачало. Несколько пакетов по ходу дела (не прерывая сам процесс) ругались на невозможность установки - я в соседнем терминале просто удалял их файлы .postinst из /var/lib/dpkg/info, ошибка исчезала, пакеты работают нормально.
Стучитесь, и вас откопают...

Оффлайн dimas000

  • Старожил
  • *
  • Сообщений: 1437
  • Ubuntu 9.10 @ 2.6.34
    • Просмотр профиля
все гораздо проще оказалось
sudo aptitude reinstall ~iмат в один ход))))
ЗЫ. поправь хэд-пост, добавив в него решение - будет совсем хорошо
лучше на "ты"

Оффлайн V_V_V

  • Автор темы
  • Любитель
  • *
  • Сообщений: 66
  • UbuntuStudio 12.10
    • Просмотр профиля
мат в один ход))))
Похоже что это действительно самое оптимальное решение, но есть нюансы.

Начал проверять на тестовой машине (снес содержимое /var/lib/dpkg/info). Запустил Вашу команду и сразу напоролся на небольшой подводный камень - если есть установленные вручную пакеты (имеется ввиду не из прописанных в системе репозиториев, а просто из сторонних deb`ов) вполне можно напороться на сообщение (пример):
E: Не удалось обнаружить файл пакета haspd. Это может означать, что вам придётся вручную исправить этот пакет.
E: Внутренняя ошибка: не удалось создать список пакетов для скачивания
и обновление прекращается.
Решение этого вопроса глубоко не копал, просто удалял все упоминания на спорные пакеты в файле /var/lib/dpkg/status.
Выкачало около 2-х ГБ (!) пакетов (хорошо что имею локальный репозиторий). Способом выше качало существенно меньше. И опять остановилось на ошибке:
E: Не удалось выполнить оперативную настройку 'bash'.Подробней, смотрите в man 5 apt.conf о APT::Immediate-Configure. (2)Пока не победил, подозреваю что это будет не единственное подобное сообщение...
Стучитесь, и вас откопают...

Оффлайн dimas000

  • Старожил
  • *
  • Сообщений: 1437
  • Ubuntu 9.10 @ 2.6.34
    • Просмотр профиля
aptitude search ~i -F "%p" --disable-columns
dpkg --get-selections | rgrep -P "\tinstall" | rgrep -oP "^[^\t]*"
обе команды дают абсолютно идентичные листы
Цитировать
если есть установленные вручную пакеты (имеется ввиду не из прописанных в системе репозиториев, а просто из сторонних deb`ов) вполне можно напороться на сообщение
а вот это да, это логично. ибо установленный ручками пакет он из репозитория на скачает. тоды да, тут понятно, в чем прикол. действительно, надо по одному их кормить. тогда каждый зафэйленный пакет просто пропускается с ошибкой, а если всей кучей - это портит сразу все.
тогда вот такой мат в один ход:
aptitude search ~i -F %p --disable-columns | while read pkg ; do sudo aptitude reinstall "$pkg" ; doneтвой вариант, только одной строкой)))
а вот еще придумал проверку на доступность пакета:
>14:31:43 010 ~$ aptitude search wizardpen -F "%V"
<нет>
%V - доступная в репозитории версия пакета. соответственно,
aptitude search ~i -F %p --disable-columns | while read pkg ; do [ $(aptitude search ^$pkg$ -F %V) != "<нет>" ] && sudo aptitude reinstall "$pkg" ; doneэто уже с проверкой... у заработало: запустил в таком виде (разве что aptitude в режиме -s) - стал последовательно "переставлять" все пакеты; скормил список из abiword и wizardpen - abiword "переставил", wizardpen не тронул, ибо нет такого в репах.
как-то так))
лучше на "ты"

Оффлайн V_V_V

  • Автор темы
  • Любитель
  • *
  • Сообщений: 66
  • UbuntuStudio 12.10
    • Просмотр профиля
Как не пытался добиться <нет> от aptitude search wizardpen -F "%V" - ни разу не получилось.  :) Поэтому от него отказался.
На нескольких компьютерах проверял (с 10.04 и 10.10). Пример с одного:
(Нажмите, чтобы показать/скрыть)
aptitude и htop соответственно установлены и доступны в репах.
Но не в этом счастье! :)  Очень понравился Ваш скрипт одной строкой
aptitude search ~i -F %p --disable-columns | while read pkg ; do sudo aptitude reinstall "$pkg" ; done действительно отработал один в один с моим способом, только в разы проще. :)
Его и  вынесу в хэд-пост, кому-то да пригодится. И громадное спасибо за помощь!

Пользователь решил продолжить мысль 16 Январь 2011, 00:33:26:
Да, и еще одно. Я тут писал, что при тестах выкачало 2Гб пакетов,  что сильно отличалось от машины с проблемой. Так вот скорее всего это из-за разных дистрибутивов - в первом случае (проблемном) был сервер с самым необходимым ПО, ничего лишнего; во втором случае (тестовом) была десктопная машина с иксами, офисами, играми и прочей лабудой - вот и разница в количестве переустанавливаемых пакетов и соответственно трафика.
« Последнее редактирование: 16 Январь 2011, 00:33:26 от V_V_V »
Стучитесь, и вас откопают...

Оффлайн dimas000

  • Старожил
  • *
  • Сообщений: 1437
  • Ubuntu 9.10 @ 2.6.34
    • Просмотр профиля
Цитировать
Как не пытался добиться <нет> от aptitude search wizardpen -F "%V" - ни разу не получилось.   Поэтому от него отказался.
На нескольких компьютерах проверял (с 10.04 и 10.10). Пример с одного:
....
kisa@kisa:~$ aptitude search wizardpen -F "%V"
все правильно, нет такого пакета в системе, потому и вывод пустой. у меня есть, я ставил самосборный драйвер, потому и взял как пример недоступного в репах пакета
Цитировать
<нет>      python2.6-abiword
а вот и искомое. это "виртуальный пакет", который формально существует, а по факту - нет. (не путать с метапакетами, которые существуют и могут быть установлены/удалены/etc)
вот у себя в 9.10 нашел от все того же абиворда:
(Нажмите, чтобы показать/скрыть)
так что все работает))) пробей так любой установленный ручками (из deb'а / из отключенного ныне ppa / etc) пакет - должно показать все как надо
ЗЫ. посмотрел на сервере с Debian, в Дебиане пишет "<пусто>")))
лучше на "ты"

Оффлайн V_V_V

  • Автор темы
  • Любитель
  • *
  • Сообщений: 66
  • UbuntuStudio 12.10
    • Просмотр профиля
все правильно, нет такого пакета в системе, потому и вывод пустой. у меня есть, я ставил самосборный драйвер, потому и взял как пример недоступного в репах пакета
...
ЗЫ. посмотрел на сервере с Debian, в Дебиане пишет "<пусто>")))
Блин, а ведь действительно нужно было проверять с уже установленным у меня сторонним пакетом... Дался мне тот wizardpen...  :)
vitaliy@vitaliy:~$ aptitude search haspd -F "%V"
<нет>                                                                                                                                                                                                             
Наверх подыму окончательный вариант
aptitude search ~i -F %p --disable-columns | while read pkg ; do [ $(aptitude search ^$pkg$ -F %V) != "<нет>" ] && sudo aptitude reinstall "$pkg" ; doneСпасибо!
Стучитесь, и вас откопают...

 

Страница сгенерирована за 0.06 секунд. Запросов: 22.