Ошибка 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.

Также выглядит вживую, вам нужно установить 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


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: принудительная перезапись была плохой идеей, которую я попробовал, и мне повезло. Но лучше найти причину и устранить ее. Я все еще должен исследовать, но ошибка вынудила меня убрать файл.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.