Error de dpkg: "intentando sobrescribir el archivo, que también está en ..."

109

Por ejemplo:

$ 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).

Recibo los mismos errores o errores similares cuando intento instalar clojure1.3, leiningen y otros paquetes.

Cuando intento la sugerencia hecha en el mensaje de error, esto es lo que sucede:

$ 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.
missingfaktor
fuente
También se ve en vivo que necesita instalar Java, búsquelo en el centro de software
Mark Kirby
1
Probablemente un duplicado de estas preguntas y respuestas o al menos la solución debería ayudar
danjjl
@markkirby, he corrido sudo apt-get updatesi eso es lo que estás preguntando.
missingfaktor
@markkirby, JDK ya está instalado.
missingfaktor

Respuestas:

72

No busque la respuesta de danjjl directamente, si se enfrenta a este tipo de error de "intentar sobrescribir", es probable que tenga paquetes conflictivos que deben resolverse primero.

La solución inmediata para el problema es eliminar el paquete conflictivo que no es deseable, en este caso scala,

sudo dpkg -P scala

A continuación, se recomendaría enviar un informe de error con los respectivos mantenedores de paquetes. Esto normalmente implica agregar una Conflict: packagelínea en el archivo de control.

Consulte también esta respuesta para obtener una explicación más detallada sobre este error.

Avinash Raj
fuente
3
No estoy tan seguro de este consejo. Creo que depende de la situación. En el enlace a su publicación anterior, hay un conflicto entre dos versiones del mismo software. Estoy de acuerdo en que se debe eliminar primero el software anterior. Sin embargo, si hay un problema con la forma en que se empacaron dos programas diferentes y el archivo que se sobrescribe es idéntico o inofensivo, entonces no veo ningún problema con el consejo. No, no es lo ideal ... pero probablemente sea un poco extremo pedirle a alguien que no busque una respuesta en particular si la alternativa es esperar hasta que se solucione el problema ...
Ray
@Ray en ese caso, un informe de error puede estar en orden ... pero dudo que el software de los repositorios de Ubuntu tenga ese problema, ya que sacan exhaustivamente de las pruebas de Debian y Debian para este tipo de problemas.
Braiam
1
@Braiam Ha pasado mucho tiempo desde que usé Debian. Quizás sea mejor ahora, pero vi problemas similares con Debian. No se debe a la falta de pruebas exhaustivas, pero a veces es difícil probar todos los escenarios posibles. No importa cuántas pruebas se realicen, algo puede pasar. No estoy en contra de escribir un informe de error, pero "es más fácil decirlo que hacerlo". Después de todo, puede ser difícil resumir todos los paquetes en conflicto. Y, si los errores no son "candentes" (es decir, no afectan a mucha gente), terminarás esperando.
Ray
Quizás sería mejor si la respuesta original se modificara de modo que dijera: "Por favor, no lo haga por (alguna razón)". Para que alguien pueda elegir ignorarlo una vez que conoce los pros y los contras. Tal como está, la respuesta anterior solo dice que no lo hagas.
Ray
@Ray umm ... al construir un paquete dpkg almacena una lista de archivos (paquete dpkg -L) y simplemente buscar colisiones debería ser suficiente para la primera medida. Y por pruebas exhaustivas me refería a las pruebas del mundo real, las inestables y las pruebas están ahí precisamente para este tipo de cosas
Braiam
98

Para solucionar su problema, ejecute

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

compruebe que todo esté solucionado ejecutando: sudo apt-get -f install

Si aún tiene problemas, vuelva a ejecutar el primer paso con cualquier dpkg: error processing (...)resto

Solución encontrada en webupd8

danjjl
fuente
99
Esto instalará efectivamente el paquete, pero el problema persiste cuando ambos paquetes intentan usar la misma biblioteca / archivo / binario.
Braiam
11
Dios, no, esa es una receta para un sistema roto ...
fkraiem
Se corrigió la actualización del servidor de medios odroid Plex ... ¡gracias!
Mark
Trabajó para mí, gracias
Miguel Mota
45

El comando de @ danjjl funciona para .debarchivos. Encontré que este comando funciona con apt/ apt-get:

sudo apt-get -o Dpkg::Options::="--force-overwrite" install <package-name>
David Xia
fuente
44
Gran tipp. Sin embargo, tenga cuidado: sobrescribir las cosas puede causar serios problemas si los archivos son diferentes. Uno de sus paquetes en conflicto ya no funcionará correctamente.
Potaito
1
sudo apt-get -o Dpkg::Options::="--force-overwrite" install -ffuncionó para mí por un problema similar
user2205916
@ Cat: más bien como "gran truco". ; -]
David Foerster
1

No estoy seguro de que sea una solución global, ya que tuve el mismo problema, pero con un archivo libglx-mesa en el caché en conflicto con Nvidia-390. Eliminé el archivo y emití un apt install -f -y, dejé que terminara y luego procedí con el apt update, upgradey autoremoveen esa secuencia.

Recibí el error mientras ejecutaba un apt dist-upgradeUbuntu 18.04 y continué el proceso nuevamente, no más problemas y esa parecía ser "mi" solución.

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

PD: Intentar sobrescribir fue una mala idea que intenté y tuve suerte. Pero es mejor encontrar la causa raíz y solucionarlo. Todavía tengo que investigar, pero el error me llevó a mover el archivo.

usuario3091464
fuente