Поврежденный файл статуса dpkg

После обновления моей системы на прошлой неделе S попал в вентилятор. Посмотрел на форун, но не получил ответа, чтобы решить мою проблему. В DPKG файл "status" был поврежден, резервные копии были пусты, поэтому попытались восстановить с помощью:

(for d in /usr/share/doc/* ; do printf 'Package: %s\nStatus: install ok installed\n' $(basename $d) ; done ) > ~/status
cp ~/status /var/lib/dpkg/

Моя установка:

Виртуальный сервер, шаблон ОС ubuntu-12.04-x86_64 + Plesk Client сервер с почтой и сайтами

Как сказано после восстановления файла состояния, я запускаю:

root@justme:~# sudo apt-get dist-upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following NEW packages will be installed:
  adduser apt-utils base-files base-passwd bash bash-completion bsdmainutils bsdutils busybox-initramfs coreutils cpio cryptsetup cryptsetup-bin dash dbus debconf-i18n debianutils diffutils
  dmsetup dpkg e2fslibs e2fsprogs ecryptfs-utils file findutils gcc-4.6-base gettext-base grep gzip hostname ifupdown initramfs-tools initramfs-tools-bin initscripts insserv iproute keyutils
  klibc-utils libacl1 libapt-inst1.4 libapt-pkg4.12 libatm1 libattr1 libblkid1 libbz2-1.0 libc-bin libc6 libcomerr2 libcryptsetup4 libdb5.1 libdbus-1-3 libdevmapper1.02.1 libdrm-intel1
  libdrm-nouveau1a libdrm-radeon1 libdrm2 libecryptfs0 libexpat1 libffi6 libgcc1 libgcrypt11 libglib2.0-0 libglib2.0-data libgpg-error0 libgpm2 libkeyutils1 libklibc liblocale-gettext-perl
  liblzma5 libmagic1 libmount1 libncurses5 libncursesw5 libnih-dbus1 libnih1 libnspr4 libnss3 libnss3-1d libpam-modules libpam-modules-bin libpam-runtime libpam0g libpciaccess0 libpcre3
  libplymouth2 libpng12-0 libpopt0 libreadline6 libselinux1 libslang2 libsqlite3-0 libss2 libssl1.0.0 libstdc++6 libtext-charwidth-perl libtext-iconv-perl libtext-wrapi18n-perl libtinfo5 libudev0
  libuuid1 libxml2 login lsb-base lsof makedev mime-support module-init-tools mount mountall multiarch-support ncurses-base ncurses-bin netbase original-awk passwd perl-base plymouth
  plymouth-theme-ubuntu-text procps psmisc python python-minimal python2.7 python2.7-minimal readline-common rsync sed sensible-utils sgml-base shared-mime-info sysv-rc sysvinit-utils tar tzdata
  udev upstart util-linux uuid-runtime xml-core xz-utils zlib1g
The following packages will be upgraded:
  debconf
1 upgraded, 141 newly installed, 0 to remove and 0 not upgraded.
Need to get 0 B/38.3 MB of archives.
After this operation, 118 MB of additional disk space will be used.
Do you want to continue [Y/n]? y
Extracting templates from packages: 100%
Preconfiguring packages ...
dpkg-query: error: parsing file '/var/lib/dpkg/status' near line 15 package 'acl:i386':
 blank line in value of field 'Original-Maintainer'
' not allowed (only letters, digits and characters `-+._')install-info
E: Sub-process /usr/bin/dpkg returned an error code (2)
W: Encountered status field in a non-version description

Может кто-нибудь помочь..?? Смотрел почти везде.

3 ответа

Это ошибка точно.

Попробуйте следующее, пока ваша проблема не будет устранена.

sudo dpkg --configure -a
sudo apt-get dist-upgrade

Если это не удается, попробуйте

sudo rm /var/lib/dpkg/available
sudo dselect update
sudo apt-get dist-upgrade

Или если все остальное терпит неудачу

sudo rm /var/lib/dpkg/{status,available}
sudo apt-get update
sudo apt-get dist-upgrade

Если это не помогло, вам нужно будет отредактировать файл и удалить ошибочную строку или отправить отчет об ошибке.

Я столкнулся с такой же проблемой. E: Подпроцесс /usr/bin/dpkg возвратил код ошибки (2) W: Обнаружено поле состояния в описании не версии

Я заменил файл статуса dpkg файлом status_old. Это исправило мою проблему. / Вар / Библиотека / Dpkg/ статус

Мой файл был удален, и, согласно apt, у меня не было установленных пакетов, так как он определяет их из файла. Я использовал следующий метод для восстановления файла. Этот метод отлично сработал для меня в Kali GNU/Linux, основанной на Debian.

ПРИМЕЧАНИЕ:

  • Этот метод предполагает, что все установленные пакеты создали записи в /usr/share/docкаталог.

  • Этот метод начинается с пустого /var/lib/dpkg/statusфайл.

  • Этот метод может не работать, если у вас есть более 1 репозитория, предоставляющего один и тот же пакет. Если у вас есть более 1 репозитория, предоставляющего один и тот же пакет, временно отключите вспомогательное репо, а затем удалите списки кеша пакетов для репо в /var/lib/apt/lists/.

  1. Удалить текущий и файлы. Сделайте резервную копию файлов перед удалением на случай возникновения ошибок.

            mkdir ~/dpkg-status-backup
    cp /var/lib/dpkg/{status,status-old} ~/dpkg-status-backup
    rm /var/lib/dpkg/{status,status-old}
    
  2. Получить список всех установленных пакетов, по одному пакету в строке. Примечание: это 1(один) нет l(нижний регистр  L).

            ls -1 /usr/share/doc > installed-packages.list
    
  3. Перепишите список пакетов в одну строку.

            tr '\n' ' ' < installed-packages.list > installed-packages-one-line.list
    
  4. Создайте пустой файл, чтобы запустить apt-cache.

            touch /var/lib/dpkg/status
    
  5. Создавайте записи пакетов с помощью apt-cache.

            cat installed-packages-one-line.list | xargs apt-cache show > raw-status-file
    
  6. Может содержать Status:поля для некоторых пакетов. Удалите их, чтобы избежать дублирования.

            sed -i '/^Status:/d' raw-status-file
    
  7. Добавить Status: поле для каждого пакета, чтобы указать apt и dpkg, что они установлены.

            sed -i 's/^Package:.*/&\nStatus: install ok installed/' raw-status-file
    
  8. Удалите нежелательные для dpkg поля в файле: SHA1:, SHA256:, MD5sum:, Description-md5:, Size:& Filename:.

            sed -i '/^MD5sum:/d' raw-status-file
    sed -i '/^SHA1:/d' raw-status-file
    sed -i '/^SHA256:/d' raw-status-file
    sed -i '/^Size:/d' raw-status-file
    sed -i '/^Filename:/d' raw-status-file
    sed -i '/^Description-md5:/d' raw-status-file
    
  9. Результирующий raw-status-fileпосле выполнения приведенных выше команд теперь является фактическим файлом dpkg.

            mv raw-status-file status
    
  10. Скопируйте файл в /var/lib/dpkg/как и  status-old.

            cp status /var/lib/dpkg/status
    cp status /var/lib/dpkg/status-old
    
  11. Теперь запустите dpkg, чтобы проверить ваш новый файл состояния. Если вы получаете ошибки, воспользуйтесь подсказками из отчета об ошибках dpkg и примите соответствующие меры. Если ошибок нет, значит файл имеет правильный синтаксис.

            dpkg --get-selections
    
  12. Снова включите отключенные репозитории, затем запустите apt, чтобы обновить списки кеша пакетов, чтобы предотвратить ошибку.

            apt update
    
  13. Если вы столкнетесь с packages have unmet dependenciesошибка в apt, затем убедитесь, что вы включили вспомогательные репозитории, предоставляющие зависимости, а затем запустите aptitude. я предпочитаю aptitudeпотому что лучше решает ошибки установки пакетов.

            aptitude full-upgrade
    

Если вы не получаете никаких ошибок/ваши ошибки были устранены с помощью apt или dpkg, и вы получаете сообщение " PACKAGE is уже самая новая версия..." при попытке установить программу, которая, как вы уверены, уже установлена, например coreutils, то вы успешно восстановили dpkg statusфайл.

Очистите созданные временные файлы и резервную копию.

      rm installed-packages.list installed-packages-one-line.list status
rm -r ~/dpkg-status-backup
Другие вопросы по тегам