Come posso correggere un errore "Problema con MergeList" o "Impossibile analizzare il file di stato" quando provo a fare un aggiornamento?


355

Il computer mi ha dato questo output in una finestra:

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.

Come posso risolvere questo problema?


7
Mi fa sconcertare quanto goffamente questo sistema operativo gestisca i suoi aggiornamenti, anche adesso, che questo e cose simili sono richiesti dopo un uso improprio da parte dell'utente.
opaco

Risposte:


485

Questi comandi del terminale dovrebbero risolvere il tuo problema:

Per prima cosa rimuovi l'elenco di merge aprendo un terminale (premi Ctrl+ Alt+ Tper avviare) ed esegui questo comando *:

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

Quindi, generane uno nuovo eseguendo un semplice aggiornamento:

sudo apt-get update

Ecco la segnalazione di bug (e un altro ) per questo problema, che ora è stato risolto in modo da non creare nuovi file non validi, tuttavia se hai già i file non validi devi rimuoverli come spiegato in questo post.


* Le opzioni utilizzate per rm sono -vdettagliate

-v, --verbose spiega cosa si sta facendo

e -fforza

-f, --force ignora file e argomenti inesistenti, non richiede mai

In caso di dubbi su una riga di comando o sulle opzioni utilizzate, consultare sempre la pagina di manuale del comando. È possibile accedervi su Internet cercando man e il comando ad esempio man rm oppure è possibile accedere alle stesse informazioni digitando esattamente lo stesso comando nel terminale, ad esempio le man rmistruzioni per uscire dalla pagina saranno nella parte inferiore del terminale come Questo

immagine delle opzioni della pagina man


8
Un individuo ha scoperto che doveva fare questi due passaggi più volte, ma alla fine ha funzionato.
John S Gruber,

5
È strano mettere il -vfalla fine del rmcomando.
Keith Thompson,

6
Non ha risolto il problema per me. l'aggiornamento mi mostra ancora quell'errore.
Marines

1
Questo è un problema ricorrente. Continua a succedere una volta ogni tanto. Qualcuno è a conoscenza della causa di questo problema?
Rushil Paul,

1
Ho modificato la risposta per capire capacità @jasser
Allan

82

Apri un Terminale ed esegui i seguenti comandi uno alla volta:

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

Guarda anche:


1
cosa fa il -vf?
speedox,

5
@speedox, secondo man rm, -vsignifica "verboso" e -fsignifica "forza". In altre parole, rimuovere tutti i file designati senza chiedere conferma e dire all'utente cosa sta facendo.
Fouric

Nel mio caso, solo facendo sudo apt-get updateil problema risolto. Penso che Allan abbia menzionato le versioni più recenti di apt, correggendolo automaticamente, quindi forse prima prova solo l'aggiornamento.
ThorSummoner,

23

Hai sbagliato quando hai modificato /var/lib/dpkg/status. Ripristina dal backup che hai effettuato prima di modificarlo. Certo, hai fatto un backup, giusto?

Poiché non è stato eseguito un backup, modificarlo di nuovo, con attenzione . Cerca di non causare più danni.

È possibile utilizzare /var/lib/dpkg/status.oldcome punto di riferimento. Questo è un backup del statusfile precedente all'ultima dpkgesecuzione. Correre

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

per vedere le differenze. Annulla le modifiche apportate manualmente e mantieni le modifiche apportate dall'ultima dpkgesecuzione.

Se proprio non riesce a riparare il file, copiare /var/lib/dpkg/status.oldsopra /var/lib/dpkg/status. Otterrai un database dei pacchetti ben strutturato, ma obsoleto.

Non è mai necessario modificarlo /var/lib/dpkg/statusdurante il normale funzionamento. Anche se le cose vanno seriamente male, /var/lib/dpkg/statusnon è qualcosa che tende a richiedere l'intervento dell'amministratore. Qualunque siano i tuoi problemi crossplatformui, probabilmente esiste un modo migliore per risolverli. L'unica volta che ho mai avuto bisogno di modificare è /var/lib/dpkg/statusstato quando un Packagesfile a monte è stato rotto.


Vorrei anche sapere il modo migliore che hai menzionato per rimuovere crossplatformui se potessi aiutare perché ho provato ogni modo possibile per rimuoverlo e ho cercato di trovare molte soluzioni, ma solo quello che ho menzionato ha funzionato ...
Nirmik

1
@Nirmik Non ne ho idea crossplatformui. Fai una domanda separata. Posso dirti che in oltre un decennio di utilizzo dpkg, incluse molte fonti non ufficiali, molto raramente ho avuto bisogno di modificare il statusfile, e solo quando c'era un deposito di terze parti rotto.
Gilles,

Va bene ... Grazie ancora una volta .... come suggerisci, lo posterò come una nuova domanda :) Inoltre, dato che sembri un utente molto avanzato, vorrei chiederti se sai qualcosa sul rendere CALDO non funzionante -KTEYS funziona ?? (la mia chiave wireless non funziona)
Nirmik,

Ho provato a mettere il vecchio al posto del nuovo, ma non mi ha risolto. :-(
Stéphane Gourichon,

1
ri: {Hai rovinato quando hai modificato / var / lib / dpkg / status} come per me - no, non lo sono, non ho toccato questo file :) Tuttavia questa è l'unica soluzione che risolve il problema nel mio Astuccio. Grazie.
ruslo,


16

Seguire i passaggi 2-5 nella procedura di risoluzione dei problemi di Gestione pacchetti di solito risolve questo problema.

Per il passaggio 2 , disabilitare tutti i tuoi PPA. Puoi deselezionarli tutti in Sorgenti software nello stesso modo in cui ne deselezioneresti solo uno; vedi Come disabilitare un determinato PPA? . Puoi riattivarli in un secondo momento.

Per il passaggio 3 , chiudere tutti i programmi aperti che è possibile. Probabilmente è sicuro tenere aperto il browser Web in modo da avere le istruzioni davanti a te. Ma è particolarmente importante assicurarsi che i gestori di pacchetti non siano in esecuzione . Ciò include Software Center, Software Updater (Update Manager nelle versioni precedenti di Ubuntu), Synaptic e Gdebi. Esso comprende anche le utility di gestione dei pacchetti da riga di comando, come apt-get, dpkge aptitude.

Se altri utenti sono connessi contemporaneamente, dovrebbero disconnettersi se possibile.

Per il passaggio 4 , aprire una finestra del terminale. Un modo per farlo che funziona indipendentemente dall'ambiente desktop in uso è premere Ctrl+ Alt+ T.

Per il passaggio 5 , eseguire questi comandi nella finestra del terminale:

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

L'ho copiato letteralmente da PackageManagementTroubleshoootingProcedure il 2 marzo 2014. Tali comandi si sono evoluti in passato e i comandi consigliati in quell'articolo potrebbero essere modificati o ampliati di nuovo in futuro . Quindi potresti voler lavorare dal passaggio 5 lì . (Quell'articolo, creato / modificato da "Collaboratori alla wiki della documentazione di Ubuntu" - in particolare Mark Rijckenberg - è concesso in licenza CC-BY-SA 3.0 , che consente l'inclusione qui con l'attribuzione corretta.)

Alcuni di questi comandi tentano di risolvere il problema (e possono anche mostrare informazioni diagnostiche); altri mostrano informazioni preziose sul problema che puoi includere nella tua domanda o fornire a qualcuno di aiutarti. (O, a seconda delle vostre abilità, può consentire voi per diagnosticare e risolverlo.)

Spesso questo lo risolve, ma quando non lo fa spesso fornisce abbastanza informazioni per risolverlo.

Non è necessario digitare manualmente quei comandi; puoi copiarli e incollarli. Consiglio comunque di incollare ed eseguire ciascuno separatamente. Questo rende più chiaro quale output proviene da quali comandi.


Ho copiato l'intero blocco e incollato invece di eseguirlo uno per uno. Sebbene diversi comandi in questo siano inutili e alcuni falliti, ma alla fine aiuta nel mio caso
phuclv,

11

Ho anche visto questo problema verificarsi quando hai troppe fonti nei tuoi repository.

Prova la soluzione pubblicata sopra e / o forse anche questa a volte consigliata su launchpad:

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

Facci sapere come vai avanti.


Grazie! Questo non ha funzionato con DSL anche senza il makedir.
Doug,

4

Stavo riscontrando un errore simile:

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.

Ho seguito suggerimenti simili da copiare status-old.

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

Tutti i miei file di stato erano vuoti per qualche motivo. Fortunatamente, ho scoperto che ci sono backup di questi file:

$ 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

Ho controllato l'ultimo backup ...

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

... ma era ancora vuoto. Quindi ho decompresso un vecchio ...

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

Questa volta c'era contenuto. Quindi l'ho copiato ...

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

Quindi ha apt-get updatefunzionato senza problemi.

Il merito va a questo post.


3

Ho avuto lo stesso problema e ho provato tutti i problemi di risoluzione menzionati in altre risposte. Stranamente l'unica soluzione è stata una fase diversa:

  • Vai su Software e aggiornamenti -> Software Ubuntu -> Scarica da -> Altro-> Seleziona il miglior server

  • Aspetta i test. Alla fine dei test verrà selezionato il server migliore, non necessariamente il più vicino né il server principale né il server per la propria locale.

  • Ora Ricarica i dati di Repo, finirà correttamente.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.