Como corrijo um erro "Problema com o MergeList" ou "O arquivo de status não pôde ser analisado" ao tentar fazer uma atualização?

355

O computador me deu essa saída em uma janela:

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.

Como posso consertar isso?

Braiam
fonte
7
Isso me deixa desconcertado com o quão desajeitadamente esse sistema operacional lida com suas atualizações, mesmo agora, que isso e coisas semelhantes são necessárias após nenhum uso indevido do usuário.
mate

Respostas:

485

Estes comandos do terminal devem resolver seu problema:

Primeiro remova a lista de mesclagem abrindo um terminal (pressione Ctrl+ Alt+ Tpara iniciar) e execute este comando *:

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

Em seguida, gere um novo executando uma atualização simples:

sudo apt-get update

Aqui está o relatório de erros (e outro ) para esse problema, que agora está corrigido, portanto, ele não deve criar novos arquivos malformados, no entanto, se você já possui os arquivos malformados, é necessário removê-los conforme explicado nesta publicação.


* As opções usadas para rm são -vdetalhadas

-v, --verbose explica o que está sendo feito

e -fforça

-f, --force ignora arquivos e argumentos inexistentes, nunca solicita

Se você não tiver certeza sobre uma linha de comando ou as opções usadas, sempre consulte a página de manual do comando. Eles podem ser acessados ​​na Internet pesquisando man e o comando, por exemplo, man rm, ou você pode acessar as mesmas informações digitando exatamente o mesmo comando no terminal. Por exemplo, man rminstruções para sair da página estarão na parte inferior do terminal, como esta

imagem das opções da página de manual

Allan
fonte
8
Um indivíduo descobriu que ele tinha que executar esses dois passos várias vezes, mas que funcionou eventualmente.
John S Gruber
5
É estranho colocar o -vfno final do rmcomando.
Keith Thompson
6
Isso não resolveu o problema para mim. atualização ainda me mostra esse erro.
marines
1
Este é um problema recorrente. Continua acontecendo de vez em quando. Alguém está ciente da causa desse problema?
Rushil Paul
1
Eu editei a resposta para entender a capacidade @jasser
Allan
82

Abra um terminal e execute os seguintes comandos, um de cada vez:

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

Veja também:

tommyk
fonte
1
o que o -vf faz?
speedox
5
@speedox, de acordo com man rm, -vsignifica 'detalhado' e -fsignifica 'força'. Em outras palavras, remova todos os arquivos designados sem avisar e informe ao usuário o que está fazendo.
Fouric
No meu caso, basta fazer o sudo apt-get updateconserto do problema. Acho que Allan mencionou versões mais recentes do apt corrigem isso automaticamente, então talvez tente apenas a atualização primeiro.
ThorSummoner
23

Você estragou tudo quando editou /var/lib/dpkg/status. Restaure-o a partir do backup que você fez antes de editá-lo. Claro, você fez um backup, certo?

Como você não fez um backup, edite-o novamente com cuidado . Tente não causar mais danos.

Você pode usar /var/lib/dpkg/status.oldcomo um ponto de referência. Este é um backup do statusarquivo anterior à última vez em que dpkgfoi executado. Corre

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

para ver as diferenças. Desfaça as alterações feitas manualmente e mantenha as alterações feitas na última dpkgexecução.

Se você realmente não conseguir consertar o arquivo, copie /var/lib/dpkg/status.old-o /var/lib/dpkg/status. Você obterá um banco de dados de pacotes bem formado, mas desatualizado.

Você nunca precisa editar /var/lib/dpkg/statusem operação normal. Mesmo quando as coisas dão muito errado, /var/lib/dpkg/statusnão é algo que tende a exigir intervenção do administrador. Quaisquer que crossplatformuifossem seus problemas , provavelmente existe uma maneira melhor de resolvê-los. A única vez que precisei editar /var/lib/dpkg/statusfoi quando um Packagesarquivo upstream foi quebrado.

Gilles
fonte
Também gostaria de saber a melhor maneira que você mencionou para remover o crossplatformui, se puder ajudar. Tentei de todas as maneiras possíveis removê-lo e tentei encontrar muitas soluções, mas apenas a que eu mencionei funcionou ...
Nirmik
1
@Nirmik Não faço idéia crossplatformui. Faça isso como uma pergunta separada. Posso dizer-lhe que, em mais de uma década de uso dpkg, incluindo muitas fontes não oficiais, raramente precisei editar o statusarquivo, e somente quando havia um repositório de terceiros quebrado.
Gilles
Ok ... Muito obrigado mais uma vez .... como você sugere, eu a postarei como uma nova pergunta :) também como você parece um usuário muito avançado, gostaria de perguntar se você sabe alguma coisa sobre como deixar o HOT inoperante -KTEYS funciona ?? (minha chave sem fio não funciona)
Nirmik
Tentei colocar o antigo no lugar do novo, não me corrigiu. :-(
Stéphane Gourichon
1
re: {Você estragou tudo quando editou / var / lib / dpkg / status} quanto a mim - não, não estou, não toquei neste arquivo :) No entanto, essa é a única solução que resolve o problema no meu caso. Obrigado.
Ruslo
18

eu fiz

sudo apt-get clean
sudo apt-get update

e funcionou.

psychok7
fonte
1
Não consertou para mim. :-(
Stéphane Gourichon
16

As etapas 2 a 5 do Procedimento de solução de problemas do Gerenciador de Pacotes geralmente resolvem esse problema.

Para a etapa 2 , desative todos os seus PPAs. Você pode desmarcar todos eles em Fontes de software da mesma maneira que desmarca apenas um; consulte Como desativar um PPA específico? . Você pode reativá-los mais tarde.

Para a etapa 3 , feche todos os programas abertos que puder. Provavelmente, é seguro manter seu navegador aberto, para que você tenha suas instruções à sua frente. Mas é particularmente importante garantir que nenhum gerenciador de pacotes esteja em execução . Isso inclui o Centro de Software, o Atualizador de Software (Gerenciador de Atualizações nas versões mais antigas do Ubuntu), Synaptic e Gdebi. Ele também inclui utilitários de gerenciamento de pacotes de linha de comando, como apt-get, dpkg, e aptitude.

Observe que, se outros usuários estiverem conectados ao mesmo tempo, eles deverão fazer logoff, se possível.

Para a etapa 4 , abra uma janela do terminal. Uma maneira de fazer isso que funcione, independentemente do ambiente de área de trabalho que você usa, é pressionar Ctrl+ Alt+ T.

Para a etapa 5 , execute estes comandos na janela do 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"' _ '{}' \;

Copiei esse texto literalmente de PackageManagementTroubleshoootingProcedure em 2 de março de 2014. Esses comandos evoluíram no passado e os comandos recomendados nesse artigo podem ser alterados ou expandidos novamente no futuro . Portanto, você pode querer trabalhar a partir da etapa 5 . (Esse artigo, criado / editado por "Colaboradores do wiki de documentação do Ubuntu" - especialmente Mark Rijckenberg - é licenciado com o CC-BY-SA 3.0 , que permite a inclusão aqui com a devida atribuição.)

Alguns desses comandos tentam corrigir o problema (e também podem mostrar informações de diagnóstico); outras pessoas exibem informações valiosas sobre o problema que você pode incluir na sua pergunta ou fornecer a alguém que o esteja ajudando. (Ou, dependendo de suas habilidades, pode permitir que você para diagnosticar e resolvê-lo.)

Muitas vezes isso corrige, mas quando não o faz, muitas vezes fornece informações suficientes para corrigi-lo.

Você não precisa digitar manualmente esses comandos; você pode copiá-los e colá-los. Eu recomendo colar e executar cada um separadamente, no entanto. Isso torna mais claro qual é a saída de quais comandos.

Eliah Kagan
fonte
Copiei o bloco inteiro e colei em vez de executar um por um. Apesar de vários comandos deste são inúteis e alguns não, mas finalmente ele não ajuda no meu caso
phuclv
11

Também vi esse problema ocorrer quando você tem muitas fontes em seus repositórios.

Experimente a solução postada acima e / ou talvez também a recomendada às vezes na barra de ativação:

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

Deixe-nos saber como você se sai.

andybleaden
fonte
Obrigado! Isso não funcionou com o DSL sem o makedir também.
Doug
4

Eu estava com um erro semelhante:

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.

Eu segui sugestões semelhantes para copiar status-old.

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

Todos os meus arquivos de status estavam em branco por algum motivo. Felizmente, descobri que há backups desses arquivos:

$ 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

Eu verifiquei o backup mais recente ...

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

... mas ainda estava em branco. Então eu descompactei um antigo ...

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

Desta vez houve conteúdo. Então eu copiei ...

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

Então apt-get updatecorreu sem problemas.

O crédito vai para este post.

Andrew
fonte
3

Eu tive o mesmo problema e tentei toda a solução de problemas mencionada em outras respostas. Estranhamente, a única solução foi uma etapa diferente:

  • Vá para Software e atualizações -> Software Ubuntu -> Download de -> Outros-> Selecionar Melhor Servidor

  • Aguarde os testes. No final dos testes, o melhor servidor será selecionado, não necessariamente o mais próximo, nem o servidor principal, nem o servidor da sua localidade.

  • Agora recarregue os dados do repositório, ele será concluído corretamente.

Muhammad Annaqeeb
fonte