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

355

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

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
источник
7
Меня продолжает сбивать с толку то, как неловко эта операционная система обрабатывает свои обновления, даже сейчас, когда это и подобные вещи требуются без особого злоупотребления со стороны пользователя.
матовая

Ответы:

485

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

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

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

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

sudo apt-get update

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


* Опции, используемые для rm, -vмногословны

-v, --verbose объяснить, что делается

и -fсила

-f, --force игнорировать несуществующие файлы и аргументы, никогда не запрашивать

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

изображение параметров страницы руководства

Аллан
источник
8
Один человек обнаружил, что он должен был выполнить эти два шага несколько раз, но в итоге это сработало.
Джон С. Грубер
5
Странно ставить -vfв конце rmкоманды.
Кит Томпсон
6
Это не решило проблему для меня. обновление все еще показывает мне эту ошибку.
морские пехотинцы
1
Это повторяющаяся проблема. Это происходит время от времени. Кто-нибудь знает о причине этой проблемы?
Rushil Paul
1
Я отредактировал ответ для понимания способности @jasser
Аллан
82

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

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

Смотрите также:

tommyk
источник
1
что делает -vf?
Speedox
5
@speedox, в соответствии с man rm, -vозначает «многословный» и -fозначает «сила». Другими словами, удалите все обозначенные файлы без запроса и сообщите пользователю, что он делает.
четверг,
В моем случае просто делаю sudo apt-get updateисправленную проблему. Я думаю, что Аллан упомянул о новых версиях apt и исправляет это автоматически, поэтому, возможно, сначала попробуйте обновить.
ThorSummoner
23

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

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

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

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

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

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

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

жилль
источник
Я также хотел бы знать, как вы упомянули лучший способ удаления crossplatformui, если бы вы могли помочь, потому что я пытался всеми возможными способами удалить его и пытался найти много решений, но сработало только то, которое я упомянул ...
Nirmik
1
@Nirmik Понятия не имею crossplatformui. Задайте это как отдельный вопрос. Я могу вам сказать, что за более чем десятилетнее использование dpkg, включая множество неофициальных источников, мне очень редко нужно было редактировать statusфайл, и только когда был сломанный сторонний репозиторий.
Жиль
Хорошо ... Большое спасибо еще раз .... как вы предлагаете, я опубликую это как новый вопрос :) также, поскольку вы кажетесь очень продвинутым пользователем, я хотел бы спросить вас, знаете ли вы что-нибудь о том, чтобы сделать неработающий ГОРЯЧИЙ -KTEYS работают ?? (моя беспроводная клавиша работает до
конца
Пытался поставить старую на место новой, не исправил для меня. :-(
Стефан Гурихон
1
Re: {Вы облажались, когда вы редактировали / var / lib / dpkg / status}, как для меня - нет, я не, я не трогал этот файл :) Однако это единственное решение, которое решает проблему в моем кейс. Спасибо.
Русло
18

я сделал

sudo apt-get clean
sudo apt-get update

и это сработало.

psychok7
источник
1
Не исправить для меня. :-(
Стефан Гурихон
16

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

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

На шаге 3 закройте все открытые программы, которые вы можете. Вероятно, безопасно держать ваш веб-браузер открытым, чтобы ваши инструкции были перед вами. Но особенно важно убедиться, что менеджеры пакетов не запущены . Это включает Центр программного обеспечения, Software Updater (Менеджер обновлений в более старых версиях 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» - особенно Марком Рийкенбергом - лицензирована CC-BY-SA 3.0 , что позволяет включать ее здесь с надлежащей атрибуцией.)

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

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

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

Элия ​​Каган
источник
Я скопировал весь блок и вставил вместо одного за другим. Хотя некоторые команды в этом бесполезны, а некоторые не сработали, но, наконец, это помогает в моем случае
phuclv
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
источник
Спасибо! Это не сработало с DSL и без македира.
Даг
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побежал без проблем.

Кредит идет на этот пост.

Андрей
источник
3

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

  • Перейдите в раздел «Программное обеспечение и обновления» -> «Программное обеспечение Ubuntu» -> «Загрузить с» -> «Другие» -> «Выбрать лучший сервер».

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

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

Мухаммед Аннакиб
источник