Как я могу исправить ошибку «Проблема с MergeList» или «файл состояния не удалось разобрать» при попытке выполнить обновление?

344

Компьютер дал мне этот вывод в окне:

E: Encountered a section with no Package: header
E: Problem with MergeList /var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_natty_main_binary-i386_Packages
E: The package lists or status file could not be parsed or opened.

Как я могу это исправить?

    
задан Braiam 12.03.2011 в 18:13
источник

8 ответов

473

Эти команды терминала должны решить вашу проблему:

Сначала удалите список слияния, открыв терминал (нажмите Ctrl + Alt + T для запуска) и запустите эту команду *:

sudo rm -vf /var/lib/apt/lists/*

Затем создайте новый, выполнив простое обновление:

sudo apt-get update

Вот отчет об ошибке другой ), которая теперь исправлена, поэтому она не должна создавать новые искаженные файлы, однако если вы уже имеют неправильные файлы, необходимые для их удаления, как описано в этом сообщении.

* Параметры, используемые для rm: -v verbose

-v, --verbose explain what is being done

и -f force

-f, --force ignore nonexistent files and arguments, never prompt

Если вы никогда не знаете о командной строке или используемых параметрах, всегда ссылайтесь на справочную страницу для этой команды. Доступ к ним можно получить в Интернете путем поиска человека и команды, например man rm или вы можете получить доступ к одной и той же информации, введя точно такую же команду в терминале, например, команды man rm для выхода из страницы будут в нижней части терминала, например,

    
ответ дан Allan 13.03.2011 в 17:53
источник
80

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

sudo rm /var/lib/apt/lists/* -vf
sudo apt-get update

См. также:

ответ дан tommyk 08.02.2011 в 19:37
23

Вы испортили, когда вы отредактировали /var/lib/dpkg/status . Восстановите его из резервной копии, сделанной перед ее редактированием. Конечно, вы сделали резервную копию, верно?

Поскольку вы не сделали резервную копию, отредактируйте ее еще раз, осторожно . Старайтесь не наносить больше урона.

Вы можете использовать /var/lib/dpkg/status.old в качестве контрольной точки. Это резервная копия файла status до последнего времени dpkg . Run

diff /var/lib/dpkg/status.old /var/lib/dpkg/status

, чтобы увидеть различия. Отмените сделанные вручную изменения и сохраните изменения, внесенные последним dpkg run.

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

Вам не нужно редактировать /var/lib/dpkg/status при нормальной работе. Даже в том, что дела идут серьезно неправильно, /var/lib/dpkg/status - это не то, что требует вмешательства администратора. Независимо от ваших проблем с crossplatformui , есть, вероятно, лучший способ их решения. Единственный раз, когда мне приходилось редактировать /var/lib/dpkg/status , было то, что был поврежден файл up_ Packages .

    
ответ дан Gilles 13.05.2012 в 17:37
18

Я сделал

sudo apt-get clean
sudo apt-get update

и он работал.

    
ответ дан psychok7 31.07.2012 в 15:34
16

Следующие шаги 2-5 в Процедуре устранения проблем менеджера пакетов обычно решают эту проблему.

Для шаг 2 отключите все ППД. Вы можете снять все из них в Software Sources так же, как вы снимите отметку с одного; см. Как отключить определенный PPA? . Вы можете повторно включить их позже.

Для шаг 3 закройте все открытые программы. Вероятно, безопасно держать ваш веб-браузер открытым, чтобы у вас были ваши инструкции перед вами. Но особенно важно убедиться, что все менеджеры пакетов не работают . Это включает в себя Центр программного обеспечения, Обновление программного обеспечения (Update Manager в более старых версиях Ubuntu), Synaptic и Gdebi. Он также включает утилиты управления пакетами командной строки, такие как apt-get , dpkg и aptitude .

Обратите внимание, что если другие пользователи регистрируются в одно и то же время, они должны выйти из системы, если это возможно.

Для шаг 4 откройте окно терминала. Один из способов сделать это, независимо от используемой среды рабочего стола, - нажать Ctrl + Alt + T .

Для шаг 5 запустите эти команды в окне терминала:

ubuntu-support-status
sudo grep -R proxy /etc/apt/*
grep proxy  /etc/environment
echo $http_proxy
echo $ftp_proxy
grep proxy /etc/bash.bashrc
grep proxy ~/.bashrc
cat /etc/apt/apt.conf
sudo fuser -vvv /var/lib/dpkg/lock
sudo fuser -vvv /var/cache/apt/archives/lock
cat /etc/lsb-release
uname -a
sudo rm /var/lib/apt/lists/lock 
sudo rm  /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock
sudo cp -arf /var/lib/dpkg /var/lib/dpkg.backup
sudo mv /var/lib/dpkg/status /var/lib/dpkg/status-bad
sudo cp /var/lib/dpkg/status-old /var/lib/dpkg/status  ||  sudo cp /var/backups/apt.extended_states.0 /var/lib/dpkg/status
sudo mv /var/lib/dpkg/available /var/lib/dpkg/available-bad
sudo cp /var/lib/dpkg/available-old /var/lib/dpkg/available
sudo rm -rf /var/lib/dpkg/updates/*
sudo rm -rf /var/lib/apt/lists
sudo rm /var/cache/apt/*.bin
sudo mkdir /var/lib/apt/lists
sudo mkdir /var/lib/apt/lists/partial
LANG=C;sudo apt-get clean
LANG=C;sudo apt-get autoclean
LANG=C;sudo apt-get --purge autoremove
LANG=C;sudo apt-get --fix-missing update -o APT::Cache-Limit=100000000
sudo dpkg --configure -a
sudo dpkg --clear-avail
LANG=C;sudo apt-get -f install
LANG=C;sudo apt-get --fix-missing install
LANG=C;sudo apt-get update -o APT::Cache-Limit=100000000 && sudo apt-get dist-upgrade
find /etc/apt -name '*.list' -exec bash -c 'echo -e "\n$1\n"; cat -n "$1"' _ '{}' \;

Я скопировал это дословно из PackageManagementTroubleshoootingProcedure 2 марта 2014 года. Эти команды развивались в прошлом и рекомендованные команды в эта статья может быть изменена или расширена снова в будущем . Поэтому вы можете работать с шагом 5 там . (Эта статья, создана / отредактирована в разделе "Сторонники документации по документации Ubuntu" - особенно Mark Rijckenberg --is лицензированный CC-BY-SA 3.0 , который позволяет включить здесь правильную атрибуцию.)

Некоторые из этих команд пытаются исправить проблему (а также могут отображать диагностическую информацию); другие отображают ценную информацию о проблеме, которую вы можете включить в свой вопрос или иным образом предоставлять кому-то, кто помогает вам. (Или, в зависимости от ваших навыков, может разрешить вам диагностировать и решать проблемы.)

Часто это исправляет это, но когда он этого не делает, он часто дает достаточно информации, чтобы исправить его.

Вам не нужно вручную вводить эти команды; вы можете их скопировать и вставить. Однако я рекомендую вставлять и запускать каждый отдельно. Это дает более четкое представление о том, из каких команд команды.

    
ответ дан Eliah Kagan 28.11.2011 в 03:36
11

Я также видел, что эта проблема возникает, когда у вас слишком много источников в ваших репозиториях.

Попробуйте решение, размещенное выше и / или, возможно, это, что иногда рекомендуется на панели запуска:

sudo mv /var/lib/apt/lists /var/lib/apt/lists-old
sudo mkdir -p /var/lib/apt/lists/partial
sudo apt-get update

Сообщите нам, как вы поживаете.

    
ответ дан andybleaden 08.05.2011 в 12:19
4

Я столкнулся с аналогичной ошибкой:

Reading package lists... Error!
E: Encountered a section with no Package: header
E: Problem with MergeList /var/lib/dpkg/status
E: The package lists or status file could not be parsed or opened.

Я повторил аналогичные предложения, чтобы скопировать status-old .

$ head /var/lib/dpkg/status
$ head /var/lib/dpkg/status-old

Все мои статусные файлы по какой-то причине были пустыми. К счастью, я обнаружил, что есть резервные копии этих файлов:

$ ls -l /var/backups/dpkg.status.*
-rw-r--r-- 1 root root 444620 Nov 15 06:33 /var/backups/dpkg.status.0
-rw-r--r-- 1 root root 444620 Nov 15 06:33 /var/backups/dpkg.status.1.gz
-rw-r--r-- 1 root root 128168 Sep 20  2013 /var/backups/dpkg.status.2.gz
-rw-r--r-- 1 root root 112545 Sep 16  2013 /var/backups/dpkg.status.3.gz
-rw-r--r-- 1 root root 107767 Sep 14  2013 /var/backups/dpkg.status.4.gz
-rw-r--r-- 1 root root 107766 Sep 11  2013 /var/backups/dpkg.status.5.gz
-rw-r--r-- 1 root root  94583 Sep 11  2013 /var/backups/dpkg.status.6.gz

Я проверил последнюю резервную копию ...

$ head /var/backups/dpkg.status.0

... но все еще было пусто. Поэтому я расстегнул старую ...

$ gunzip /var/backups/dpkg.status.1.gz
$ head /var/backups/dpkg.status.1

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

$ cp /var/backups/dpkg.status.1 /var/lib/dpkg/status

Тогда apt-get update бежал без проблем.

Кредит отправляется на это сообщение.

    
ответ дан Andrew 12.04.2014 в 00:43
3

У меня была такая же проблема, и я попытался устранить все проблемы, упомянутые в других ответах. Как ни странно, единственным решением было другое:

  • Перейдите к Software & amp; Обновления - > Ubuntu Software - > Загрузить From - > Other- > Выбрать лучший сервер

  • Ждите тестов. В конце тестов будет выбран лучший сервер, не обязательно ближайший, ни главный сервер, ни сервер для вашей локали.

  • Теперь перезагрузите данные репо, он будет правильно выполнен.

ответ дан Muhammad Annaqeeb 11.11.2015 в 05:12