Sempre que digito sudo apt-get remove
e, em seguida, pressiono a Tabtecla para preenchimento automático, recebo a seguinte mensagem:
grep-status: /var/lib/dpkg/status:15945: expected a colon
.
Não vejo nada de especialmente estranho na linha 15945 no arquivo de status. É um caractere de ponto no campo de descrição de um pacote de biblioteca mono e a inserção de dois pontos não ajudou. A remoção da linha que contém o ponto também não funcionou. A substituição do arquivo com status antigo resultou na mesma mensagem.
Existe alguma maneira de reconstruir o arquivo de status?
status
arquivo: é uma fonte primária de informações e, embora muitas sejam redundantes, nem todas são. No entanto, provavelmente é possível reparar o arquivo manualmente. Poste um pedaço do arquivo na linha problemática, digamos 20 a 40 linhas, incluindo pelo menos umaPackage:
linha antes e depois da linha 15945.apt-get
,dpkg
e amigos ainda funcionam corretamente, e que está erroring fora é auto-realização?Respostas:
Finalmente consertei meu sistema disso. A restauração de um backup do arquivo de status não funcionou, pois há muito tempo o problema está em todos os meus backups.
A correção envolve grepping para as quebras de formatação reais e corrigi-las manualmente. Não é tão difícil quanto parece.
http://thepcspy.com/read/fixing-dpkg-status-corruption/
fonte
missing package name
e descobri que, por algum motivo estranho, é melhor eu não perder meu tempo descobrindo, eu tinha uma linhaPackaga: landscape-common
que foi corrigida ortograficamente e bam, problema resolvido. O problema é que nunca toquei esse arquivo, nem mais ninguém. Como um computador pode atrapalhar com um erro de ortografia?.
a essa linha em branco].Você deve poder trabalhar com um arquivo de bom estado anterior e atualizar a partir daí. Toda vez que você faz uma instalação ou atualização, o arquivo de status é salvo em um backup compactado em gzip em / var / backups . Executar um ls -l dpkg * no diretório mostra:
Há também um backup do arquivo criado no diretório / var / lib / dpkg / chamado status-old. Executar um status ls -l * no diretório mostra:
Portanto, para se recuperar de uma corrupção, você deve fazer o seguinte:
1. Faça um backup do arquivo de status corrompido :
2. Copie um arquivo de status recente do dpkg no lugar de qualquer uma das fontes acima:
ou
ou
3. Em seguida, execute o apt-get update:
Isso deve resolver.
fonte
sudo apt update && sudo apt dist-upgrade
deve corrigir a maioria dos problemas que essestatus
arquivo antigo pode causar. Se o seu sistema tiver uma bagunça maior, emsudo aptitude dist-upgrade
vez desudo apt ...
sugerir algumas vezes maneiras melhores de corrigir a falha.Consegui corrigir esse problema removendo os pacotes que tinham entradas corrompidas no arquivo de status.
A solução aceita via pcregrep não funcionou (o pcregrep não encontrou nada).
fonte
Tente um "dpkg -P" para o pacote incorreto. Isso o limpará do repositório local, removendo todos os rastreamentos. No meu sistema, essa foi a correção para os pacotes removidos (mas ainda não eliminados) que produziram esse erro.
fonte
Nesse caso, eu fazia o backup do
/var/lib/dpkg/status
arquivo corrompido e o corrigia manualmente (nas linhas 1888 e 9550) usando as informações defonte
Este foi um erro (supostamente corrigido): Erro no Launchpad 613018
Upstream: Bug Debian 590885
Essa deve ser uma solução alternativa (backup, sequência de versões de "correção"):
fonte
Filho de uma...
Ok, o erro real estava na linha 15266, apesar de ter sido relatado cerca de 700 linhas mais abaixo. A entrada problemática no arquivo de status foi causada por uma deb que eu instalei para que minha impressora Lexmark funcionasse há muito tempo. A entrada era para o pacote
lexmark-inkjet-08-driver
. O campo Descrição não possui um.
no lugar de uma quebra de linha. Isso causou o erro de análise.Para descobrir isso, recorri a um método de solução de problemas de espingarda e comecei a tentar as coisas aleatoriamente. Uma das minhas tentativas
grep-status -P e
bobas foi descobrir que e era a letra mais comum do alfabeto. Burro, eu sei, mas o último registro de status impresso antes de queixar-se de dois pontos ausentes era para o pacote lexmark e notei a falta de um.
personagem depois de alguns minutos olhando para a tela.Se possível, gostaria de outra resposta que pudesse descrever um método melhor para encontrar esse tipo de problema, caso alguém se deparar com um problema semelhante no futuro. Obrigado.
fonte
grep-status -r -P ^
deve sempre corresponder a qualquer pacote para analisar o arquivo inteiro e abortar se não puder analisá-lo.Como meu status antigo era muito problemático mesmo com
apt-get update
,Isso funcionou muito bem para mim:
(como raiz)
CREDITO: http://alvinalexander.com/blog/post/linux-unix/how-remove-non-printable-ascii-characters-file-unix
Se você está curioso para saber o que mudou ou onde estaria o dano: (possivelmente longo)
fonte