как узнать зависимости deb пакета
Как проверить зависимости пакета в 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-rdepends» – альтернативный метод проверки зависимостей. Используя этот инструмент, вы можете получить список подробных зависимостей пакетов и найти его обратную сторону.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Как найти все зависимости deb-пакета?
Внутри частного облако (часть публичного облака) есть виртуальные машины с некой изменнёной провайдером облака Ubuntu 14 LTS.
По требованиям безопасности виртуалки не имеют доступа в Интернет. Все установки/настройки/обновления делаются из некого доверенного узла.
Проблема заключается в том, что я не могу найти нормальный способ построить зависимости пакета в удобоваримом виде исключая те что я 100% знаю установленны, что бы их можно было скачать.
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
Записки IT специалиста
Технический блог специалистов ООО»Интерфейс»
Умение устанавливать, обновлять и удалять программное обеспечение относится к важнейшим навыкам работы с любой операционной системой. Поэтому изучение данного вопроса первостепенная задача для любого начинающего пользователя Linux, сразу после того, как он немного осмотрелся в системе. К сожалению, нет единого способа управления ПО, подходящего для всех дистрибутивов, разные семейства предполагают различные подходы, хотя общие принципы во многом совпадают. В данном материале мы будем разбирать вопрос применительно к системам основанным на Debian и Ubuntu.
Пакеты и репозитории
Несмотря на разные форматы, общие принципы построения и управления пакетами в различных Linux системах совпадают, поэтому если вы овладеете приемами работы с одним форматом пакетов, то переучиться на другой не составит особого труда.
Кроме того, при разработке свободного ПО широко используются наработки других проектов, действительно, зачем повторно изобретать велосипед, если нужные функции уже есть в библиотеке другого проекта. Достаточно просто указать нужный пакет в зависимостях, при этом скачивать весь сторонний проект также будет не нужно, достаточно только необходимых пакетов.
Кроме того, установка пакетов в обход репозитория может быть небезопасна и считается правилом дурного тона, хотя и применяется, в основном для коммерческого ПО. Наличие репозиториев также позволяет централизованно обновлять пакеты, достаточно сравнить текущие версии пакетов с версиями в репозитории и скачать нужные обновления. Это удобно, так как одновременно обновляется и система и все установленное в нее ПО.
Кроме того, собственные репозитории существуют и у разработчиков. Поэтому, если вы хотите получать самую свежую версию нужного вам продукта, не дожидаясь пока ее включат в дистрибутив, то можете подключить репозиторий разработчика и обновлять его оттуда.
Как правило типичный дистрибутив на базе Debian имеет четыре основных репозитория:
Каждый репозиторий состоит из нескольких разделов, в Debian это:
В Ubuntu разделы немного иные:
Список подключенных репозиториев хранится в /etc/apt/sources.list, ниже показано содержимое этих файлов в Debian 10 (слева) и Ubuntu 18.04 (справа).
В Debian все достаточно лаконично, подключен только раздел main трех репозиториев Base, Security updates и Stable updates, если вам нужны иные разделы, то их следует подключить самостоятельно, добавив через пробел в нужную строку.
В Ubuntu более развернутый список репозиториев, он полностью не уместился на скриншот, но для понимания структуры записей приведенного фрагмента хватает. Сверху вниз подключены Base и Security updates для поддерживаемых компанией разделов, затем они же вместе для свободного и несвободного ПО поддерживаемого сообществом, а вот Stable backports прописан для всех веток одновременно, еще ниже (за пределами экрана на скриншоте) подключены Security updates и специальный партнерский репозиторий для пакетов партнеров компании Canonical.
Типичная запись репозитория выглядит как строка со следующей структурой:
Адреса репозиториев сохраняются постоянными, отличаясь только именами выпуска, поэтому если вам нужно обновить выпуск, скажем с Debian 9 на Debian 10, то вам просто потребуется заменить везде stretch (имя девятого выпуска) на buster.
Также в Debian можно использовать вместо имен классы выпусков:
Но на практике это не используется, так как при выходе нового релиза вы получите его автоматическое обновление, что в большинстве случаев неприемлемо. Хотя если вы энтузиаст и хотите всегда быть на переднем крае прогресса, то можете везде прописать testing, получив аналог популярных ныне rolling release дистрибутивов, которые не имеют закрепленной версии и всегда предоставляют наиболее свежий срез пакетов, зачастую ценой стабильности.
Для добавления собственных источников пакетов предназначена директория /etc/apt/sources.list.d/ в которой следует располагать файлы с адресами источников и обязательным расширением .list. Хотя их можно прописать и в основной файл, но это считается дурным тоном.
Низкоуровневый менеджер пакетов Dpkg
Данная утилита обычно используется для установки пакетов, скачанных вручную, например, коммерческого ПО. Синтаксис ее довольно прост и легко запоминается. Прежде всего полезно получить информацию о пакете, чтобы узнать его зависимости и возможные конфликты, для этого выполните:
Для установки просто выполните:
Но помните, что dpkg не умеет разрешать зависимости и вы должны будете сделать это вручную, либо скачать все необходимые пакеты и установить их в нужном порядке, это можно поручить dpkg, запустив его с маской в имени пакетов:
Такая конструкция установит все находящиеся в данном расположении deb-пакеты, так что будьте внимательны, либо используйте более узкие маски.
Чтобы получить сведения о всех доступных и установленных пакетах используется ключ -l, но он выведет список всех пакетов, поэтому следует использовать его с маской, например, так:
Так как мы задали имя пакета без подстановочных символов, то информация будет выведена только при полном совпадении заданного имени с именем пакета. Если мы хотим получить больше информации, то можем сделать так:
Теперь мы видим больше пакетов, как установленных в системе, так и доступных в репозитории. Но это не все пакеты, относящиеся к gimp, так как наша маска предписывает искать пакеты, которые начинаются на gimp и игнорирует иные варианты. Поэтому, если вы не уверены, что правильно задали маску, можно пойти другим путем, отдав вывод dpkg команде grep, которая найдет все нужные вхождения.
В этом случае вы получите список только установленных, либо удаленных, но имеющих оставшиеся части (например, конфигурационные файлы) пакетов, но при этом будут найдены все вхождения указанной строки, даже в середине имени, в данном случае мы обнаружили ранее не найденную библиотеку libgimp2.0
Для удаления пакета используйте:
Обратите внимание, что здесь мы указываем не имя deb-файла, а имя установленного пакета, узнать его можно способом, представленным выше. Часто после удаления пакета от него остаются конфигурационные файлы и иные данные, полностью очистить их можно командой:
Но будьте внимательны, при этой операции могут быть удалены пользовательские данные, хранившиеся в стандартных расположениях. Это актуально для таких видов программ, как веб-сервера или СУБД.
На этом мы закончим знакомство с dpkg, ограничившись наиболее часто необходимыми в повседневной деятельности командами, а сами перейдем к более высокоуровневым инструментам.
Улучшенный инструмент для работы с пакетами APT и команды apt и apt-get
Настоящим пакетным менеджером в Debain является APT (Advanced Package Tool, Улучшенный инструмент для работы с пакетами), который умеет работать с репозиториями, разрешать зависимости и взаимодействовать с dpkg, которая, собственно, и занимается установкой пакетов.
APT имеет два интерфейса командной строки: apt-get и более новый apt. Их синтаксис и возможности во многом схожи, и мы будем практически всегда использовать последний, кроме отдельных случаев, когда требуемые возможности поддерживает только apt-get.
Списки пакетов представляют собой простые текстовые файлы с перечнем пакетов в репозитории, данными о пакете, его зависимостях и его расположении в структуре репозитория, один из таких списков открыт на скриншоте выше.
APT всегда работает с локальным кешем списков, поэтому перед любыми действиями с пакетным менеджером следует обновить списки в кеше. Это можно сделать командой, которая должна быть широко известна нашим читателям:
Команда проверяет версии списков в репозитории и при необходимости скачивает их новые версии, после чего анализирует список установленных пакетов и сообщает о доступных обновлениях, увидеть список пакетов, для которых доступны обновления можно командой:
Установить обновления можно командой:
Это безопасный способ обновления, при котором обновляются только установленные пакеты и не происходит установки новых пакетов, если они затрагивают текущие версии, также не удаляются убранные из репозитория пакеты. Если же вы хотите установить самые последние версии пакетов, то следует воспользоваться иной командой:
Следует понимать разницу в работе этих команд, потому что во многих случаях результат их работы оказывается одинаковым и кажется, что разницы между ними нет. Например, в ситуации, показанной на скриншоте выше обе команды отработают одинаково.
Обычные обновления следует выполнять командой upgrade, тогда как dist-upgrade следует использовать для обновления дистрибутива, в том числе и на минорные версии в составе текущего выпуска.
Для установки пакетов следует использовать команду:
Если нужно установить несколько пакетов, то их следует перечислить через пробел. Система проанализирует изменения и либо выполнит установку, либо попросит дополнительного подтверждения, особенно если нужно установить большое количество новых пакетов по зависимостям.
В целом APT хорошо знает свое дело, но мы все равно советуем обращать внимание на состав добавляемых и, особенно, удаляемых пакетов. Также не будет лишним изучить список предлагаемых пакетов, там вы можете найти много интересного и полезного, что позволит расширить возможности устанавливаемого ПО и о чем вы могли даже не догадываться.
Для удаления пакета используйте:
Это удалит сам пакет, но оставит его конфигурационные файлы (если они были изменены) и прочие данные. Для полного удаления пакета со всеми его данными используйте другую команду:
Но будьте внимательны, так как эта команда удалит все данные пакета, в том числе и добавленные пользователем в стандартные расположения, данные, находящиеся в домашних директориях пользователей при этом удалены не будут.
Дополнительно остановимся на таком виде пакетов, как пакеты установленные автоматически. Это пакеты, которые были установлены по зависимостям иных пакетов и после удаления или обновления последних могут более никем не использоваться. APT отслеживает такие пакеты и сообщает о них пользователю.
Удалить их можно командой:
Как можно заметить, APT достаточно дружелюбен к пользователю, постоянно подсказывая ему необходимые команды, что в очередной раз развеивает миф о сложности администрирования Linux, особенно в режиме командной строки.
Также иногда может потребоваться возможность очистить кеш скачанных пакетов, скажем при недостатке места на диске, это можно сделать, введя:
Эта команда полностью очистит кеш, также можно использовать более мягкую очистку с помощью apt-get, который дает возможность удалить из кеша только те пакеты, которые на текущий момент отсутствуют в репозитории (были заменены новыми версиями или удалены):
Затронем еще один интересный момент, допустим вы в своих экспериментах удалили или еще как-либо повредили входящие в состав пакета файлы, но система считает, что пакет установлен и отказывается устанавливать его повторно. Но можно всегда переустановить пакет:
Также иногда бывает нужно проверить что произойдет при установке пакета без его установки, особенно если у нас есть подозрения, что мы можем что-то сломать в системе. Для этого запустите команду установки с ключом -s:
Система смоделирует все необходимые действия и покажет вам результат, после чего вы сможете принять верное решение без опасных экспериментов над ней.
Если вы не знаете точного названия нужного вам пакета, то можно выполнить его поиск командой:
При этом поиск производится не только по имени пакета, но и по его описанию. Это удобно и позволяет быстро найти все связанные с указанной строкой поиска пакеты, даже если они имеют отличное наименование.
Для получения информации о пакете просто введите:
Чтобы отменить фиксацию выполните:
Объем данной статьи не позволяет рассмотреть все возможности apt, поэтому мы ограничились наиболее необходимыми в повседневной деятельности, ну и в завершение небольшая порция юмора. Если запустить команду apt без параметров, то вы увидите краткую справку в самом конце которой будет строка: В APT есть коровья СУПЕРСИЛА. Что это значит? Просто наберите:
И вы увидите старую пасхалку от разработчиков, которая была еще в apt-get, а затем ее заботливо перенесли в apt.
Графические оболочки Aptitude и Synaptic
Кроме родных для APT консольных интерфейсов apt-get и apt существуют и более высокоуровневые оболочки. Одна из них aptitude, которая может работать как в псевдографическом режиме, так и в режиме командной строки, имея синтаксис во многом повторяющий синтаксис apt. Благодаря этому многие воспринимают эту утилиту как еще один интерфейс к APT, хотя основной задачей разработчиков было именно создание псевдографической интерактивной оболочки.
В современных дистрибутивах Debian и Ubuntu aptitude отсутствует в основной поставке и вам потребуется установить этот пакет отдельно.
Если вы используете настольную версию Linux, то вам будет доступен графический менеджер пакетов Synaptic, он также отсутствует в основной поставке основных дистрибутивов и может быть установлен вручную. Данный пакет представляет собой опрятный и удобный графический интерфейс над APT, в тоже время дающий администратору все возможности по тонкой настройке процесса.
Однако не смотря на то, что Aptitude и Synaptic являются зрелыми и эффективными инструментами, мы бы не рекомендовали их использование по крайней мере до тех пор, пока вы не освоите работу с базовым интерфейсом apt.
Магазины приложений
Если мы говорим о настольных системах, то нельзя обойти вниманием магазины приложений. Это модный тренд, пришедший из мира мобильных устройств, но быстро завоевавший популярность и в настольной среде. Действительно, системой могут пользоваться разные люди, они могут являться хорошими специалистами в своей отрасли, но им совершенно не хочется разбираться в устройстве системы, а нужно просто включить компьютер в розетку и работать с ним.
Такой подход может вызвать возмущение у продвинутых пользователей и энтузиастов, но он имеет право на жизнь. Компьютер давно перестал быть уделом избранных и стал неотъемлемой частью нашей жизни. Проведем простую аналогию: сев за руль автомобиля многие из нас просто заводят его, нажимают педали, переключают рычаг коробки передач, не задумываясь о том, какие процессы происходят внутри, а в случае каких-либо неполадок отгоняют машину на сервис.
Ниже показан магазин для актуальной версии Debian
Заключение
Как видим, Debian и основанные на нем системы предоставляют широкий выбор инструментов для управления пакетами, начиная от утилит командной строки и заканчивая магазинами приложений. Каждый найдет инструмент себе по душе. Но для начинающих администраторов мы бы рекомендовали в обязательном порядке осваивать базовые инструменты, такие как dpkg и apt, потому что ситуации бывают разные, а базовые инструменты, в отличие от графической оболочки или псевдографических утилит, доступны всегда.
Дополнительные материалы:
Помогла статья? Поддержи автора и новые статьи будут выходить чаще:
Или подпишись на наш Телеграм-канал: