“E: O subprocesso / usr / bin / dpkg retornou um código de erro (1)” O que isso significa?

31

Eu já vi essa mensagem várias vezes sempre que alguém tem um problema ao instalar, atualizar ou remover algum software, mas me pergunto: o que isso significa e, mais importante, é possível resolvê-lo?

(Reading database ... 81657 files and directories currently installed.)
 Removing mongodb-10gen ...
 arg: remove
 invoke-rc.d: unknown initscript, /etc/init.d/mongodb not found.
 dpkg: error processing mongodb-10gen (--remove):
  subprocess installed pre-removal script returned error exit status 100
 invoke-rc.d: unknown initscript, /etc/init.d/mongodb not found.
 dpkg: error while cleaning up:
  subprocess installed post-installation script returned error exit status 100
 Errors were encountered while processing:
  mongodb-10gen
 E: Sub-process /usr/bin/dpkg returned an error code (1)

(o exemplo acima é apenas um exemplo, não é meu problema real)

Braiam
fonte
2
Se você tentou apt-get install (something)e recebeu essa mensagem de erro como eu, a solução para mim foi apt-get upgrade (something).
PJ Brunet

Respostas:

30

Essa mensagem é genérica. Significa apenas que a dpkginstância chamada por apt/ apt-getfalhou por algum motivo. Não explica por que, como ou dá dicas de como resolvê-lo. Como uma mensagem de diagnóstico, não é útil.

Você precisa ler as linhas antes da mensagem (às vezes várias) para encontrar o erro real que impede você de concluir a instalação.

Sim, mas como eu resolvo isso?

Não existe uma maneira única de resolvê-lo. Há tantas razões pelas quais isso pode acontecer que é inútil tentar listá-las todas em um único post. Toda e qualquer circunstância é quase única para esse pacote / ambiente.

Mas há redenção. O fato de você ver esta mensagem significa que provavelmente há informações mais relevantes nas linhas antes da mensagem. Para fins ilustrativos, usarei um exemplo:

(Reading database ... 81657 files and directories currently installed.)
 Removing mongodb-10gen ...
 arg: remove
 invoke-rc.d: unknown initscript, /etc/init.d/mongodb not found.
 dpkg: error processing mongodb-10gen (--remove):
  subprocess installed pre-removal script returned error exit status 100
 invoke-rc.d: unknown initscript, /etc/init.d/mongodb not found.
 dpkg: error while cleaning up:
  subprocess installed post-installation script returned error exit status 100
 Errors were encountered while processing:
  mongodb-10gen
 E: Sub-process /usr/bin/dpkg returned an error code (1)

Agora, para encontrar o problema, você precisa ler para trás:

  • E: Sub-process /usr/bin/dpkg returned an error code (1)não me diz nada de útil. Então, seguindo em frente.
  • Errors were encountered while processing: mongodb-10genapenas me diz que pacote tem problemas. É útil, mas não suficiente.
  • subprocess installed post-installation script returned error exit status 100: isso me diz que o script que falhou foi o postinstexecutado na pós-instalação. Isso será útil em algumas situações, mas não nesta.
  • dpkg: error while cleaning up: nada de útil aqui.
  • invoke-rc.d: unknown initscript, /etc/init.d/mongodb not found.BINGO! Isso nos diz que invoke-rc.d, um binário que controla o script init na maioria dos sistemas semelhantes ao Debian, falhou. Falhou porque não conseguiu encontrar o /etc/init.d/mongodbscript. Isto é mau. Precisamos criá-lo ou copiá-lo de outro lugar para que ele volte a funcionar. Reinstalar o pacote também é normalmente uma opção para file not founderros.

    Nesse caso, não é necessário relatar um bug, porque é provável que fomos nós que removemos o script, mas se você tiver certeza absoluta de que não tocou no arquivo (a debsums -sladeve confirmar), relate um bug.

Então, o que exatamente você precisa para obter ajuda? Idealmente, a saída completa do problema. Também é útil incluir a saída de sudo dpkg -Ce sudo apt-get check, e a saída de apt-cache policy package1 package2...onde "pacote1 pacote2 ..." inclui todos os pacotes com problemas.

Braiam
fonte
como uma mensagem de diagnóstico é útil se você ler todo o erro (Erros foram encontrados durante processamento de: mongodb-10gen) é por isso que ele é listado como E e não erro
mchid
1
@mchid mas o que causou o erro? Não lhe dá a pista cega.
Braiam
@ mchid sim, como posso descobrir isso se eu apenas ler Errors were encountered while processing: mongodb-10gen? Como é, para resolver o problema, essa linha é inútil .
Braiam 22/03/2015
Pena que pensei que você estava apenas procurando como resolver o problema ("é possível resolvê-lo")? Acho que tirei isso do contexto.
Mchid 22/03/2015
Entre, execute sudo touch /etc/init.d/mongodbe execute sudo apt-get purge mongodb-10genpara corrigir o problema. Eu testei isso e enquanto o arquivo existir (/etc/init.d/mongodb) o dpkg continuará mesmo se o arquivo estiver vazio, e é isso que o touch faz (cria um arquivo vazio).
Mchid 29/03/2015