Помилка dpkg: "спроба перезаписати файл, який також знаходиться в ..."


108

Наприклад:

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

Я отримую ті ж чи подібні помилки, коли намагаюся встановити clojure1.3, leiningen та кілька інших пакетів.

Коли я пробую пропозицію, зроблену у повідомленні про помилку, ось що відбувається:

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

Також виглядає наживо, що вам потрібно встановити java, шукайте його в програмному центрі
Марк Кірбі

1
Можливо, дублікат цього запитання чи принаймні рішення повинен допомогти
danjjl

@markkirby, я біг, sudo apt-get updateякщо це те, про що ви запитуєте.
зниклий фактор

@markkirby, JDK вже встановлений.
зниклий фактор

Відповіді:


72

Будь ласка, не звертайтеся безпосередньо до відповіді danjjl , якщо ви зіткнулися з подібною помилкою "спроби перезаписати", ймовірно, у вас є конфліктні пакети, які потрібно вирішити спочатку.

Безпосереднім виправленням проблеми є видалення суперечливого пакету, який небажаний, у цьому випадку scala,

sudo dpkg -P scala

Далі рекомендується подати звіт про помилку із відповідними сервісними пакетами. Це, як правило, означає додавання Conflict: packageрядка в керуючий файл.

Також дивіться цю відповідь для більш детального пояснення цієї помилки.


3
Не дуже впевнений у цій раді. Я думаю, це залежить від ситуації. У посиланні на вашу попередню публікацію виникає конфлікт між двома версіями одного програмного забезпечення. Я згоден там, що спочатку слід видалити старіше програмне забезпечення. Однак якщо є проблема із тим, як було упаковано дві різні програми, а перезаписаний файл є ідентичним або інакше нешкідливим, тоді я не бачу проблем із порадами. Ні, не ідеально ... але, мабуть, трохи екстремально попросити когось не звертатися за конкретною відповіддю, якщо альтернатива - чекати, поки проблема не виправлена ​​...
Рей

@Ray в цьому випадку може бути звіт про помилку ... але я сумніваюся, що програмне забезпечення з репозиторіїв Ubuntu має таку проблему, оскільки вони витягують з тестів Debian і Debian для таких проблем вичерпно.
Брайам

1
@Braiam Давно минуло, як я використовував Debian. Можливо, зараз краще, але я бачив подібні проблеми з Debian. Це не через відсутність вичерпного тестування, але іноді важко перевірити кожен можливий сценарій. Незалежно від того, скільки тестування проводиться, щось може проскочити. Я не проти написання звіту про помилки, але "простіше сказати, що зроблено". Зрештою, може бути важко узагальнити всі конфліктуючі пакети. І якщо помилки не "гарячі" (тобто вони не впливають на багато людей), ви просто закінчите чекати.
Рей

Можливо, було б краще, якби оригінальну відповідь було змінено так, що вона сказала: "Будь ласка, не робіть це через (з якоїсь причини)". Щоб хтось міг вибрати ігнорувати це, коли вони дізнаються плюси і мінуси. На даний момент відповідь вище просто говорить: не робіть цього.
Рей

@Ray umm ... при складанні пакету dpkg зберігає список файлів (dpkg -L пакет) і просто шукає зіткнень має бути достатньо для першого виміру. І під вичерпним тестуванням я мав на увазі тестування реального світу, нестабільне та тестування саме для цього матеріалу
Брайам

97

Щоб вирішити проблему, запустіть

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

перевірте, що все виправлено за допомогою запуску: sudo apt-get -f install

Якщо у вас все-таки виникають проблеми, повторіть перший крок з будь-яким dpkg: error processing (...)іншим, що залишився

Рішення знайдено в webupd8


9
Це ефективно встановить пакет, але проблема залишається, коли обидва пакети намагаються використовувати одну і ту ж бібліотеку / файл / двійковий файл.
Брайам

11
Боже, ні, це рецепт порушеної системи ...
fkraiem

Виправлено оновлення медіа-сервера odroid Plex .. дякую!
Марк

Працював для мене, спасибі
Мігель Мота

44

Команда @ danjjl працює для .debфайлів. Я виявив, що ця команда працює з apt/ apt-get:

sudo apt-get -o Dpkg::Options::="--force-overwrite" install <package-name>

4
Чудовий наконечник. Але будьте уважні: Переписування речей може спричинити серйозні проблеми, якщо файли відрізняються. Один із ваших конфліктних пакетів більше не працюватиме належним чином.
Potaito

1
sudo apt-get -o Dpkg::Options::="--force-overwrite" install -fпрацював у мене для подібного випуску
user2205916

@Cat: Тоді більше, як "великий хак". ; -]
Девід Фоерстер

1

Не впевнений, що це глобальне виправлення, як у мене був той самий випуск, але з файлом libglx-mesa в кеші, що суперечить Nvidia-390. Я видалив файл і видав apt install -f -y, нехай це готова , а потім приступали з apt update, upgradeі autoremoveв цій послідовності.

Я отримав помилку під час виконання apt dist-upgradeUbuntu 18.04 і продовжив процес знову, більше проблем не було, і це, здавалося, було "моїм" виправленням.

Команди:

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: Примусовий перезапис був поганою ідеєю, яку я спробував, і мені пощастило. Але краще знайти першопричину та виправити її. Я все ще повинен розслідувати, але помилка призвела до того, щоб перемістити файл в сторону.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.