Главная >> Инструкции >> Неудовлетворенные зависимости Ubuntu

Неудовлетворенные зависимости Ubuntu

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

Оцените статью

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (12 оценок, среднее: 5,00 из 5)
Загрузка...
Creative Commons License
Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна .

12 комментариев к “Неудовлетворенные зависимости Ubuntu”

  1. > sudo apt install -f
    Я вот в ман страницах убунты не наблюдаю описания ключа "-f" для команды install. Гуглёжь первых страниц посиска тоже результата не принёс.
    Если можно - тыкнете, плз, в каком мане описан этот ключ.

    Ответить
    • Его можно найти в man странице для apt-get:

      -f, --fix-broken
      Fix; attempt to correct a system with broken dependencies in place.
      This option, when used with install/remove, can omit any packages
      to permit APT to deduce a likely solution. If packages are
      specified, these have to completely correct the problem. The option
      is sometimes necessary when running APT for the first time; APT
      itself does not allow broken package dependencies to exist on a
      system. It is possible that a system's dependency structure can be
      so corrupt as to require manual intervention (which usually means
      using dpkg --remove to eliminate some of the offending packages).
      Use of this option together with -m may produce an error in some
      situations. Configuration Item: APT::Get::Fix-Broken.

      Ответить
  2. Рецепт один, использовать адекватные дистрибутивы, желательно из схемы rolling-release, что бы не переустанавливать систему и не ломать её при обновлении с версии к версии.

    Меня полностью устраивает arch-linux, да, порог вхождения и установки достаточно высок (но намного ниже чем у gentoo). Конструктор, из которого можно сделать всё что угодно, он не прибит гвоздями к system-d или одной конкретной DE - позволяет самому выбрать базу, инит, ДЕ. Вот где настоящая свобода. Не требует танцев с USE-флагами и часами компиляции.
    Софт поновее чем у gentoo, пакетов море, есть AUR, вполне стабильный и чистый. Косяков с зависимостями уже года три не помню, когда-то сталкивался с чем-то, но уже забыл что именно было...

    Ответить
  3. Однажды установленный пакет: драйвер для принтера в Linux не функционировал по тому, что были не решённые зависимости, спасибо на форуме Пользователь это определил и для исправления велел скачать файл с репозитория, Устанавливал командой: sudo apt install Имя_пакета.

    Ответить
  4. При попытке что либо установить он пишет "Смена носителя: вставьте диск с меткой ... в устройство /media/cdrom/ и нажать enter." При это у меня на нойте даж cdroma нет.

    Ответить
  5. привет всем. господа профессионалы помогите пожалуйста. я перепробовал многое что написано в интернете. но постоянно выходит ошибка.
    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:~$

    Ответить
  6. Теперь такую ошибку выдаёт.
    помогите кто знает исправить пожалуйста.
    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:~$

    Ответить
  7. теперь вот что пишет . помогите что делать. спасибо.
    /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:~$

    Ответить

Оставьте комментарий