Comment corriger une erreur «Problème avec MergeList» ou «Le fichier d'état n'a pas pu être analysé» lors d'une tentative de mise à jour?

355

L'ordinateur m'a donné cette sortie dans une fenêtre:

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.

Comment puis-je réparer cela?

Braiam
la source
7
Cela me laisse perplexe de voir à quel point ce système d'exploitation traite ses mises à jour avec maladresse, même maintenant, à savoir que cela et des choses similaires sont nécessaires après aucune utilisation abusive particulière de la part de l'utilisateur.
Mat

Réponses:

485

Ces commandes de terminal devraient résoudre votre problème:

Commencez par supprimer la liste de fusion en ouvrant un terminal (appuyez sur Ctrl+ Alt+ Tpour le lancer) et exécutez la commande *:

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

Ensuite, générez un nouveau en exécutant une simple mise à jour:

sudo apt-get update

Voici le rapport de bogue (et un autre ) pour ce problème, qui est maintenant fixé de sorte qu'il ne devrait pas créer de nouveaux fichiers malformés, si vous avez déjà les fichiers malformés , vous devez les supprimer comme expliqué dans ce poste.


* Les options utilisées pour rm sont -vverbeuses

-v, --verbose explique ce qui se fait

et -fforce

-f, --force ignore les arguments et les fichiers non existants, ne demande jamais

Si vous avez des doutes sur une ligne de commande ou sur les options utilisées, reportez-vous toujours à la page de manuel de la commande. Vous pouvez y accéder sur Internet en recherchant man et la commande, par exemple, man rm, ou vous pouvez accéder aux mêmes informations en tapant exactement la même commande dans le terminal. Par exemple, les man rminstructions pour quitter la page se trouvent au bas du terminal, comme cette

image des options de la page de manuel

Allan
la source
8
Un individu a découvert qu'il devait faire ces deux étapes plusieurs fois, mais que cela a finalement fonctionné.
John S Gruber
5
C'est étrange de mettre le -vfà la fin de la rmcommande.
Keith Thompson
6
Cela n'a pas résolu le problème pour moi. La mise à jour me montre toujours cette erreur.
marines
1
C'est un problème récurrent. Cela se produit de temps en temps. Est-ce que quelqu'un est au courant de la cause de ce problème?
Rushil Paul
1
J'ai édité la réponse pour comprendre la capacité @jasser
Allan
82

Ouvrez un terminal et exécutez les commandes suivantes une à la fois:

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

Voir également:

Tommyk
la source
1
que fait le -vf?
speedox
5
@speedox, selon man rm, -vsignifie «verbose» et -fsignifie «force». En d’autres termes, supprimez tous les fichiers désignés sans l’inviter et dites à l’utilisateur ce qu’il fait.
Fouric
Dans mon cas, je résous simplement sudo apt-get updatele problème. Je pense qu'Allan a mentionné que les nouvelles versions d'apt corrigent cela automatiquement, alors essayez peut-être d'abord la mise à jour.
ThorSummoner
23

Vous déconné lors de la modification /var/lib/dpkg/status. Restaurez-le à partir de la sauvegarde que vous avez faite avant de le modifier. Bien sûr, vous avez fait une sauvegarde, non?

Puisque vous n'avez pas fait de sauvegarde, modifiez-la à nouveau avec soin . Essayez de ne pas causer plus de dégâts.

Vous pouvez utiliser /var/lib/dpkg/status.oldcomme point de référence. Ceci est une sauvegarde du statusfichier d'avant la dernière dpkgexécution. Courir

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

pour voir les différences. Annulez les modifications que vous avez apportées manuellement et conservez les modifications apportées lors de la dernière dpkgexécution.

Si vous ne parvenez pas à réparer le fichier, copiez- /var/lib/dpkg/status.oldle /var/lib/dpkg/status. Vous obtiendrez une base de données de paquets bien formée, mais obsolète.

Vous n'avez jamais besoin de modifier /var/lib/dpkg/statusen fonctionnement normal. Même les choses whe se gâtent sérieusement, /var/lib/dpkg/statusn'est pas quelque chose qui a tendance à exiger l' intervention de l' administrateur. Quels que soient vos problèmes crossplatformui, il existe probablement une meilleure façon de les résoudre. La seule fois que j'ai jamais eu besoin d'éditer, /var/lib/dpkg/statusc'était lorsqu'un Packagesfichier en amont était cassé.

Gilles
la source
Je voudrais aussi savoir quelle est la meilleure façon de supprimer crossplatformui si vous pouviez aider, car j'ai essayé de le supprimer et d'essayer de trouver de nombreuses solutions, mais seule celle que j'ai mentionnée a fonctionné ...
Nirmik
1
@Nirmik Aucune idée à propos de crossplatformui. Posez cette question séparément. Je peux vous dire que depuis plus de dix ans d'utilisation dpkg, y compris de nombreuses sources non officielles, j'ai très rarement eu besoin d'éditer le statusfichier, et seulement lorsqu'un référentiel tiers cassé se présentait.
Gilles
Ok ... Merci beaucoup encore une fois .... car vous suggérez que je vais la poser comme nouvelle question :) aussi parce que vous semblez un utilisateur très avancé, je voudrais vous demander si vous savez quelque chose sur le fait de ne pas fonctionner HOT -KTEYS fonctionne ?? (ma clé sans fil ne fonctionne pas)
Nirmik
Essayé de mettre le vieux à la place du nouveau, ne me fixe pas. :-(
Stéphane Gourichon
1
re: {Vous avez foiré quand vous avez édité / var / lib / dpkg / status} comme pour moi - non, je ne l’ai pas fait, je n’ai pas touché à ce fichier :) Cependant, c’est la seule solution qui résolve le Cas. Je vous remercie.
Ruslo
18

J'ai fait

sudo apt-get clean
sudo apt-get update

et cela a fonctionné.

psychok7
la source
1
N'a pas réparer pour moi. :-(
Stéphane Gourichon
16

Le fait de suivre les étapes 2 à 5 de la procédure de dépannage du gestionnaire de package résout généralement ce problème.

Pour l' étape 2 , désactivez tous vos PPA. Vous pouvez les désélectionner toutes dans les sources logicielles de la même manière que vous en désélectionnez une seule; voir Comment désactiver un PPA particulier? . Vous pouvez les réactiver plus tard.

Pour l' étape 3 , fermez tous les programmes ouverts que vous pouvez. Il est probablement prudent de garder votre navigateur Web ouvert pour avoir vos instructions sous les yeux. Mais il est particulièrement important de s’assurer que les gestionnaires de paquets ne fonctionnent pas . Cela inclut le centre de logiciels, le programme de mise à jour de logiciels (gestionnaire de mises à jour dans les versions antérieures d'Ubuntu), Synaptic et Gdebi. Il comprend également des utilitaires de gestion des paquets de ligne de commande comme apt-get, dpkget aptitude.

Notez que si d' autres utilisateurs sont connectés en même temps, ils doivent se déconnecter si possible.

Pour l' étape 4 , ouvrez une fenêtre de terminal. Une façon de procéder qui fonctionne, quel que soit l'environnement de bureau utilisé, consiste à appuyer sur Ctrl+ Alt+ T.

Pour l' étape 5 , exécutez ces commandes dans la fenêtre du terminal:

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

J'ai copié ce texte textuellement de PackageManagementTroubleshoootingProcedure le 2 mars 2014. Ces commandes ont évolué dans le passé et les commandes recommandées dans cet article peuvent être modifiées ou développées ultérieurement . Donc, vous voudrez peut-être y travailler à partir de l' étape 5 . (Cet article, créé / édité par "Les contributeurs du wiki de la documentation Ubuntu" - en particulier Mark Rijckenberg - est sous licence CC-BY-SA 3.0 , ce qui permet son inclusion ici avec une attribution appropriée.)

Certaines de ces commandes tentent de résoudre le problème (et peuvent également afficher des informations de diagnostic); d'autres affichent des informations précieuses sur le problème que vous pouvez inclure dans votre question ou fournir autrement à une personne qui vous aide. (Ou, en fonction de vos compétences, peut vous permettre de diagnostiquer et de résoudre le problème.)

Souvent, cela corrige le problème, mais lorsqu'il ne le fait pas, il donne souvent suffisamment d'informations pour le résoudre.

Vous n'avez pas à taper manuellement ces commandes; vous pouvez les copier et les coller. Je recommande cependant de coller et d'exécuter chacun séparément. Cela rend plus clair quelle sortie est à partir de quelles commandes.

Eliah Kagan
la source
J'ai copié le bloc entier et coller au lieu d'exécuter un par un. Bien que plusieurs commandes soient inutiles et que certaines échouent, mais finalement cela aide dans mon cas
phuclv
11

J'ai également vu ce problème se produire lorsque vous avez trop de sources dans votre dépôt.

Essayez la solution indiquée ci-dessus et / ou peut-être aussi ce qui est parfois recommandé dans le tableau de bord:

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

Fais nous savoir comment tu reussis.

Andybleaden
la source
Merci! Cela ne fonctionnait pas avec DSL sans le makedir.
Doug
4

Je courais dans une erreur similaire:

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.

J'ai suivi des suggestions similaires à copier status-old.

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

Tous mes fichiers de statut étaient vierges pour une raison quelconque. Heureusement, j'ai découvert qu'il existe des sauvegardes de ces fichiers:

$ 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

J'ai vérifié la dernière sauvegarde ...

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

... mais c'était toujours vide. J'ai donc décompressé un fichier plus ancien ...

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

Cette fois, il y avait du contenu. Alors je l'ai copié ...

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

Puis apt-get updatecouru sans problèmes.

Le crédit va à ce poste.

Andrew
la source
3

J'ai eu le même problème et essayé tout le dépannage mentionné dans d'autres réponses. Étrangement, le seul correctif était une étape différente:

  • Allez dans Logiciels et mises à jour -> Logiciel Ubuntu -> Télécharger de -> Autres -> Sélectionnez Meilleur serveur.

  • Attendez les tests. À la fin des tests, le meilleur serveur sera sélectionné, pas nécessairement le serveur le plus proche, ni le serveur principal, ni le serveur de votre région.

  • Maintenant, rechargez les données de repo, elles se termineront correctement.

Muhammad Annaqeeb
la source