dpkg error: “tentando sobrescrever arquivo, que também está em…”

108

Por exemplo:

$ sudo apt-get install curl
Reading package lists... Done
Building dependency tree
Reading state information... Done
You might want to run 'apt-get -f install' to correct these:
The following packages have unmet dependencies:
bsh : Depends: libjline-java but it is not going to be installed
groovy : Depends: libjline-java but it is not going to be installed
rhino : Depends: libjline-java but it is not going to be installed
E: Unmet dependencies. 

Try 'apt-get -f install' with no packages (or specify a solution).

Eu recebo erros iguais ou semelhantes quando tento instalar o clojure1.3, leiningen e vários outros pacotes.

Quando tento a sugestão feita na mensagem de erro, é o que acontece:

$ sudo apt-get -f install 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Correcting dependencies... Done
The following packages were automatically installed and are no longer required:
  diffstat linux-headers-3.2.0-26-generic linux-headers-3.2.0-26 dh-apparmor dkms html2text libmail-sendmail-perl libsys-hostname-long-perl
Use 'apt-get autoremove' to remove them.
The following extra packages will be installed:
  libjline-java
Suggested packages:
  libjline-java-doc
The following NEW packages will be installed:
  libjline-java
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
23 not fully installed or removed.
Need to get 0 B/72.0 kB of archives.
After this operation, 129 kB of additional disk space will be used.
Do you want to continue [Y/n]? Y
(Reading database ... 226243 files and directories currently installed.)
Unpacking libjline-java (from .../libjline-java_1.0-1_all.deb) ...
dpkg: error processing /var/cache/apt/archives/libjline-java_1.0-1_all.deb (--unpack):
 trying to overwrite '/usr/share/java/jline.jar', which is also in package scala 2.9.2-400
Errors were encountered while processing:
 /var/cache/apt/archives/libjline-java_1.0-1_all.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

$ sudo apt-get upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
You might want to run 'apt-get -f install' to correct these.
The following packages have unmet dependencies:
 bsh : Depends: libjline-java but it is not installed
 groovy : Depends: libjline-java but it is not installed
 rhino : Depends: libjline-java but it is not installed
E: Unmet dependencies. Try using -f.
desaparecido
fonte
Também parece viver você precisa instalar o java, procurá-lo no centro de software
Mark Kirby
1
Provavelmente uma duplicata de esta Q & A ou pelo menos a solução deve ajudar
danjjl
@ Markkirby, eu corri sudo apt-get updatese é isso que você está perguntando.
missingfaktor
@markkirby, o JDK já está instalado.
missingfaktor

Respostas:

72

Por favor, não procure a resposta danjjl diretamente, se você enfrentar esse tipo de erro "tentando sobrescrever", é provável que você tenha pacotes conflitantes que precisam ser resolvidos primeiro.

A correção imediata para o problema é remover o pacote conflitante que é indesejável, nesse caso scala,

sudo dpkg -P scala

Em seguida, seria recomendável enviar um relatório de bug com os respectivos mantenedores de pacotes. Isso normalmente implica adicionar uma Conflict: packagelinha no arquivo de controle.

Consulte também esta resposta para obter explicações mais detalhadas sobre esse erro.

Avinash Raj
fonte
3
Não tenho tanta certeza sobre esse conselho. Eu acho que depende da situação. No link para sua postagem anterior, há um conflito de duas versões do mesmo software. Concordo lá que se deve remover o software mais antigo primeiro. No entanto, se houver um problema com o modo como dois programas diferentes foram empacotados e o arquivo que está sendo sobrescrito for idêntico ou inofensivo, não vejo problema com o conselho. Não, não é o ideal ... mas é provavelmente um pouco extremo para pedir a alguém para não ir para a uma resposta específica se a alternativa é esperar até que o problema seja corrigido bug ...
Ray
@Ray, nesse caso, um relatório de bug pode estar em ordem ... mas duvido que o software dos repositórios Ubuntu tenha esse problema, pois eles extraem exaustivamente os testes Debian e Debian para esse tipo de problema.
Braiam 14/07/16
1
@Braiam Já faz muito tempo desde que eu usei o Debian. Talvez esteja melhor agora, mas vi problemas semelhantes com o Debian. Não é por falta de testes exaustivos, mas às vezes é difícil testar todos os cenários possíveis. Não importa quantos testes sejam realizados, algo pode passar despercebido. Não sou contra escrever um relatório de erro, mas "é mais fácil dizer isso". Afinal, pode ser difícil resumir todos os pacotes conflitantes. E, se os bugs não são "quentes" (ou seja, eles não afetam muitas pessoas), você acaba esperando.
Raio
Talvez seja melhor se a resposta original for modificada para que ela diga: "Por favor, não faça por causa de (por algum motivo)". Para que alguém possa optar por ignorá-lo quando souber os prós e os contras. Como está, a resposta acima diz apenas não faça.
Raio
@Ray umm ... ao criar um pacote, o dpkg armazena uma lista de arquivos (pacote dpkg -L) e simplesmente procurar colisões deve ser suficiente para a primeira medida. E por testes exaustivos eu quis dizer teste do mundo real, instável e testes estão lá precisamente para este tipo de coisa
Braiam
97

Para corrigir seu problema, execute

sudo dpkg -i --force-overwrite /var/cache/apt/archives/libjline-java_1.0-1_all.deb

verifique se tudo está corrigido executando: sudo apt-get -f install

Se você ainda tiver problemas execute novamente o primeiro passo com qualquer dpkg: error processing (...)restantes

Solução encontrada em webupd8

danjjl
fonte
9
Isso instalará efetivamente o pacote, mas o problema permanece quando os dois tentam usar a mesma biblioteca / arquivo / binário.
Braiam
11
Bondade, não, isso é uma receita para um sistema quebrado ...
fkraiem
Corrigida minha atualização do servidor de mídia odroid Plex .. obrigado!
Mark
Trabalhou para mim, obrigado
Miguel Mota
44

O comando do @ danjjl funciona para .debarquivos. Eu encontrei este comando funciona com apt/ apt-get:

sudo apt-get -o Dpkg::Options::="--force-overwrite" install <package-name>
David Xia
fonte
4
Ótima dica. Porém, tenha cuidado: Substituir itens pode causar sérios problemas se os arquivos forem diferentes. Um de seus pacotes conflitantes não funcionará mais corretamente.
Potaito 24/01
1
sudo apt-get -o Dpkg::Options::="--force-overwrite" install -ffuncionou para mim para um problema semelhante #
user2205916
@ Cat: Mais como "grande hack" então. ; -]
David Foerster
1

Não tenho certeza se é uma correção global, pois tive o mesmo problema, mas com um arquivo libglx-mesa no cache em conflito com a Nvidia-390. I removido o arquivo e emitiu um apt install -f -y, deixe que acabado e, em seguida, procedeu à apt update, upgradee autoremoveem que seqüência.

Eu recebi o erro ao executar um apt dist-upgradeno Ubuntu 18.04 e continuei o processo novamente, sem mais problemas e essa parecia ser a "minha" correção.

Comandos:

sudo su -
mv /var/cache/apt/archives/libglx-mesa0_18.0.0~rc5-1ubuntu1_amd64.deb ~
apt install -f -y
apt update -y
apt upgrade -y
apt autoremove -y
apt dist-upgrade

PS: Forçar uma substituição foi uma má idéia que tentei e tive sorte. Mas é melhor encontrar a causa raiz e corrigi-la. Ainda tenho que investigar, mas o erro me levou a mover o arquivo para fora do caminho.

user3091464
fonte