Ошибка dpkg: «пытается перезаписать файл, который также находится в…»

109

Например:

$ 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.
missingfaktor
источник
Также выглядит вживую, вам нужно установить Java, найти его в программном центре
Марк Кирби
1
Вероятно, дубликат этого Q & A или, по крайней мере, решение должно помочь
danjjl
@ markkirby, я побежал, sudo apt-get updateесли ты об этом.
фактор
@markkirby, JDK уже установлен.
фактор

Ответы:

73

Пожалуйста, не обращайтесь непосредственно к ответу danjjl , если вы столкнулись с такой ошибкой «попытки перезаписать», скорее всего, у вас есть конфликтующие пакеты, которые необходимо решить в первую очередь.

Непосредственное исправление для выпуска, чтобы удалить конфликтующий пакет , который является нежелательным, в данном случае scala,

sudo dpkg -P scala

Далее было бы рекомендовано отправить отчет об ошибке с сопровождающими соответствующих пакетов. Обычно это подразумевает добавление Conflict: packageстроки в контрольный файл.

Также см. Этот ответ для более подробного объяснения этой ошибки.

Авинаш Радж
источник
3
Не уверен насчет этого совета. Я думаю, что это зависит от ситуации. В ссылке на вашу предыдущую публикацию существует конфликт между двумя версиями одного и того же программного обеспечения. Я согласен с тем, что сначала нужно удалить старое программное обеспечение. Однако, если есть проблема с тем, как были упакованы две разные программы, и перезаписываемый файл идентичен или иным образом безопасен, то я не вижу проблемы с советом. Нет, не идеально ... но, вероятно, немного экстремально просить кого-то не переходить на конкретный ответ, если альтернативой является ожидание, пока проблема не будет исправлена ​​...
Ray
@Ray в этом случае отчет об ошибке может быть в порядке ... но я сомневаюсь, что программное обеспечение из репозиториев Ubuntu имеет эту проблему, так как они полностью используют тесты Debian и Debian для подобных проблем.
Брайам
1
@Braiam Давно я не пользовался Debian. Возможно, сейчас лучше, но я видел похожие проблемы с Debian. Это не из-за отсутствия исчерпывающего тестирования, но иногда трудно протестировать каждый возможный сценарий. Независимо от того, сколько тестов выполнено, что-то может ускользнуть. Я не против написания отчета об ошибке, но "проще сказать, что сделано". В конце концов, может быть трудно суммировать все конфликтующие пакеты. И, если ошибки не являются «горячими» (то есть они не затрагивают много людей), вы просто будете ждать.
Рэй
Возможно, было бы лучше, если бы первоначальный ответ был изменен так, чтобы в нем говорилось: «Пожалуйста, не делайте это из-за (какой-то причины)». Так что кто-то может проигнорировать это, когда узнает плюсы и минусы. На самом деле, ответ выше просто говорит: не делай этого.
Рэй
1
К вашему сведению, это решение сработало для меня. Оскорбительный пакет в моем случае былlibc6-dev-i386
FractalSpace
98

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

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

danjjl
источник
9
Это эффективно установит пакет, но проблема остается, когда оба пакета пытаются использовать одну и ту же библиотеку / файл / двоичный файл.
Брайам
11
Боже, нет, это рецепт сломанной системы ...
fkraiem
Исправлено обновление моего медиа-сервера odroid Plex .. спасибо!
Mark
Работал для меня, спасибо
Мигель Мота
45

Команда @ danjjl работает для .debфайлов. Я обнаружил, что эта команда работает с apt/ apt-get:

sudo apt-get -o Dpkg::Options::="--force-overwrite" install <package-name>
Дэвид Ся
источник
4
Отличный совет Будьте осторожны: перезапись может привести к серьезным проблемам, если файлы разные. Один из ваших конфликтующих пакетов больше не будет работать должным образом.
Потайто
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: принудительная перезапись была плохой идеей, которую я попробовал, и мне повезло. Но лучше найти причину и устранить ее. Я все еще должен исследовать, но ошибка вынудила меня убрать файл.

user3091464
источник