Błąd dpkg: „próba zastąpienia pliku, który również znajduje się w…”

108

Na przykład:

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

Dostaję te same lub podobne błędy, gdy próbuję zainstalować clojure 1.3, leiningen i kilka innych pakietów.

Kiedy próbuję zasugerować komunikat o błędzie, dzieje się tak:

$ 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
źródło
Wygląda również na żywo, że musisz zainstalować program Java, wyszukaj go w centrum oprogramowania
Mark Kirby
1
Prawdopodobnie duplikat tego pytania i odpowiedzi lub przynajmniej rozwiązanie powinno pomóc
danjjl
@markkirby, pobiegłem, sudo apt-get updatejeśli o to pytasz.
missingfaktor
@markkirby, JDK jest już zainstalowany.
missingfaktor

Odpowiedzi:

72

Nie wybieraj bezpośrednio odpowiedzi danjjl , jeśli napotkasz tego rodzaju błąd „próby zastąpienia”, prawdopodobnie masz konfliktowe pakiety, które należy rozwiązać w pierwszej kolejności.

Bezpośrednim fix do wydania jest usunięcie konflikt pakiet, który jest niepożądane, w tym przypadku scala,

sudo dpkg -P scala

Następnie zaleca się przesłanie raportu o błędzie do odpowiednich opiekunów pakietów. Zwykle oznacza to dodanie Conflict: packagewiersza w pliku sterującym.

Zobacz także odpowiedź, aby uzyskać bardziej szczegółowe wyjaśnienie tego błędu.

Avinash Raj
źródło
3
Nie jestem pewien co do tej porady. Myślę, że to zależy od sytuacji. W linku do Twojego wcześniejszego postu występuje konflikt między dwiema wersjami tego samego oprogramowania. Zgadzam się, że najpierw należy usunąć starsze oprogramowanie. Jeśli jednak występuje problem ze spakowaniem dwóch różnych programów, a zastępowany plik jest identyczny lub w inny sposób nieszkodliwy, to nie widzę problemu z poradą. Nie, niezbyt idealne ... ale prawdopodobnie jest trochę ekstremalnie prosić kogoś, aby nie szukał konkretnej odpowiedzi, jeśli alternatywą jest poczekanie, aż problem zostanie naprawiony ...
Ray
@ W takim przypadku raport o błędach może być w porządku ... ale wątpię, czy oprogramowanie z repozytoriów Ubuntu ma ten problem, ponieważ wyczerpuje się w testach Debiana i Debiana dla tego rodzaju problemów.
Braiam
1
@Braiam Dawno nie korzystałem z Debiana. Może teraz jest lepiej, ale widziałem podobne problemy z Debianem. Nie wynika to z braku wyczerpujących testów, ale czasami trudno jest przetestować każdy możliwy scenariusz. Bez względu na to, ile testów zostanie przeprowadzonych, coś może się prześlizgnąć. Nie jestem przeciwny pisaniu raportu o błędzie, ale „łatwiej powiedzieć, że zrobiono”. W końcu podsumowanie wszystkich sprzecznych pakietów może być trudne. A jeśli błędy nie są „gorące” (tj. Nie dotyczą wielu osób), to po prostu czekasz.
Ray
Być może byłoby lepiej, gdyby pierwotna odpowiedź została zmodyfikowana, tak aby brzmiała: „Proszę nie rób tego z (jakiegoś powodu)”. Aby ktoś mógł go zignorować, gdy pozna zalety i wady. W obecnej formie powyższa odpowiedź mówi po prostu, nie rób tego.
Ray
@ Ray umm ... podczas budowania pakietu dpkg przechowuje listę plików (pakiet dpkg -L) i po prostu szukanie kolizji powinno wystarczyć do pierwszego pomiaru. I przez wyczerpujące testy miałem na myśli testy w świecie rzeczywistym, niestabilne i testy są właśnie dla tego rodzaju rzeczy
Braiam
97

Aby naprawić problem, uruchom

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

sprawdź, czy wszystko zostało naprawione, uruchamiając: sudo apt-get -f install

Jeśli nadal masz problemy, uruchom ponownie pierwszy krok z dpkg: error processing (...)pozostałymi

Rozwiązanie znalezione na webupd8

Danjjl
źródło
9
To skutecznie zainstaluje pakiet, ale problem pozostaje, gdy oba pakiety będą próbowały użyć tej samej biblioteki / pliku / pliku binarnego.
Braiam
11
Boże, nie, to jest przepis na zepsuty system ...
fkraiem
Naprawiono aktualizację mojego serwera multimediów odroid Plex .. dzięki!
Mark
Pracował dla mnie, dzięki
Miguel Mota
44

Komenda @ danjjl działa dla .debplików. Znalazłem to polecenie działa z apt/ apt-get:

sudo apt-get -o Dpkg::Options::="--force-overwrite" install <package-name>
David Xia
źródło
4
Świetna wskazówka. Uważaj jednak: nadpisywanie rzeczy może powodować poważne problemy, jeśli pliki są różne. Jeden z twoich sprzecznych pakietów nie będzie już działał poprawnie.
Potaito
1
sudo apt-get -o Dpkg::Options::="--force-overwrite" install -fpracował dla mnie dla podobnego problemu
user2205916
@Cat: Bardziej jak „wielki hack”. ; -]
David Foerster,
1

Nie jestem pewien, czy to globalna poprawka, ponieważ miałem ten sam problem, ale z plikiem libglx-mesa w pamięci podręcznej powodującym konflikt z Nvidią-390. Usunąłem plik i wyemitował apt install -f -y, niech to gotowy, a następnie przystąpił do apt update, upgradei autoremovew tej kolejności.

apt dist-upgradeWystąpił błąd podczas uruchamiania systemu Ubuntu 18.04 i kontynuowałem proces ponownie, koniec problemów i to wydawało się być „moją” poprawką.

Polecenia:

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: Wymuszenie zastąpienia było złym pomysłem, który próbowałem i miałem szczęście. Ale lepiej jest znaleźć podstawową przyczynę i naprawić ją. Nadal muszę to zbadać, ale błąd skłonił mnie do przeniesienia pliku na dalszy plan.

użytkownik3091464
źródło