- Вопрос или проблема
- Предупреждение: данный ответ опасен и может привести к сбою в системе (так как пакет будет установлен, но могут возникнуть новые проблемы, когда оба пакета будут пытаться использовать одну и ту же библиотеку/файл/программу). Используйте ответ Авинаша Раджа вместо этого. Также рассматривайте возможность отправки сообщения об ошибке для обоих конфликтующих пакетов.
- Ответ или решение
- Понимание проблемы
- Решение проблемы
- Примечание и дальнейшие меры
Вопрос или проблема
Например:
$ 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.
Предупреждение: данный ответ опасен и может привести к сбою в системе (так как пакет будет установлен, но могут возникнуть новые проблемы, когда оба пакета будут пытаться использовать одну и ту же библиотеку/файл/программу). Используйте ответ Авинаша Раджа вместо этого. Также рассматривайте возможность отправки сообщения об ошибке для обоих конфликтующих пакетов.
Вам нужно принудительно перезаписать файлы, вызывающие проблемы:
sudo dpkg -i --force-overwrite <file-path>
В вашем случае это будет:
sudo dpkg -i --force-overwrite /var/cache/apt/archives/libjline-java_1.0-1_all.deb
Проверьте, что все исправлено, запустив:
sudo apt-get --fix-broken install
Если у вас все еще есть проблемы, повторите первый шаг для любого из оставшихся dpkg: error processing (...)
.
Решение найдено на webupd8
Пожалуйста, не следуйте напрямую ответу danjjl, если столкнулись с такой ошибкой “попытка перезаписать”, вероятно, у вас есть конфликтующие пакеты, которые нужно сначала разрешить.
Немедленное решение проблемы — удалить конфликтующий пакет, который нежелателен, в данном случае scala
,
sudo dpkg -P scala
Следующим шагом рекомендуется отправить сообщение об ошибке соответствующим сопровождающим пакетам. Это обычно подразумевает добавление строки Conflict: package
в файл управления.
Также смотрите этот ответ для более детального объяснения об этой ошибке.
Команда danjjl работает с файлами .deb
. Я нашел, что эта команда работает с apt
/apt-get
:
sudo apt-get -o Dpkg::Options::="--force-overwrite" install <package-name>
Не уверен, что это глобальное решение, так как у меня была такая же проблема, но с файлом 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, известная как "trying to overwrite file, which is also in", указывает на конфликт между двумя пакетами, которые пытаются установить один и тот же файл. Эта проблема часто возникает в Debian-подобных системах, таких как Ubuntu, и может стать преградой для корректной работы системы и установки программного обеспечения.
Понимание проблемы
Когда вы устанавливаете или обновляете пакеты с помощью apt
, происходит распаковка файлов из архивов .deb
. Если два пакета содержат файл с одним и тем же именем и путем, возникнет конфликт. В вашем случае это связано с пакетом libjline-java
, который конфликтует с уже установленным пакетом scala
.
Решение проблемы
Шаг 1: Определение и оценка проблемы
-
Список конфликтующих пакетов: Убедитесь, какие именно пакеты вызывают столкновение. В вашем случае это
scala
иlibjline-java
. -
Понимание зависимости: Определите, нужен ли вам установочный пакет, который вызывает конфликт. Обычно, если вы знаете, какой пакет более важен для вас, легче принять решение о его дальнейшем использовании.
Шаг 2: Устранение конфликта
-
Удаление менее нужного пакета: Если
scala
вам не так нужен, просто удалите его командой:sudo dpkg -P scala
Затем повторите установку:
sudo apt-get install libjline-java
-
Принудительное перезаписывание файлов: Хотя это и рискованно, вы можете использовать
--force-overwrite
. Это сделает установку успешной, но может создать проблемы в дальнейшем:sudo dpkg -i --force-overwrite /var/cache/apt/archives/libjline-java_1.0-1_all.deb sudo apt-get --fix-broken install
Шаг 3: Альтернативные подходы
-
Использование
aptitude
: Эта утилита часто может более грамотно разрешать зависимости:sudo apt update sudo apt install aptitude sudo aptitude install libjline-java
-
Использование
dpkg-divert
: Это более профессиональный подход, чтобы избежать конфликта, выклонив существующий файл. Это требует определенных знаний и, как правило, используется опытными пользователями.
Примечание и дальнейшие меры
- Сообщите об ошибке: Обратитесь к менеджерам пакетов, чтобы они могли исправить этот конфликт в будущих версиях. Это может включать добавление строки
Conflicts:
в файл управления пакета. - Будьте осторожны с принудительными решениями: Принудительное перезаписывание может привести к нестабильности системы в будущем. Проверьте целостность вашего ПО после таких действий.
- Регулярные обновления: Поддержание вашей системы в актуальном состоянии может предотвратить подобные проблемы в будущем.
Используя такие подходы, вы сможете более эффективно решить возникшую проблему с конфликтами пакетов и минимизировать риск негативных последствий для системы.