Зависимости пакетов Debian

Для таких дистрибутивов Linux, как Debian GNU/Linux, существует более 60 000 различных программных пакетов. Все они имеют определенную роль. В этой статье мы объясняем, как управление пакетами надежно управляет этим огромным количеством программных пакетов во время установки, обновления или удаления, чтобы ваша система работала и была полностью стабильной.

Для Debian GNU/Linux, это относится к инструментам apt, apt-get, aptitude, apt-cache, apt-sizes, apt-rdepends, dpkg-deb и apt-mark.

Доступность программного обеспечения пакеты

Как уже было сказано выше, дистрибутив Linux состоит из множества различных программных пакетов. На сегодняшний день программное обеспечение достаточно сложное, поэтому принято делить программное обеспечение на несколько отдельных пакетов. Эти пакеты можно классифицировать по функциональности или ролям, таким как двоичные пакеты, библиотеки, документация, примеры использования, а также коллекции для конкретных языков, и они предоставляют только выбранную часть программного обеспечения. Для этого нет фиксированного правила, и разделение осуществляется либо командой разработчиков инструмента, либо сопровождающим пакета, который заботится о программном пакете для вашего дистрибутива Linux. На экране 1 с использованием aptitude перечислены пакеты, содержащие переводы для различных языков веб-браузера Mozilla Firefox.

Рисунок 1: aptitude-firefox.png

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

Организация пакетов

Инструменты управления пакетами в Debian Дистрибутив GNU/Linux постоянно заботится о полном соблюдении зависимостей установленных пакетов. Это особенно важно, если программный пакет предназначен для установки, обновления или удаления в вашей системе или из нее. Отсутствующие пакеты добавляются в систему или установленные пакеты удаляются из системы, если они больше не требуются. Рисунок 2 демонстрирует это для удаления пакета «mc-data» с помощью «apt-get». Пакет ‘mc-data’ также рекомендует автоматически удалить пакет ‘mc’, потому что его установка без ‘mc-data’ больше не имеет смысла.

Рисунок 2: apt-get-remove-mc.png

Метки и флаги пакетов

Во время работы инструменты управления пакетами учитывают установленные флаги и метки пакетов. Они либо устанавливаются автоматически, либо устанавливаются системным администратором вручную. Особенно это поведение относится к флагу «необходимый пакет», который установлен для пакетов, которые не следует удалять. Перед тем, как вы это сделаете, выдается четкое предупреждение (см. Рисунок 3)..

Рисунок 3: apt-get-remove.png

Также учитываются три отметки «автоматический», «ручной» и «удерживаемый». Они отмечают пакет как автоматически устанавливаемый, установленный вручную или не подлежащий обновлению (сохраняя текущую версию). Программный пакет помечен как «автоматический» или «ручной», но не оба сразу.

Среди прочего, команда apt-mark обрабатывает метки и флаги с помощью следующих подкоманд:

  • auto: установить пакет как автоматически установленный
  • hold: сохранить текущую версию пакета
  • manual: установить пакет как установленные вручную
  • showauto: показывать автоматически установленные пакеты
  • showmanual: показывать установленные вручную пакеты
  • showhold: перечислять пакеты, которые находятся на удержании
  • unhold: удалить флаг удержания для данного пакета

Чтобы вывести список всех установленных вручную пакетов, выполните следующую команду:

$ apt-mark showmanual
abiword
abs-guide
ack-grep
acl
acpi

$

Чтобы сохранить версию пакета, используйте подкоманду ‘hold’. Пример ниже показывает это для пакета ‘mc’.

# apt-mark hold mc
mc set on hold
#

Подкоманда showhold перечисляет пакеты, которые находятся на удержании (в нашем случае это только пакет mc):

# apt-mark showhold
mc
#

Используя альтернативный метод под названием ‘apt pinning’, пакеты классифицируются по приоритетам. Apt применяет их, чтобы решить, как обращаться с этим программным пакетом и с версиями, доступными в репозитории программного обеспечения.

Описание пакета

Используя альтернативный метод под названием ‘apt pinning’, пакеты классифицируются по приоритетам. Apt применяет их, чтобы решить, как обращаться с этим программным пакетом и с версиями, доступными в репозитории программного обеспечения.

Каждый программный пакет поставляется со своим собственным стандартизированным описанием пакета. Среди других полей это описание явно указывает, от каких дополнительных пакетов оно зависит. Инструменты, специфичные для распространения, извлекают эту информацию из описания пакета, а затем вычисляют и визуализируют зависимости для вас. В следующем примере используется команда ‘apt-cache show’ для отображения описания пакета ‘poppler-utils’ (см. Рисунок 4).

Рисунок 4: package-description-poppler-utils.png

Описание пакета содержит раздел под названием ‘Зависит от’. В этом разделе перечислены другие пакеты программного обеспечения, а также номер версии, от которой зависит текущий пакет. На рисунке 4 этот раздел выделен красной рамкой и показывает, что ‘poppler-utils’ зависит от пакетов ‘libpoppler64’, ‘libc6’, ‘libcairo2’, ‘libfreetype6’, ‘liblcms2-2’, ‘libstdc ++ 6’ и ‘zlib1g’.

Показать зависимости пакета

Чтение описания пакета — сложный способ выяснить зависимости пакета. Далее мы покажем вам, как это упростить.

Есть несколько способов показать зависимости пакетов в командной строке. Для пакета deb в качестве локального файла используйте команду «dpkg-deb» с двумя параметрами — именем файла пакета и ключевым словом «Depends». Пример ниже демонстрирует это для пакета skypeforlinux-64.deb:

$ dpkg-deb -f Downloads/skypeforlinux-64.deb Зависит от
gconf -service, libasound2 (> = 1.0.16), libatk1.0-0 (> = 1.12.4), libc6 (> = 2.17),
libcairo2 (> = 1.2.4), libcups2 (> = 1.4.0), libexpat1 (> = 2.0.1),
libfreetype6 (> = 2.4.2), libgcc1 (> = 1: 4.1.1), libgconf-2-4 (> = 3.2.5 ),
libgdk-pixbuf2.0-0 (> = 2.22.0), libglib2.0-0 (> = 2.31.8), libgtk2.0-0 (> = 2.24.0),
libnspr4 (> = 2: 4.9-2 ~), libnss3 (> = 2: 3.13.4-2 ~), libpango-1.0-0 (> = 1.14.0),
libpangocairo-1.0 -0 (> = 1.14.0), libsecret-1-0 (> = 0.7), libv4l-0 (> = 0.5.0),
libx11-6 (> = 2: 1.4.99.1), libx11-xcb1, libxcb1 (> = 1.6), libxcomposite1 (> = 1: 0.3-1),
libxcursor1 (>> 1.1.2), libxdamage1 (> = 1: 1.1), libxext6, libxfixes3,
libxi6 (> = 2: 1.2.99.4), libxrandr2 (> = 2: 1.2.99.3), libxrender1, libxss1,
libxtst6, apt-transport-https, libfontconfig1 (> = 2.11.0 ), libdbus-1-3 (> = 1.6.18),
libstdc ++ 6 (> = 4.8.1)
$

Чтобы сделать то же самое для установленного пакета, используйте «apt-cache». Первый пример объединяет подкоманду «show», за которой следует имя пакета. Вывод отправляется команде «grep», которая фильтрует строку «Depends»:

$ apt-cache show xpdf | grep Depends
Зависит от: libc6 (> = 2.4), libgcc1 (> = 1: 4.1.1), libpoppler46 (> = 0.26.2),
libstdc ++ 6 (> = 4.1. 1), libx11-6, libxm4 (> = 2.3.4), libxt6
$

Команда ‘grep-status -F package -s Depends xpdf’ будет сообщать ту же информацию.

Более конкретно, во втором примере снова используется ‘apt-cache’, но с подкомандой ‘зависит’ вместо. За подкомандой следует имя пакета:

$ apt-cache plays xpdf
xpdf
Зависит: libc6
Зависит: libgcc1
Зависит: libpoppler46
Зависит: libstdc ++ 6
Зависит: libx11-6
Зависит: libxm4
Зависит: libxt6
Рекомендует: poppler-utils
poppler-utils: i386
Рекомендует: poppler-data
Рекомендует: gsfonts-x11
Рекомендует: cups-bsd
cups-bsd: i386
Столкнется с:
Столкнется с:
Столкнется с:
Столкнется с:
Заменяет:
Заменяет:
Заменяет:
Заменяет:
Конфликтует с: xpdf: i386
$

Список приведенный выше довольно длинный и может быть сокращен с помощью переключателя ‘-i’ (сокращение от ‘–important’):

$ apt-cache зависимо -i xpdf
xpdf
Зависит: libc6
Зависит: libgcc1
Зависит: libpoppler46
Зависит: libstdc ++ 6
Зависит: libx11-6
Зависит: libxm4
Зависит: libxt6
$

Команда ‘apt-rdepends’ делает то же самое, но w с информацией о версии, если она указана в описании:

$ apt-rdepends xpdf
Чтение списков пакетов… Готово
Построение дерева зависимостей
Чтение информации о состоянии… Готово
xpdf
Зависит: libc6 (> = 2.4)
Зависит: libgcc1 (> = 1: 4.1.1)
Зависит: libpoppler46 (> = 0.26.2)
Зависит: libstdc ++ 6 (> = 4.1.1)
Зависит: libx11-6
Зависит: libxm4 (> = 2.3.4)
Зависит: libxt6
libc6
Зависит: libgcc1

$

Команда ‘ aptitude тоже работает с переключателями. Для зависимостей используйте переключатель «~ R», за которым следует имя пакета. На рисунке 5 это показано для пакета «xpdf». Буква «A» во втором столбце вывода «aptitude» указывает на то, что пакет устанавливается автоматически.

Рисунок 5: aptitude-rdepends.png

Зависимости пакетов могут быть немного сложными. Это может помочь графически отобразить зависимости пакетов. Для создания графического представления зависимостей пакетов используйте команду «задолженность», за которой следует имя пакета. Инструмент «точка» из пакета Graphviz преобразует описание в изображение следующим образом:

$ dutyree xpdf | dot -Tpng> graph.png

На рисунке 6 вы видите созданное изображение PNG, содержащее граф зависимостей.

Рисунок 6: dot.png

Показать обратные зависимости

До сих пор мы отображали, что ответили на вопрос, какие пакеты требуются для пакета. Есть и обратный путь — так называемые обратные зависимости. Следующие примеры относятся к пакету, а также к пакетам, которые от него зависят.. Пример номер один использует ‘apt-cache’ с подкомандой ‘rdepends’ следующим образом:

$ apt-cache rdepends xpdf
xpdf
Reverse Зависит от:
| octave-doc
xpdf: i386
libfontconfig1: i386
| xmds-doc
xfe
wiipdf
| vim-latexsuite
python-scapy
| ruby-tioga
| python-tables-doc
| page-crunch
| octave-doc
| muttprint-manual
mozplugger
mlpost
libmlpost-ocaml-dev

$

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

В следующем примере aptitude используется для перечисления пакетов, которые имеют жесткую ссылку на пакет xpdf. ‘(см. рисунок 7).

Рисунок 7: aptitude-search.png

Проверить установку на отсутствие пакетов

‘Apt-get’ предлагает подкоманду ‘check’, которая позволяет проверить установку. Если вы видите следующий результат, пакеты отсутствуют:

# apt-get check
Чтение списков пакетов… Готово
Построение дерева зависимостей
Чтение информации о состоянии… Готово
#

Заключение

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

Ссылки и ссылки

  • Аксель Бекерт, Франк Хофманн: Das Debian-Paketmanagement-Buch, https://www.dpmb.org/
Оцените статью
nanomode.ru
Добавить комментарий