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.

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 tę odpowiedź, aby uzyskać bardziej szczegółowe wyjaśnienie tego błędu.


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


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>

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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.