- Неудовлетворенные зависимости Ubuntu
- Неудовлетворенные зависимости в Ubuntu
- 1. Обновление и исправление зависимостей
- 2. Установка зависимостей
- 3. Удаление зависимостей
- 4. Распаковать пакет
- 5. Использовать snap пакеты
- Выводы
- Как пофиксить ошибку?
- How do I resolve `The following packages have unmet dependencies`
- 12 Answers 12
Неудовлетворенные зависимости 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
После этого можно снова попробовать установить свой пакет. Но устанавливаемая библиотека может потребовать свои неудовлетворенные зависимости, а та ещё свои, поэтому тянуть программы из других дистрибутивов таким образом не рационально.
3. Удаление зависимостей
Если у вас есть скачанный пакет, и он говорит, что он зависит о версии библиотеки, которой в вашей системе нет, но вы уверены, что ему подойдет и другая версия, то можно просто убрать эту зависимость из пакета. Но для этого надо его перепаковать. Такая ситуация была когда-то с популярным менеджером Viber. Рассмотрим на примере того же вайбера.
Сначала распакуйте пакет в подпапку package командой:
dpkg-deb -x ./viber.deb package
Затем туда же извлеките метаданные пакета:
dpkg-deb —control viber.deb package/DEBIAN
В файле package/DEBIAN есть строчка Depends, где перечислены все библиотеки, от которых зависит пакет и их версии. Просто удалите проблемную библиотеку или измените её версию на ту, которая есть в системе.
Затем останется только собрать пакет обратно:
dpkg -b viber package.deb
И можете устанавливать, теперь с зависимостями будет всё верно:
sudo dpkg -i package.deb
Но такое исправление зависимостей Ubuntu следует использовать только для пакетов, которые точно неверно собраны. Важно понимать, что пакетный менеджер вам не враг, а помощник, и то что вы отключите зависимости и установите программу ещё не значит, что она потом будет работать.
4. Распаковать пакет
Следующий способ подойдет, если программа которую вы устанавливаете это библиотека, например, веб-драйвер для Selenium. Пакет можно распаковать и просто разложить исполняемые файлы из него по файловой системе в соответствии с папками внутри архива. Только желательно использовать не корневую файловую систему, а каталог /usr/local/ он как раз создан для этих целей.
5. Использовать snap пакеты
Самый простой способ обойти проблемы с зависимостями — использовать новый формат установщика программ, в котором программа содержит все зависимости в установочном архиве и они устанавливаются аналогично Windows в одну папку. Установка такой программы будет дольше, но зато такие там вы точно не получите проблем с зависимостями Ubuntu. Всё программы, которые поддерживают этот формат есть в центре приложений Ubuntu:
Выводы
В этой статье мы разобрали как исправить проблемы с зависимостями Ubuntu. Некоторые из способов довольно сложные, а другие проще. Но сама эта система, согласно которого пакеты зависят от других, а те ещё от других очень сложная и не удивительно, что время от времени в ней возникают ошибки. А какие способы решения этой проблемы вы знаете? Напишите в комментариях?
Источник
Как пофиксить ошибку?
Всем привет, недавно зашёл в кали и сразу проблемы. пишу apt-get install ftp пишет ошибку
E: Unmet dependencies. Try ‘apt —fix-broken install’ with no packages (or specify a solution).
пытаюсь фиксить её, пишет
E: Sub-process /usr/bin/dpkg returned an error code (1)
пытаюсь фиксить эту ошибку и опять
E: Unmet dependencies. Try ‘apt —fix-broken install’ with no packages (or specify a solution).
Как исправить? вот полный лог
Building dependency tree
Reading state information. Done
You might want to run ‘apt —fix-broken install’ to correct these.
The following packages have unmet dependencies:
bsdmainutils : Depends: calendar but it is not going to be installed
Depends: ncal but it is not going to be installed
libc-bin : Depends: libc6 ( Цитата
Приветствую! Видно, что ошибки меняются, например, последняя ошибка из-за того, что обновление пакета не завершено.
Поэтому выполните один раз команду
А затем несколько раз команду
пока сообщения об ошибках не станут одинаковыми — или пока проблема не решится. Затем напишите, на какой ошибке застряли.
# sudo apt —fix-broken install
Reading package lists. Done
Building dependency tree
Reading state information. Done
Correcting dependencies. Done
The following additional packages will be installed:
calendar cpp cpp-10 gcc-10-base libc-bin libgcc-s1 libisl22 libmpc3 libmpfr6 libstdc++6 ncal
Suggested packages:
cpp-doc gcc-10-locales
Recommended packages:
manpages
The following NEW packages will be installed:
calendar cpp cpp-10 libisl22 libmpc3 libmpfr6 ncal
The following packages will be upgraded:
gcc-10-base libc-bin libgcc-s1 libstdc++6
4 upgraded, 7 newly installed, 0 to remove and 74 not upgraded.
3 not fully installed or removed.
Need to get 0 B/12.4 MB of archives.
After this operation, 35.2 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
Setting up libc6:amd64 (2.31-2) .
Checking for services that may need to be restarted.
Checking init scripts.
Nothing to restart.
sleep: cannot read realtime clock: Invalid argument
dpkg: error processing package libc6:amd64 (—configure):
installed libc6:amd64 package post-installation script subprocess returned error exit status 1
Errors were encountered while processing:
libc6:amd64
E: Sub-process /usr/bin/dpkg returned an error code (1)
root@MSI:
# sudo apt —fix-broken install
Reading package lists. Done
Building dependency tree
Reading state information. Done
Correcting dependencies. Done
The following additional packages will be installed:
calendar cpp cpp-10 gcc-10-base libc-bin libgcc-s1 libisl22 libmpc3 libmpfr6 libstdc++6 ncal
Suggested packages:
cpp-doc gcc-10-locales
Recommended packages:
manpages
The following NEW packages will be installed:
calendar cpp cpp-10 libisl22 libmpc3 libmpfr6 ncal
The following packages will be upgraded:
gcc-10-base libc-bin libgcc-s1 libstdc++6
4 upgraded, 7 newly installed, 0 to remove and 74 not upgraded.
3 not fully installed or removed.
Need to get 0 B/12.4 MB of archives.
After this operation, 35.2 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
Setting up libc6:amd64 (2.31-2) .
Checking for services that may need to be restarted.
Checking init scripts.
Nothing to restart.
sleep: cannot read realtime clock: Invalid argument
dpkg: error processing package libc6:amd64 (—configure):
installed libc6:amd64 package post-installation script subprocess returned error exit status 1
Errors were encountered while processing:
libc6:amd64
E: Sub-process /usr/bin/dpkg returned an error code (1)
Эта «красота» происходит в WSL? Если да, то нужно обязательно это указывать.
Попробуйте для исправления ошибки выполнить:
Почему нужно указывать, что это WSL? Возможно вы не понимаете, что такое WSL, а ведь это вообще не Linux. Это я объясняю в самом начале статьи « Как установить Kali Linux с Win-KeX (графический интерфейс) в WSL2 (подсистему Windows для Linux) ».
Там же я говорю, что вы столкнётесь с самыми необычными ошибками. Самое правильное, что можно сделать, забыть про WSL и пользоваться полноценной виртуальной машиной, например, VirtualBox . Иначе так и будете решать бессмысленные проблемы. «Сам себе злобный Буратино».
Источник
How do I resolve `The following packages have unmet dependencies`
I was using this script to install basic software, but had to interrupt because of slow internet speed. Now when I hit $ sudo apt-get install npm , I get following error
12 Answers 12
If sudo apt-get install -f
doesn’t work, try aptitude:
Aptitude will try to resolve the problem.
As an example, in my case, I still receive some error when try to install libcurl4-openssl-dev :
So i try aptitude, it turns out I have to downgrade some packages.
First of all try this
If error still persists then do this
Afterwards try this again:
But if it still couldn’t resolve issues check for the dependencies using sudo dpkg —configure -a and remove them one-by-one . Let’s say dependencies are on npm then go for this ,
Then go to /etc/apt/sources.list.d and remove any node list if you have. Then do a
Then check for the dependencies problem again using sudo dpkg —configure -a and if it’s all clear then you are done . Later on install npm again using this
Then install the Node.js package.
The answer above will work for general cases also(for dependencies on other packages like django ,etc) just after first two processes use the same process for the package you are facing dependency with.
The command to have Ubuntu fix unmet dependencies and broken packages is
from the man page:
-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 dselect(1) or dpkg —remove to eliminate some of the offending packages)
Ubuntu will try to fix itself when you run the command. When it completes, you can test if it worked by running the command again, and you should receive output similar to:
Reading package lists. Done Building dependency tree Reading state information. Done 0 upgraded, 0 newly installed, 0 to remove and 2 not upgraded.
Источник