Wie behebe ich einen Fehler "Problem mit MergeList" oder "Statusdatei konnte nicht analysiert werden", wenn ich versuche, ein Update durchzuführen?


355

Der Computer hat mir diese Ausgabe in einem Fenster gegeben:

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.

Wie kann ich das beheben?


7
Es verwirrt mich immer wieder, wie umständlich dieses Betriebssystem seine Aktualisierungen selbst jetzt noch handhabt, dass dies und ähnliche Dinge erforderlich sind, nachdem der Benutzer keinen besonderen Missbrauch begangen hat.
Matt

Antworten:


485

Diese Terminalbefehle sollten Ihr Problem lösen:

Entfernen Sie zuerst die Zusammenführungsliste, indem Sie ein Terminal öffnen (Drücken Sie zum Starten Ctrl+ Alt+ T) und führen Sie den folgenden Befehl aus *:

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

Erstellen Sie als Nächstes ein neues, indem Sie ein einfaches Update ausführen:

sudo apt-get update

Hier ist der Fehlerbericht (und ein anderer ) für dieses Problem, der jetzt behoben ist, damit keine neuen fehlerhaften Dateien erstellt werden. Wenn Sie jedoch bereits über die fehlerhaften Dateien verfügen, müssen Sie sie entfernen, wie in diesem Beitrag erläutert.


* Die für rm verwendeten Optionen sind -vausführlich

-v, --verbose erkläre, was getan wird

und -fKraft

-f, --force ignoriert nicht existierende Dateien und Argumente, fordere niemals dazu auf

Wenn Sie sich über eine Befehlszeile oder die verwendeten Optionen nicht sicher sind, lesen Sie immer die Handbuchseite für den Befehl. Sie können im Internet auf diese zugreifen, indem Sie nach man suchen und den Befehl zum Beispiel man rm eingeben. Sie können auf dieselben Informationen zugreifen, indem Sie im Terminal genau denselben Befehl eingeben. man rmAnweisungen zum Verlassen der Seite befinden sich am unteren Rand des Terminals wie diese

Bild der Manpage-Optionen


8
Eine Person stellte fest, dass er diese beiden Schritte mehrmals ausführen musste, aber dass es schließlich funktionierte.
John S Gruber

5
Es ist seltsam, das -vfam Ende des rmBefehls zu setzen.
Keith Thompson

6
Es hat das Problem für mich nicht gelöst. Update zeigt mir immer noch diesen Fehler.
Marines

1
Dies ist ein immer wiederkehrendes Problem. Es passiert immer wieder. Kennt jemand die Ursache dieses Problems?
Rushil Paul

1
Ich habe die Antwort für die Fähigkeit @jasser
Allan

82

Öffnen Sie ein Terminal und führen Sie die folgenden Befehle nacheinander aus:

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

Siehe auch:


1
was macht der -vf
Speedox

5
@speedox nach man rm, -vbedeutet ‚ausführlichen‘ und -fbedeutet ‚Kraft‘. Mit anderen Worten, entfernen Sie alle angegebenen Dateien ohne Aufforderung und teilen Sie dem Benutzer mit, was er tut.
Fouric

In meinem Fall wurde sudo apt-get updatedas Problem dadurch behoben. Ich denke, Allan hat erwähnt, dass neuere Versionen von apt dies automatisch korrigieren, also versuchen Sie vielleicht zuerst nur das Update.
ThorSummoner

23

Sie haben es vermasselt, als Sie bearbeiteten /var/lib/dpkg/status. Stellen Sie es von der Sicherung wieder her, die Sie vor der Bearbeitung erstellt haben. Natürlich hast du ein Backup gemacht, oder?

Da Sie keine Sicherungskopie erstellt haben, müssen Sie sie erneut sorgfältig bearbeiten . Versuchen Sie, keinen weiteren Schaden zu verursachen.

Sie können /var/lib/dpkg/status.oldals Referenzpunkt verwenden. Dies ist eine Sicherungskopie der statusDatei, die vor der letzten dpkgAusführung erstellt wurde. Lauf

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

die Unterschiede zu sehen. Machen Sie die Änderungen rückgängig, die Sie manuell vorgenommen haben, und behalten Sie die Änderungen bei, die beim letzten dpkgDurchlauf vorgenommen wurden.

Wenn Sie die Datei wirklich nicht reparieren können, kopieren Sie /var/lib/dpkg/status.oldsie /var/lib/dpkg/status. Sie erhalten eine wohlgeformte, aber veraltete Paketdatenbank.

Sie müssen niemals /var/lib/dpkg/statusim normalen Betrieb bearbeiten . Auch wenn die Dinge ernsthaft schief gehen, /var/lib/dpkg/statusist kein Eingreifen des Administrators erforderlich. Was auch immer Ihre Probleme crossplatformuiwaren, es gibt wahrscheinlich einen besseren Weg, sie zu lösen. Das einzige Mal, dass ich jemals bearbeiten musste, /var/lib/dpkg/statuswar, als eine Upstream- PackagesDatei beschädigt wurde.


Ich würde auch gerne wissen, wie Sie CrossPlattformui besser entfernen können, wenn Sie helfen könnten, denn ich habe alle Möglichkeiten ausprobiert, um es zu entfernen, und habe versucht, viele Lösungen zu finden, aber nur die, die ich erwähnt habe, hat funktioniert ...
Nirmik

1
@Nirmik Keine Ahnung über crossplatformui. Stellen Sie das als separate Frage. Ich kann Ihnen sagen, dass ich in über einem Jahrzehnt der Nutzung dpkg, einschließlich vieler inoffizieller Quellen, die statusDatei nur sehr selten zu bearbeiten brauchte , und nur dann, wenn ein Repository eines Drittanbieters defekt war.
Gilles

Okay ... Vielen Dank noch einmal .... wie Sie vorschlagen, werde ich es als neue Frage posten :) Auch wenn Sie ein sehr fortgeschrittener Benutzer scheinen, möchte ich Sie fragen, ob Sie etwas darüber wissen, wie man nicht funktionierendes HEISS macht -KTEYS Arbeit? (Mein Funkschlüssel zeigt Arbeit)
Nirmik

Versucht, das Alte an die Stelle des Neuen zu setzen, hat für mich nicht gefixt. :-(
Stéphane Gourichon

1
re: {Sie haben es vermasselt, als Sie / var / lib / dpkg / status bearbeitet haben} - nein, ich bin es nicht, ich habe diese Datei nicht berührt :) Dies ist jedoch nur eine Lösung, die das Problem in meinem lösen kann Fall. Danke.
Ruslo


16

Das Befolgen der Schritte 2-5 in der Fehlerbehebungsprozedur von Package Manager behebt normalerweise dieses Problem.

Deaktivieren Sie für Schritt 2 alle Ihre PPAs. Sie können alle in Software Sources deaktivieren, so wie Sie nur eine deaktivieren würden. Siehe So deaktivieren Sie eine bestimmte PPA? . Sie können sie später wieder aktivieren.

Schließen Sie für Schritt 3 alle geöffneten Programme, die Sie können. Es ist wahrscheinlich sicher, Ihren Webbrowser offen zu halten, damit Sie Ihre Anweisungen vor sich haben. Aber es ist besonders wichtig , all Paket - Manager , um sicherzustellen , wird nicht ausgeführt . Dazu gehören das Software Center, der Software Updater (Update Manager in älteren Versionen von Ubuntu), Synaptic und Gdebi. Es enthält auch Paket - Management - Befehlszeilenprogramme wie apt-get, dpkgund aptitude.

Beachten Sie, dass andere Benutzer, die gleichzeitig angemeldet sind, sich nach Möglichkeit abmelden sollten.

Öffnen Sie für Schritt 4 ein Terminalfenster. Eine Möglichkeit, dies unabhängig von der verwendeten Desktop-Umgebung zu tun, besteht darin, Ctrl+ Alt+ zu drücken T.

Führen Sie für Schritt 5 die folgenden Befehle im Terminalfenster aus:

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"' _ '{}' \;

Das habe ich wörtlich aus PackageManagementTroubleshoootingProcedure am 2. März 2014 kopiert . Diese Befehle wurden in der Vergangenheit weiterentwickelt, und die in diesem Artikel empfohlenen Befehle können in Zukunft möglicherweise geändert oder erweitert werden . Vielleicht möchten Sie dort ab Schritt 5 arbeiten . (Dieser Artikel, erstellt / bearbeitet von "Contributors to the Ubuntu documentation wiki" - insbesondere Mark Rijckenberg - ist mit CC-BY-SA 3.0 lizenziert , was die Aufnahme hier mit korrekter Zuordnung ermöglicht.)

Einige dieser Befehle versuchen, das Problem zu beheben (und zeigen möglicherweise auch Diagnoseinformationen an). Andere zeigen wertvolle Informationen zu dem Problem an, das Sie in Ihre Frage aufnehmen oder auf andere Weise jemandem zur Verfügung stellen können, der Ihnen hilft. (Oder, abhängig von Ihren Fähigkeiten, können Sie es diagnostizieren und lösen.)

Oft behebt dies das Problem, aber wenn dies nicht der Fall ist, gibt es oft genug Informationen, um es zu beheben.

Sie müssen diese Befehle nicht manuell eingeben. Sie können sie kopieren und einfügen. Ich empfehle jedoch, jedes einzeln einzufügen und auszuführen. Dadurch wird klarer, welche Ausgabe von welchen Befehlen stammt.


Ich habe den gesamten Block kopiert und eingefügt, anstatt ihn einzeln auszuführen. Obwohl einige Befehle in diesem unbrauchbar sind und einige fehlgeschlagen sind, hilft es in meinem Fall
phuclv

11

Ich habe auch gesehen, dass dieses Problem auftritt, wenn Sie zu viele Quellen in Ihren Repos haben.

Probieren Sie die oben angegebene Lösung und / oder vielleicht auch diese, die manchmal auf dem Launchpad empfohlen wird:

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

Lassen Sie uns wissen, wie es Ihnen geht.


Dankeschön! Ohne das makedir hat das mit DSL nicht geklappt.
Doug

4

Ich bin auf einen ähnlichen Fehler gestoßen:

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.

Ich folgte ähnlichen Vorschlägen zum Kopieren status-old.

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

Alle meine Statusdateien waren aus irgendeinem Grund leer. Zum Glück habe ich herausgefunden, dass es Backups dieser Dateien gibt:

$ 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

Ich habe das neueste Backup überprüft ...

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

... aber es war immer noch leer. Also habe ich eine ältere entpackt ...

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

Diesmal gab es Inhalt. Also habe ich es kopiert ...

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

Dann apt-get updatelief es ohne Probleme.

Gutschrift geht an diesen Beitrag.


3

Ich hatte das gleiche Problem und habe alle in den anderen Antworten genannten Fehlerbehebungsmaßnahmen versucht. Seltsamerweise war die einzige Lösung ein anderer Schritt:

  • Gehen Sie zu Software & Updates -> Ubuntu-Software -> Herunterladen von -> Andere -> Bester Server auswählen

  • Warten Sie auf die Tests. Am Ende der Tests wird der beste Server ausgewählt, nicht unbedingt der nächstgelegene, der Hauptserver oder der Server für Ihr Gebietsschema.

  • Jetzt Repo Daten neu laden, es wird korrekt beendet.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.