- Вопрос или проблема
- Внимание: Этот ответ опасен и может привести к поломке системы (поскольку это фактически установит пакет, но могут возникнуть новые проблемы, если оба пакета попытаются использовать одну и ту же библиотеку/файл/бинарный файл). Вместо этого используйте ответ Авинаша Раджа. Также рассмотрите возможность сообщения об ошибке для обоих конфликтующих пакетов.
- Ответ или решение
- 1. Удаление конфликтующего пакета
- 2. Попробуйте установить зависимые пакеты
- 3. Альтернативный способ — использование dpkg
- 4. Завершение установки
- 5. Используйте aptitude для автоматического решения конфликта
- 6. Изучение возможности использования dpkg-divert
- Заключение
- Примечание
Вопрос или проблема
Например:
$ sudo apt-get install curl
Чтение списков пакетов... Готово
Построение дерева зависимостей
Чтение информации о состоянии... Готово
Вам может понадобиться выполнить 'apt-get -f install', чтобы исправить это:
Следующие пакеты имеют неудовлетворенные зависимости:
bsh : Зависит: libjline-java, но он не будет установлен
groovy : Зависит: libjline-java, но он не будет установлен
rhino : Зависит: libjline-java, но он не будет установлен
E: Неудовлетворенные зависимости.
Попробуйте 'apt-get -f install' без пакетов (или укажите решение).
Я получаю те же или похожие ошибки, когда пытаюсь установить clojure1.3, leiningen и несколько других пакетов.
Когда я пробую предложение, указанное в сообщении об ошибке, вот что происходит:
$ sudo apt-get -f install
Чтение списков пакетов... Готово
Построение дерева зависимостей
Чтение информации о состоянии... Готово
Исправление зависимостей... Готово
Следующие пакеты были автоматически установлены и больше не нужны:
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
Используйте 'apt-get autoremove', чтобы удалить их.
Следующие дополнительные пакеты будут установлены:
libjline-java
Предлагаемые пакеты:
libjline-java-doc
Следующие НОВЫЕ пакеты будут установлены:
libjline-java
0 обновлено, 1 новая установка, 0 для удаления и 0 не обновлено.
23 не полностью установлены или удалены.
Необходимо получить 0 B/72.0 kB архивов.
После этой операции будет использовано 129 kB дополнительного места на диске.
Вы хотите продолжить [Y/n]? Y
(Чтение базы данных ... 226243 файла и директории в данный момент установлены.)
Распаковка libjline-java (из .../libjline-java_1.0-1_all.deb) ...
dpkg: ошибка при обработке /var/cache/apt/archives/libjline-java_1.0-1_all.deb (--unpack):
попытка перезаписать '/usr/share/java/jline.jar', который также находится в пакете scala 2.9.2-400
Ошибки возникли при обработке:
/var/cache/apt/archives/libjline-java_1.0-1_all.deb
E: Подпроцесс /usr/bin/dpkg вернул код ошибки (1)
$ sudo apt-get upgrade
Чтение списков пакетов... Готово
Построение дерева зависимостей
Чтение информации о состоянии... Готово
Вам может понадобиться выполнить 'apt-get -f install', чтобы исправить это.
Следующие пакеты имеют неудовлетворенные зависимости:
bsh : Зависит: libjline-java, но он не установлен
groovy : Зависит: libjline-java, но он не установлен
rhino : Зависит: libjline-java, но он не установлен
E: Неудовлетворенные зависимости. Попробуйте использовать -f.
Внимание: Этот ответ опасен и может привести к поломке системы (поскольку это фактически установит пакет, но могут возникнуть новые проблемы, если оба пакета попытаются использовать одну и ту же библиотеку/файл/бинарный файл). Вместо этого используйте ответ Авинаша Раджа. Также рассмотрите возможность сообщения об ошибке для обоих конфликтующих пакетов.
Вам нужно принудительно перезаписать файлы, вызывающие проблемы:
sudo dpkg -i --force-overwrite <путь-к-файлу>
В вашем случае это будет:
sudo dpkg -i --force-overwrite /var/cache/apt/archives/libjline-java_1.0-1_all.deb
Проверьте, что все исправлено, выполнив:
sudo apt-get --fix-broken install
Если у вас все еще есть проблемы, повторите первый шаг с любыми оставшимися dpkg: ошибка при обработке (...)
.
Решение найдено на webupd8
Пожалуйста, не используйте ответ danjjl напрямую, если вы столкнулись с подобной ошибкой “пытается перезаписать”, скорее всего, у вас есть конфликтующие пакеты, которые нужно решить сначала.
Непосредственное решение проблемы – удалить конфликтующий пакет, который нежелателен, в данном случае scala
,
sudo dpkg -P scala
Затем желательно отправить отчет об ошибке соответствующим разработчикам пакета. Обычно это означает добавление строки Conflict: пакет
в файл управления.
Также смотрите этот ответ для более подробного объяснения этой ошибки.
Команда @danjjl работает для .deb
файлов. Я нашел, что эта команда работает с apt
/apt-get
:
sudo apt-get -o Dpkg::Options::="--force-overwrite" install <имя-пакета>
Не уверен, является ли это глобальным решением, так как у меня была та же проблема, но с файлом libglx-mesa в кеше, конфликтующим с Nvidia-390. Я удалил этот файл и выполнил apt install -f -y
, дождался его завершения, а затем продолжил выполнять apt update
, upgrade
и autoremove
в таком порядке.
Я получил ошибку при выполнении apt dist-upgrade
на Ubuntu 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: Принудительная перезапись была плохой идеей, которую я попробовал, и мне повезло. Но лучше найти корень проблемы и исправить ее. Мне еще предстоит исследовать, но ошибка привела меня к перемещению файла.
Таким образом, dpkg --force-overwrite
– это хаотичное решение, которое здесь представлено в различных формах. Но dpkg-divert
(8) – это предусмотренный способ справиться с этой ситуацией.
Для Debian, Ubuntu и т.д. позвольте aptitude
справиться с этим за вас:
sudo apt update
sudo apt install aptitude
sudo aptitude install my_package_name
# Затем выберите необходимые параметры. Например, я выбираю Нет, Да, Да,
# чтобы выбрать понижение проблемного пакета. Затем он устанавливается и
# все работает!
Ответ или решение
Ошибка dpkg "пытается перезаписать файл, который также находится в…" возникает, когда имеются конфликты между пакетами, которые содержат один и тот же файл. Например, в вашем случае это файл /usr/share/java/jline.jar
, который уже установлен в пакете scala
, и попытка установить libjline-java
приводит к конфликту.
Чтобы решить эту проблему, следует следовать нескольким шагам:
1. Удаление конфликтующего пакета
Самый безопасный подход для решения проблемы — удалить конфликтующий пакет. В вашем случае это scala
. Выполните команду:
sudo dpkg -P scala
2. Попробуйте установить зависимые пакеты
После удаления конфликта повторите попытку установить необходимые пакеты:
sudo apt-get install -f
Данная команда попытается установить все отсутствующие зависимости.
3. Альтернативный способ — использование dpkg
Если вы по каким-то причинам не хотите или не можете удалить конфликтующий пакет, вы можете принудить dpkg
перезаписать файл. Однако учтите, что это может привести к нежелательным последствиям и нарушению работы программ, использующих конфликтующие пакеты. Если вы все же хотите попробовать этот способ, выполните команду:
sudo dpkg -i --force-overwrite /var/cache/apt/archives/libjline-java_1.0-1_all.deb
4. Завершение установки
Для проверки и завершения установки оставшихся зависимостей выполните:
sudo apt-get --fix-broken install
5. Используйте aptitude
для автоматического решения конфликта
aptitude
может предложить более умные решения для разрешения конфликтов между пакетами. Если он не установлен, установите его:
sudo apt update
sudo apt install aptitude
Затем попробуйте установить нужный пакет с помощью aptitude
:
sudo aptitude install <имя_пакета>
6. Изучение возможности использования dpkg-divert
Если проблема возникает часто и вы хотите установить несколько версий пакетов, возможно, будет полезно использовать dpkg-divert
, чтобы управлять конфликтами на более глубоком уровне. Эта команда позволяет указать, что один пакет должен игнорировать наличие файла из другого пакета.
Заключение
Если ни один из предложенных методов не помогает, стоит подумать о подаче отчета об ошибке разработчикам соответствующих пакетов. Включите в отчет информацию о конфликтующих пакетах и версии вашей системы. Это поможет разработчикам исправить проблему в будущих обновлениях.
Примечание
Обратите внимание, что выполнение команд с параметром --force-overwrite
требует осторожности, так как это может привести к нестабильной работе программного обеспечения на вашей системе. Всегда старайтесь находить наилучшее решение без применения насильственных действий.