¿Cómo soluciono un error de "Problema con MergeList" o "No se pudo analizar el archivo de estado" al intentar hacer una actualización?

355

La computadora me dio esta salida en una ventana:

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.

¿Cómo puedo arreglar esto?

Braiam
fuente
77
Me sigue desconcertando cuán torpemente este sistema operativo maneja sus actualizaciones, incluso ahora, que esto y otras cosas similares se requieren después de que el usuario no haga un mal uso especial.
mate

Respuestas:

485

Estos comandos de terminal deberían resolver su problema:

Primero elimine la Lista de fusión abriendo una terminal (presione Ctrl+ Alt+ Tpara iniciar) y ejecute este comando *:

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

A continuación, genere uno nuevo ejecutando una actualización simple:

sudo apt-get update

Aquí está el informe de error (y otro ) para este problema, que ahora está solucionado, por lo que no debería crear nuevos archivos con formato incorrecto, sin embargo, si ya tiene los archivos con formato incorrecto, debe eliminarlos como se explica en esta publicación.


* Las opciones utilizadas para rm son -vdetalladas

-v, --verbose explica lo que se está haciendo

y -ffuerza

-f, --force ignorar archivos y argumentos inexistentes, nunca preguntar

Si alguna vez no está seguro acerca de una línea de comando o las opciones que se utilizan, consulte siempre la página del manual para el comando. Puede acceder a estos en Internet buscando man y el comando, por ejemplo man rm, o puede acceder a la misma información escribiendo exactamente el mismo comando en el terminal, por ejemplo, las man rminstrucciones para salir de la página estarán en la parte inferior del terminal, como esta

imagen de las opciones de la página man

Alano
fuente
8
Un individuo descubrió que tenía que hacer estos dos pasos varias veces, pero que eventualmente funcionó.
John S Gruber
55
Es extraño poner el -vfal final del rmcomando.
Keith Thompson
66
No resolvió el problema para mí. La actualización todavía me muestra ese error.
marines
1
Este es un problema recurrente. Sigue sucediendo de vez en cuando. ¿Alguien sabe de la causa de este problema?
Rushil Paul
1
He editado la respuesta para entender la habilidad @jasser
Allan
82

Abra una Terminal y ejecute los siguientes comandos uno a la vez:

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

Ver también:

tommyk
fuente
1
¿Qué hace el -vf?
Speedox
55
@speedox, según man rm, -vsignifica 'detallado' y -f'fuerza'. En otras palabras, elimine todos los archivos designados sin preguntar y diga al usuario lo que está haciendo.
fouric
En mi caso, solo sudo apt-get updatesolucionando el problema. Creo que Allan mencionó que las versiones más nuevas de apt corrigen esto automáticamente, así que tal vez intente primero la actualización.
ThorSummoner
23

Te equivocaste cuando editaste /var/lib/dpkg/status. Restaurarlo desde la copia de seguridad que realizó antes de editarlo. Por supuesto, hiciste una copia de seguridad, ¿verdad?

Como no realizó una copia de seguridad, edítela nuevamente, con cuidado . Intenta no causar más daño.

Se puede usar /var/lib/dpkg/status.oldcomo punto de referencia. Esta es una copia de seguridad del statusarchivo anterior a la última vez que dpkgse ejecutó. correr

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

para ver las diferencias Deshaga los cambios que realizó manualmente y conserve los cambios realizados en la última dpkgejecución.

Si realmente no puede reparar el archivo, copie de /var/lib/dpkg/status.oldnuevo /var/lib/dpkg/status. Obtendrá una base de datos de paquetes bien formada pero desactualizada.

Nunca necesita editar /var/lib/dpkg/statusen funcionamiento normal. Incluso cuando las cosas salen mal, /var/lib/dpkg/statusno es algo que requiera la intervención del administrador. Sean cuales sean sus problemas crossplatformui, probablemente haya una mejor manera de resolverlos. La única vez que he necesitado editar /var/lib/dpkg/statusfue cuando Packagesse rompió un archivo ascendente .

Gilles
fuente
También me gustaría saber la mejor manera que mencionaste para eliminar crossplatformui si pudieras ayudar porque intenté todas las formas posibles de eliminarlo e intenté encontrar muchas soluciones, pero solo la que he mencionado ha funcionado ...
Nirmik
1
@Nirmik No tengo idea crossplatformui. Haz eso como una pregunta separada. Puedo decirle que en más de una década de uso dpkg, incluidas muchas fuentes no oficiales, rara vez he necesitado editar el statusarchivo, y solo cuando había un repositorio de terceros roto.
Gilles
De acuerdo ... Muchas gracias una vez más ... como sugieres, lo publicaré como una nueva pregunta :) también como pareces un usuario muy avanzado, me gustaría preguntarte si sabes algo sobre cómo hacer que HOT no funcione -KTEYS trabajo ?? (mi llave inalámbrica no funciona)
Nirmik
Intenté poner lo viejo en lugar de lo nuevo, no me arregló. :-(
Stéphane Gourichon
1
re: {Te equivocaste cuando editaste / var / lib / dpkg / status} en cuanto a mí - no, no lo estoy, no he tocado este archivo :) Sin embargo, esta es la única solución que resuelve el problema en mi caso. Gracias.
ruslo
18

yo hice

sudo apt-get clean
sudo apt-get update

Y funcionó.

psychok7
fuente
1
No me arregló. :-(
Stéphane Gourichon
16

Los siguientes pasos 2-5 en el Procedimiento de solución de problemas del Administrador de paquetes generalmente resuelven este problema.

Para el paso 2 , deshabilite todos sus PPA. Puede desmarcarlos todos en Fuentes de software de la misma manera que desmarcaría solo uno; vea ¿Cómo deshabilitar un PPA particular? . Puede volver a habilitarlos más tarde.

Para el paso 3 , cierre todos los programas abiertos que pueda. Probablemente sea seguro mantener abierto su navegador web para que tenga sus instrucciones frente a usted. Pero es particularmente importante asegurarse de que los administradores de paquetes no se estén ejecutando . Esto incluye el Centro de software, el Actualizador de software (Administrador de actualizaciones en versiones anteriores de Ubuntu), Synaptic y Gdebi. También incluye utilidades de gestión de paquetes de línea de comandos como apt-get, dpkg, y aptitude.

Tenga en cuenta que si otros usuarios inician sesión al mismo tiempo, deben cerrar sesión si es posible.

Para el paso 4 , abra una ventana de terminal. Una forma de hacer esto que funciona sin importar el entorno de escritorio que use, es presionar Ctrl+ Alt+ T.

Para el paso 5 , ejecute estos comandos en la ventana de 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"' _ '{}' \;

Copié ese texto literal de PackageManagementTroubleshoootingProcedure el 2 de marzo de 2014. Esos comandos han evolucionado en el pasado y los comandos recomendados en ese artículo pueden cambiarse o expandirse nuevamente en el futuro . Por lo tanto, es posible que desee trabajar desde el paso 5 allí . (Ese artículo, creado / editado por "Colaboradores de la wiki de documentación de Ubuntu", especialmente Mark Rijckenberg, tiene licencia CC-BY-SA 3.0 , que permite su inclusión aquí con la atribución adecuada).

Algunos de esos comandos intentan solucionar el problema (y también pueden mostrar información de diagnóstico); otros muestran información valiosa sobre el problema que puede incluir en su pregunta o proporcionar a alguien que lo ayude. (O, dependiendo de sus habilidades, puede permitir que para diagnosticar y resolverlo.)

A menudo, esto lo soluciona, pero cuando no lo hace, a menudo proporciona suficiente información para solucionarlo.

No tiene que escribir manualmente esos comandos; Puedes copiarlos y pegarlos. Sin embargo, recomiendo pegar y ejecutar cada uno por separado. Esto aclara qué salida es de qué comandos.

Eliah Kagan
fuente
Copié todo el bloque y pegué en lugar de ejecutar uno por uno. Aunque varios comandos en esto son inútiles y algunos fallaron, pero finalmente ayuda en mi caso
phuclv
11

También he visto que este problema ocurre cuando tienes demasiadas fuentes en tus repositorios.

Pruebe la solución publicada anteriormente y / o quizás también esta que a veces se recomienda en el launchpad:

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

Háganos saber cómo le va.

andybleaden
fuente
¡Gracias! Esto tampoco funcionó con DSL sin el makedir.
Doug
4

Me encontraba con un error similar:

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.

Seguí sugerencias similares para copiar status-old.

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

Todos mis archivos de estado estaban en blanco por alguna razón. Afortunadamente, descubrí que hay copias de seguridad de estos archivos:

$ 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

Revisé la última copia de seguridad ...

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

... pero aún estaba en blanco. Así que descomprimí uno más viejo ...

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

Esta vez hubo contenido. Entonces lo copié ...

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

Luego apt-get updatecorrió sin problemas.

El crédito va a esta publicación.

Andrés
fuente
3

Tuve el mismo problema y probé toda la solución de problemas mencionada en otras respuestas. Curiosamente, la única solución fue un paso diferente:

  • Vaya a Software y actualizaciones -> Software de Ubuntu -> Descargar desde -> Otro-> Seleccione el mejor servidor

  • Espera las pruebas. Al final de las pruebas, se seleccionará el mejor servidor, no necesariamente el más cercano ni el servidor principal ni el servidor de su localidad.

  • Ahora vuelva a cargar los datos del repositorio, finalizará correctamente.

Muhammad Annaqeeb
fuente