Сайт Георгия Мурого

Предупреждение pkg_info: package info is corrupt


Предупреждение: данный текст был написан в 2007 году и может не соответствовать современным технологическим решениям для управления программным обеспечением FreeBSD.


Суть проблемы:

Повреждение списка установленного программного обеспечения FreeBSD в результате сбоя компьютера во время работы portupgrade или pkgdb (отсутствуют файлы «+CONTENTS» в поддиректориях /var/db/pkg).

В какой ситуации проявилась проблема:

Перезагрузка компьютера из-за сбоя электропитания во время работы portupgrade.

После включения fsck выявила большое количество сбоев на /var.

Признаки проблемы:

  1. При создании файла /var/db/pkg/pkgdb.db после его удаления pkgdb -F не видит установленного ПО (например, в выводе присутствует «0 packages found»).

    Это проявляется только при создании pkgdb.db с нуля; если pkgdb.db не удалять, выводится информация о нарушенных зависимостях.

  2. pkg_info 2>&1 выводит строки вида: pkg_info: the package info for package ‘glib-2.14.4’ is corrupt

Решение:

  1. rm /var/db/pkg/pkgdb.db

  2. Если для установленной версии FreeBSD имеются готовые пакаджи с версиями ПО, совпадающими с версиями установленного в системе, извлечь из этих пакаджей файлы «+CONTENTS» и поместить на соответствующее место в /var/db/pkg/.

  3. Для программ, версии которых в пакаджах не совпадают с установленными в системе, выполнить portupgrade -fN <программа>.

  4. Если после выполнения предыдущего пункта в выводе pkg_info 2>&1 | grep corrupt встречаются записи вида: libiconv-1.11_1 A character set conversion lpkg_info: the package info for package 'lynx-2.8.6.5_2,1' is corrupt то для всех вторых программ в этой строке (здесь - lynx):

    • деинсталлировать программу через порт

    • удалить директорию /var/db/<программа>;

    • инсталлировать программу через порт.

  5. Обновить ПО через portupgrade.

Автор: Георгий Мурый, site@moury.ru, 2007 год