Как проверить зависимости linux

Неудовлетворенные зависимости 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, которая ни с кем конфликтовать не будет.

Читайте также:  Windows firewall port blocking

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

Источник

Как в Linux узнать зависимости уже установленного (portable) приложения?

Как выяснить список всех необходимых пакетов / библиотек для работы конкретного portable приложения в Linux, если это приложение не имеет ни репозитория ни deb-пакета?

Читайте также:  Debugging windows forms application

Конкретно задача связана с FreeFileSync который ни хочет запускать диалог выбора папки в KDE Plasma на Kubuntu 14.04.05. Если установить весь xubuntu-desktop то начинает работать, если только xfce4 — не начинает. Ставить весь Xubuntu-desktop не хочу, из него начинаются проблемы в KDE (сбрасывается ряд настроек окружения, повисает видимое окно plasma-desktop в верхнем левом углу и соответствующий пункт в панели задач). В общем нужно как то выяснить, чего конкретно не хватает FreeFileSync. Чем это можно сделать? Либо просто скажите, что ему нужно. В Доках смотрел — не нашёл.

Читай в readme к продукту, там должны быть указаны зависимости (dependencies), либо если есть исходники читай в readme какие зависимости нужны для сборки, часть из них будет достаточна для работы, за вычетом компилятора.

Либо зависимости должны быть указаны разработчиком продукта на его сайте.

Если исходников нет, разработчик не указал, то можешь посмотреть зависимости к этому продукту в репозитории какого-либо дистрибутива Linux.

Запусти из консоли и почитай, на что ругается. Ещё попробуй ldd ./my_app и посмотри, чего не находит.

Источник

Как найти все зависимости deb-пакета?

Внутри частного облако (часть публичного облака) есть виртуальные машины с некой изменнёной провайдером облака Ubuntu 14 LTS.
По требованиям безопасности виртуалки не имеют доступа в Интернет. Все установки/настройки/обновления делаются из некого доверенного узла.

Задача:
Нужно устанавливать компоненты системы из сохраннёных пакетов: dpkg -i ./*.deb

Проблема заключается в том, что я не могу найти нормальный способ построить зависимости пакета в удобоваримом виде исключая те что я 100% знаю установленны, что бы их можно было скачать.

Например мы имеем некий нестандартный пакет rabbitmq-server _3.5.7-1 для которого:
# dpkg -I rabbitmq-server_3.5.7-1_all.deb

new debian package, version 2.0.
size 4222022 bytes: control archive=7435 bytes.
90 bytes, 3 lines conffiles
364 bytes, 11 lines control
20645 bytes, 198 lines md5sums
1895 bytes, 68 lines * postinst #!/bin/sh
1731 bytes, 70 lines * postrm #!/bin/sh
185 bytes, 7 lines * prerm #!/bin/sh
Package: rabbitmq-server
Version: 3.5.7-1
Architecture: all
Maintainer: RabbitMQ Team
Installed-Size: 4936
Depends: erlang-nox (>= 1:13.b.3) | esl-erlang, adduser, logrotate
Section: net
Priority: extra
Homepage: www.rabbitmq.com
Description: Multi-protocol messaging broker
RabbitMQ is an open source multi-protocol messaging broker.

Возьмём первую зависимость erlang-nox и внутри тестовой машины от провайтера облака я сделаю:
# apt-cache depends erlang-nox

erlang-nox
|Depends: erlang-base
Depends: erlang-base-hipe
Depends: erlang-asn1
Depends: erlang-corba
Depends: erlang-crypto
Depends: erlang-diameter
Depends: erlang-edoc
Depends: erlang-eldap
Depends: erlang-erl-docgen
Depends: erlang-eunit
Depends: erlang-ic
Depends: erlang-inets
Depends: erlang-mnesia
Depends: erlang-odbc
Depends: erlang-os-mon
Depends: erlang-parsetools
Depends: erlang-percept
Depends: erlang-public-key
Depends: erlang-runtime-tools
Depends: erlang-snmp
Depends: erlang-ssh
Depends: erlang-ssl
Depends: erlang-syntax-tools
Depends: erlang-tools
Depends: erlang-webtool
Depends: erlang-xmerl
Suggests: erlang
Suggests: erlang-manpages
Suggests: erlang-doc

Вот что показывает apt-rdepends erlang-nox:

Reading package lists. Done
Building dependency tree
Reading state information. Done
erlang-nox
Depends: erlang-asn1
Depends: erlang-base
Depends: erlang-base-hipe
Depends: erlang-corba
Depends: erlang-crypto
Depends: erlang-diameter
Depends: erlang-edoc
Depends: erlang-eldap
Depends: erlang-erl-docgen
Depends: erlang-eunit
Depends: erlang-ic
Depends: erlang-inets
Depends: erlang-mnesia
Depends: erlang-odbc
Depends: erlang-os-mon
Depends: erlang-parsetools
Depends: erlang-percept
Depends: erlang-public-key
Depends: erlang-runtime-tools
Depends: erlang-snmp
Depends: erlang-ssh
Depends: erlang-ssl
Depends: erlang-syntax-tools
Depends: erlang-tools
Depends: erlang-webtool
Depends: erlang-xmerl
erlang-asn1
Depends: erlang-base (= 1:16.b.3-dfsg-1ubuntu2)
Depends: erlang-base-hipe (= 1:16.b.3-dfsg-1ubuntu2)
Depends: libc6 (>= 2.14)
erlang-base
Depends: libc6 (>= 2.14)
Depends: libtinfo5
Depends: procps
Depends: zlib1g (>= 1:1.2.2)
libc6
Depends: libgcc1
libgcc1
Depends: gcc-4.9-base (= 4.9-20140406-0ubuntu1)
Depends: libc6 (>= 2.14)
PreDepends: multiarch-support
gcc-4.9-base
multiarch-support
Depends: libc6 (>= 2.3.6-2)
libtinfo5
Depends: libc6 (>= 2.15)
PreDepends: multiarch-support
procps
Depends: initscripts
Depends: libc6 (>= 2.15)
Depends: libncurses5 (>= 5.5-5

)
Depends: libncursesw5 (>= 5.6+20070908)
Depends: libprocps3
Depends: libtinfo5
Depends: lsb-base (>= 3.0-10)
initscripts
Depends: coreutils (>= 5.93)
Depends: debianutils (>= 4)
Depends: file-rc
Depends: libc6 (>= 2.4)
Depends: lsb-base (>= 3.2-14)
Depends: mount (>= 2.11x-1)
Depends: mountall (>= 2.28)
Depends: passwd
Depends: sysv-rc
Depends: sysvinit-utils (>= 2.86.ds1-64)
Depends: upstart

Читайте также:  Создать статический ip для windows

Источник

Как проверить зависимости пакета в Ubuntu 20.04

Главное меню » Ubuntu » Как проверить зависимости пакета в Ubuntu 20.04

При установке пакетов программного обеспечения в операционной системе Linux правильная работа некоторых пакетов зависит от других пакетов. Иногда они уже установлены в системе, но в других случаях они устанавливаются вместе с пакетом автоматически. Эти зависимые пакеты называются зависимостями пакетов.

Существует несколько подходов к получению сведений о зависимостях, например с помощью диспетчера пакетов apt, команды dpkg или установки инструмента.

Начнем с системы управления пакетами APT, чтобы получить зависимости пакета.

Как проверить зависимость пакета с помощью APT Show:

Выполните команду «apt show» с именем пакета, чтобы получить полную информацию о пакете.

Синтаксис использования этого подхода:

Давайте проверим, какой результат вы получите для пакета «Mozilla firefox» при запуске:

Как показано на изображении выше, пакет «firefox» зависит от различных библиотек. Менеджер пакетов APT играет ключевую роль в системе Linux, поскольку он автоматически устанавливает большинство зависимостей.

Как проверить информацию о зависимостях с помощью APT-Cache:

Если вам нужен ограниченный сценарий информации о зависимостях, воспользуйтесь командой «apt-cache».

Используйте указанный синтаксис:

Давайте возьмем пример для лучшего понимания. Проверьте информацию о зависимости пакета «mozilla firefox»:

Взгляните на другой пример!

Чтобы получить подробную информацию о зависимостях PHP :

Как проверить зависимости файла пакета «.deb»:

Если у вас есть файл.deb для установки программного пакета, то команда «apt» работать не будет.

Для этого вы можете запустить команду «dpkg» с опцией «-I» или «–info», чтобы получить подробную информацию. Итак, синтаксис будет таким:

Предположим, у меня есть пакет Teamviewer «.deb» на моем компьютере с Ubuntu. Чтобы получить подробную информацию о его зависимостях, выполните указанную команду:

Вышеупомянутый раздел был о том, как получить подробную информацию о зависимостях пакетов с помощью команд apt и dpkg.

Но если вы предпочитаете инструмент, следуйте приведенному ниже подходу:

Как проверить зависимости с помощью инструмента «apt-rdepends»:

Существует множество инструментов для проверки зависимостей пакетов, и вы можете запутаться, какой инструмент лучше всего установить. Кроме того, вы не можете рисковать, устанавливая какую-либо зависимость, которая влияет на работающую систему.

В apt-rdepends является подлинным инструментом, который помогает в список вниз все зависимости пакет программного обеспечения имеет. Это не встроенный инструмент; чтобы получить его, используйте команду, указанную ниже:

Синтаксис apt-rdepends прост:

Предположим, вам нужно выяснить зависимости PHP. Для этого выполните данную команду, чтобы получить желаемый результат:

Точно так же, если мы возьмем другой пример:

Чтобы изменить это, посмотрите, какие другие пакеты зависят от конкретного программного пакета, используйте параметр «-r».

Например, чтобы проверить, что список пакетов зависит от пакета vlc, используйте следующую команду:

Заключение:

В описании было показано, как проверить зависимости пакета в Ubuntu 20.04.

Мы нашли различные способы получения зависимостей пакетов с помощью командной строки. Система управления пакетами APT играет важную роль, поскольку она автоматически устанавливает большинство зависимостей. Но если какое-либо программное обеспечение было загружено через пакет .deb, то предлагается команда «dpkg».

Инструмент «apt-rdepends» – альтернативный метод проверки зависимостей. Используя этот инструмент, вы можете получить список подробных зависимостей пакетов и найти его обратную сторону.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Источник

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