Як виправити помилку "Проблема з 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.

Як я можу це виправити?


7
Мене постійно бентежить, як ніяково ця операційна система обробляє свої оновлення, навіть зараз, що це та подібні речі потрібні без особливих зловживань користувачем.
мат

Відповіді:


485

Ці термінальні команди повинні вирішити вашу проблему:

Спочатку видаліть список об'єднань, відкривши термінал (натисніть Ctrl+ Alt+, Tщоб запустити) та запустіть цю команду *:

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

Далі створіть нове, запустивши просте оновлення:

sudo apt-get update

Ось звіт про помилку (та інший ) для цієї проблеми, який тепер виправлений, тому він не повинен створювати нові неправильно сформовані файли, однак, якщо у вас уже є неправильно сформовані файли, потрібно видалити їх, як пояснено в цій публікації.


* Параметри, що використовуються для rm, є -vбагатослівними

-v, --верхово поясніть, що робиться

і -fсила

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

Якщо ви коли-небудь не впевнені в командному рядку або використовувані параметри, завжди зверніться до сторінки керівництва для команди. До них можна отримати доступ в Інтернеті, шукаючи 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

Дивитися також:


1
що робить -vf?
speedox

5
@speedox, відповідно man rm, -vозначає «багатослівний», а -fозначає «сила». Іншими словами, видаліть усі призначені файли без підказки і повідомте користувачеві, що це робить.
fouric

У моєму випадку саме 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 працюють ?? (мій бездротовий ключ працює в даний час)
Nirmik

Намагався поставити старе замість нового, не виправляв мене. :-(
Стефан Гурішон

1
re: {Ви накрутили, коли ви редагували / var / lib / dpkg / status}, що стосується мене - ні, я ні, я не торкнувся цього файлу :) Однак це єдине рішення, яке вирішує проблему в моєму справа. Дякую.
русло


16

Виконуючи кроки 2-5 у процедурі усунення несправностей менеджера пакунків, зазвичай це рішення вирішується.

На кроці 2 вимкніть всі ваші PPA. Ви можете зняти прапорець з усіма ними в джерелах програм так само, як ви знімете лише одну; див. Як відключити певний PPA? . Ви можете їх знову ввімкнути пізніше.

На кроці 3 закрийте будь-які відкриті програми. Напевно, безпечно тримати ваш веб-браузер відкритим, щоб ви мали свої вказівки перед собою. Але особливо важливо переконатися, що будь-які менеджери пакунків не працюють . Сюди входять Центр програмного забезпечення, Оновлення програмного забезпечення (Менеджер оновлень у старих версіях 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» - особливо Марк Rijckenberg --is ліцензована 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

Дайте нам знати, як ви дістаєтесь.


Дякую! Це також не працювало з 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 -> Завантажити з -> Інше-> Виберіть найкращий сервер

  • Дочекайтеся тестів. Після закінчення тестів буде обраний найкращий сервер, не обов’язково найближчий, ані основний, ані сервер для вашої локальної локації.

  • Тепер перезавантажте дані Repo, це закінчиться належним чином.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.