При установке пакетов из официальных или сторонних репозиториев вы можете столкнуться с проблемой неудовлетворенные зависимости Ubuntu. Чтобы понять причину возникновения этой ошибки сначала надо разобраться как работают пакетные менеджеры в Linux. Здесь всё компоненты системы, библиотеки и сами программы разделены на пакеты. И если какой-либо программе нужна определенная библиотека, она не поставляется вместе с этой библиотекой, а ожидает, что эта библиотека будет уже установлена в системе.
Установкой библиотек и других компонентов занимается пакетный менеджер, отсюда у каждой программы есть ряд зависимостей которые должны быть удовлетворены чтобы программа смогла заработать.
Содержание статьи
Неудовлетворенные зависимости в Ubuntu
По английски наша ошибка ещё может писаться как the following packages have unmet dependencies. Она может возникнуть в нескольких случаях, давайте сначала рассмотрим основные из них:
- Вы используете dpkg для установки deb пакета. Эта утилита не занимается установкой зависимостей. Вместо неё надо использовать apt install или потом просто установить недостающие зависимости с помощью apt, как это делается описано ниже;
- Вы используете старую версию дистрибутива - в старых версиях могло что-то изменится в репозитории и часть пакетов была удалена или переименована. С LTS версиями такое случается редко, но с обычными релизами вполне может произойти;
- Вы пытаетесь установить программу не от своего дистрибутива - несмотря на родство всех дистрибутивов семейства Debian, не желательно использовать программы из других дистрибутивов, так, как они могут требовать пакеты, которые в этом дистрибутиве называются по другому;
- У вас установлен устаревший пакет, который не позволяет обновить некоторые зависимости - случается, когда в системе уже есть какой-нибудь пакет старый пакет, требующий старую версию библиотеки, а новая программа, которую вы собираетесь установить уже хочет более новую версию и не позволяет её обновить. Эта проблема не очень типична для Ubuntu, так как здесь большинство версий программ в репозиториях заморожено, но часто встречается при использовании дистрибутивов с системой роллинг релизов.
1. Обновление и исправление зависимостей
Самое первое что надо сделать при проблемах с зависимостями, это хоть как-нибудь их исправить, потому что иначе пакетный менеджер работать не будет. В некоторых случаях, если списки репозиториев давно не обновлялись их обновление может помочь:
sudo apt update
Далее выполните:
sudo apt install -f
Эта команда установит зависимости, которые есть во официальных репозиториях (поможет при использовании dpkg) и если это не решит проблему, то удалит пакеты, для которых зависимости удовлетворить не удалось. Также после этого можно выполнить:
sudo dpkg --configure -a
А потом повторить предыдущую команду. Следующим шагом можно попробовать обновить систему до самой последней версии. Это тоже может помочь если вы пытаетесь установить пакет из официальных репозиториев и при этом возникает проблема с зависимостями:
sudo apt upgrade
sudo apt full-upgrade
Если причиной вашей проблемы стал устаревший пакет надо его удалить или придумать для него замену. Например, если у вас установлена старая версия php, могут возникнуть проблемы с установкой новой версии, потому что будут конфликтовать версии библиотек, от которых зависит программа. Однако можно найти PPA со специально подготовленной старой версией php, которая ни с кем конфликтовать не будет.
Также подобная проблема может возникать при использовании PPA. Эти репозитории поддерживаются сторонними разработчиками, и могут содержать проблемы, если это ваш вариант, то, лучше поискать альтернативные способы установки необходимой программы.
2. Установка зависимостей
Дальше установка зависимостей Ubuntu. Следующий этап, если вы скачали пакет в интернете, например, от другого дистрибутива с таким же пакетным менеджером, можно попытаться установить таким же способом библиотеки, которые он просит. Это может сработать особенно, если вы пытаетесь установить программу из старой версии дистрибутива. Пакеты можно искать прямо в google или на сайте pkgs.org:
Здесь собрано огромное количество пакетов от различных дистрибутивов, в том числе и от Ubuntu и Debian. Просто выберите нужную версию пакета для вашей архитектуры. Скачать файл можно чуть ниже на странице пакета:
После загрузки пакета с сайта его можно установить через тот же dpkg:
sudo dpkg -i ffmpegthumbs_19.04.3-0ubuntu1~ubuntu19.04~ppa1_amd64.deb
После этого можно снова попробовать установить свой пакет. Но устанавливаемая библиотека может потребовать свои неудовлетворенные зависимости, а та ещё свои, поэтому тянуть программы из других дистрибутивов таким образом не рационально.
3. Удаление зависимостей
Если у вас есть скачанный пакет, и он говорит, что он зависит о версии библиотеки, которой в вашей системе нет, но вы уверены, что ему подойдет и другая версия, то можно просто убрать эту зависимость из пакета. Но для этого надо его перепаковать. Такая ситуация была когда-то с популярным менеджером Viber. Рассмотрим на примере того же вайбера.
Сначала распакуйте пакет в подпапку package командой:
dpkg-deb -x ./viber.deb package
Затем туда же извлеките метаданные пакета:
dpkg-deb --control viber.deb package/DEBIAN
В файле package/DEBIAN есть строчка Depends, где перечислены все библиотеки, от которых зависит пакет и их версии. Просто удалите проблемную библиотеку или измените её версию на ту, которая есть в системе.
vi package/DEBIAN
Затем останется только собрать пакет обратно:
dpkg -b viber package.deb
И можете устанавливать, теперь с зависимостями будет всё верно:
sudo dpkg -i package.deb
Но такое исправление зависимостей Ubuntu следует использовать только для пакетов, которые точно неверно собраны. Важно понимать, что пакетный менеджер вам не враг, а помощник, и то что вы отключите зависимости и установите программу ещё не значит, что она потом будет работать.
4. Распаковать пакет
Следующий способ подойдет, если программа которую вы устанавливаете это библиотека, например, веб-драйвер для Selenium. Пакет можно распаковать и просто разложить исполняемые файлы из него по файловой системе в соответствии с папками внутри архива. Только желательно использовать не корневую файловую систему, а каталог /usr/local/ он как раз создан для этих целей.
5. Использовать snap пакеты
Самый простой способ обойти проблемы с зависимостями - использовать новый формат установщика программ, в котором программа содержит все зависимости в установочном архиве и они устанавливаются аналогично Windows в одну папку. Установка такой программы будет дольше, но зато такие там вы точно не получите проблем с зависимостями Ubuntu. Всё программы, которые поддерживают этот формат есть в центре приложений Ubuntu:
Выводы
В этой статье мы разобрали как исправить проблемы с зависимостями Ubuntu. Некоторые из способов довольно сложные, а другие проще. Но сама эта система, согласно которого пакеты зависят от других, а те ещё от других очень сложная и не удивительно, что время от времени в ней возникают ошибки. А какие способы решения этой проблемы вы знаете? Напишите в комментариях?
Полезная статья
> sudo apt install -f
Я вот в ман страницах убунты не наблюдаю описания ключа "-f" для команды install. Гуглёжь первых страниц посиска тоже результата не принёс.
Если можно - тыкнете, плз, в каком мане описан этот ключ.
Его можно найти в man странице для apt-get:
Огромное, человеческое спасибо Админу. За год спокойно перешел на Linux и Windows даже не вспоминаю. Люди для людей.
Рецепт один, использовать адекватные дистрибутивы, желательно из схемы rolling-release, что бы не переустанавливать систему и не ломать её при обновлении с версии к версии.
Меня полностью устраивает arch-linux, да, порог вхождения и установки достаточно высок (но намного ниже чем у gentoo). Конструктор, из которого можно сделать всё что угодно, он не прибит гвоздями к system-d или одной конкретной DE - позволяет самому выбрать базу, инит, ДЕ. Вот где настоящая свобода. Не требует танцев с USE-флагами и часами компиляции.
Софт поновее чем у gentoo, пакетов море, есть AUR, вполне стабильный и чистый. Косяков с зависимостями уже года три не помню, когда-то сталкивался с чем-то, но уже забыл что именно было...
Однажды установленный пакет: драйвер для принтера в Linux не функционировал по тому, что были не решённые зависимости, спасибо на форуме Пользователь это определил и для исправления велел скачать файл с репозитория, Устанавливал командой: sudo apt install Имя_пакета.
Мне помогло:
dpkg-divert --list
sudo dpkg-divert --remove /путь
При попытке что либо установить он пишет "Смена носителя: вставьте диск с меткой ... в устройство /media/cdrom/ и нажать enter." При это у меня на нойте даж cdroma нет.
привет всем. господа профессионалы помогите пожалуйста. я перепробовал многое что написано в интернете. но постоянно выходит ошибка.
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-5.15.0-50-generic
Found initrd image: /boot/initrd.img-5.15.0-50-generic
Found linux image: /boot/vmlinuz-5.15.0-48-generic
Found initrd image: /boot/initrd.img-5.15.0-48-generic
Found linux image: /boot/vmlinuz-5.15.0-46-generic
Found initrd image: /boot/initrd.img-5.15.0-46-generic
Found linux image: /boot/vmlinuz-5.15.0-43-generic
Found initrd image: /boot/initrd.img-5.15.0-43-generic
/etc/grub.d/bin/grubcfg_proxy: error while loading shared libraries: libcrypto.so.1.1: cannot open shared object file: No such fil
e or directory
run-parts: /etc/kernel/postrm.d/zz-update-grub exited with return code 127
dpkg: Fehler beim Bearbeiten des Paketes linux-image-unsigned-5.15.0-47-generic (--remove):
»installiertes linux-image-unsigned-5.15.0-47-generic-Skript des Paketes post-removal«-Unterprozess gab den Fehlerwert 1 zurück
dpkg: Zu viele Fehler, Abbruch
Fehler traten auf beim Bearbeiten von:
linux-image-unsigned-5.15.0-47-generic
Bearbeitung wurde angehalten, da zu viele Fehler auftraten.
E: Sub-process /usr/bin/dpkg returned an error code (1)
nix@nix:~$
Теперь такую ошибку выдаёт.
помогите кто знает исправить пожалуйста.
nix@nix:~$ sudo dmesg | grep error
[sudo] Passwort für nix:
[ 2.353876] EXT4-fs (sda2): re-mounted. Opts: errors=remount-ro. Quota mode: none.
nix@nix:~$
теперь вот что пишет . помогите что делать. спасибо.
/etc/grub.d/bin/grubcfg_proxy: error while loading shared libraries: libcrypto.so.1.1: cannot open shared object file: No such file or directory
run-parts: /etc/kernel/postrm.d/zz-update-grub exited with return code 127
dpkg: Fehler beim Bearbeiten des Paketes linux-image-unsigned-5.15.0-47-generic (--remove):
»installiertes linux-image-unsigned-5.15.0-47-generic-Skript des Paketes post-removal«-Unterprozess gab den Fehlerwert 1 zurück
dpkg: Zu viele Fehler, Abbruch
Fehler traten auf beim Bearbeiten von:
linux-image-unsigned-5.15.0-47-generic
Bearbeitung wurde angehalten, da zu viele Fehler auftraten.
E: Sub-process /usr/bin/dpkg returned an error code (1)
nix@nix:~$
Какая же параша линукс, только и делаешь что гуглишь всякую херню
Толи дело в винде, накачал себе троянов со скрытыми майнерами и сидишь довольный
каждую неделю да что-то слетает в ваших roling-release, и жди когда обновят
Зачем такой пердолинг в линуксе!