Зависимости пакетов в дистрибутивах Linux: классификация и механизмы контроля
Автор: Радисхлебова А.А.
Журнал: Теория и практика современной науки @modern-j
Рубрика: Математика, информатика и инженерия
Статья в выпуске: 4 (22), 2017 года.
Бесплатный доступ
В данной статье рассмотрена классификация зависимостей пакетов, приведены примеры зависимостей различных типов. Проведен обзор механизмов контроля зависимостей пакетов в основных дистрибутивах Linux.
Пакет, зависимости пакета, система управления пакетами, дистрибутив, метаинформация пакета
Короткий адрес: https://sciup.org/140271150
IDR: 140271150
Текст научной статьи Зависимости пакетов в дистрибутивах Linux: классификация и механизмы контроля
Программное обеспечение большинства UNIX-подобных операционных систем (Debian, Red Hat, Mandrake и др.) поставляется в виде пакетов программ. Пакет – архивный файл, содержащий программный код в бинарном или исходном виде, а также метаданные о программе, ее версии, зависимостях и другую информацию.
Как правило, пакеты программ имеют взаимные зависимости друг от друга. Зависимости пакета – набор сведений, описывающих требования к наличию других программных пакетов и иных условий, необходимых данному пакету для функционирования.
Различают сборочные зависимости и зависимости стадии выполнения.
Сборочные зависимости – набор пакетов, которые должны быть доступны во время распаковки, конфигурирования, компиляции и установки пакета. В качестве основных примеров сборочных зависимостей можно привести системы сборки программного обеспечения из исходного кода – Scons, CMake; генераторы лексических и синтактических анализаторов flex и bison; unzip и другие инструменты, используемые для извлечения исходного архива.
Зависимости стадии выполнения – набор пакетов, которые должны быть доступны в процессе выполнения программы. Пакеты, содержащие шрифты, в большинстве случаев представляют собой только зависимости стадии выполнения, так как шрифты редко применяются во время сборки пакетов.
В операционных системах на базе Debian выделяют только обязательные и необязательные (рекомендуемые) зависимости.
Обязательные зависимости – зависимости, без удовлетворения которых невозможна сборка, установка и функционирование пакета. Например, любой пакет, содержащий приложение зависит от системных библиотек C, приложения для интегрированной среды KDE – от библиотек qt и kdelibc.
Рекомендуемые зависимости – зависимости, удовлетворение которых добавляет пакету дополнительную функциональность. В качестве примера необязательной зависимости можно привести зависимость пакета links от сервиса консольной мыши gpm.
Управление пакетами программ в UNIX-подобных операционных системах осуществляется на уровне отдельной программы или библиотеки, а не целой системы. Удаление или изменение версии одного из составляющих систему компонентов может нарушить работоспособность зависимых от него пакетов. Поэтому для поддержания целостности и правильного функционирования системы необходимы эффективные механизмы контроля зависимостей пакетов.
Управление зависимостями является одной из основных функций систем управления пакетами. Система управления пакетами - набор программных средств, которые автоматизируют процесс установки, удаления, настройки и обновления различных компонентов программного обеспечения.
Рассмотрим более подробно, как осуществляется контроль межпакетных зависимостей в различных дистрибутивах Linux.
Debian GNU/Linux — один из самых популярных и важных дистрибутивов GNU/Linux. Пакет Debian содержит не только файлы, предназначенные для установки (а именно, исполняемые файлы, библиотеки, документацию и т.п.), но и файл со всей доступной метаинформацией о пакете. Метаинформация включает в себя полное имя пакета, номер версии, описание пакета, имя разработчика, контрольную сумму, отношения с другими пакетами и используется системами управления пакетами для определения возможности установки или удаления пакета. Метаинформация содержится в файле control, пример которого представлен на рисунке 1.
б
ID
Homepage:
Package: gentoo
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends} Description:
Рисунок 1 – Файл control, созданный программой dh_make
На основе информации, содержащейся в файле control, системы управления пакетами осуществляют контроль межпакетных зависимостей. В Debian в основном используются следующие системы управления пакетами:
-
• dpkg - предназначена для установки, конфигурирования и удаления единичных пакетов; не имеет собственных средств разрешения межпакетных зависимостей; сообщает о нарушении зависимостей • apt - универсальный набор инструментов для управления deb-пакетами; включает механизмы для разрешения межпакетных зависимостей; устанавливает в систему недостающие зависимости (но только обязательные, список рекомендуемых зависимостей выводит на экран, пользователь сам принимает решение по поводу их установки).
В основном зависимости пакета в файле control прописываются вручную на основании документации. Но есть утилиты для автоматического определения некоторых зависимостей. Например, для определения сборочных зависимостей можно воспользоваться утилитой dpkg-depcheck.
В дистрибутивах, основанных на Red Hat Linux, а именно Fedora, RHEL, ALT Linux в качестве системы управления пакетами выступает RPM. Контроль зависимостей осуществляется за счет информации, указанной в spec-файле пакета. Spec-файл содержит инструкции, задающие порядок сборки, информацию о номере версии, зависимостях и в целом все данные о пакете, которые могут быть впоследствии запрошены из базы данных RPM.
В RPM проекта Sisyphus (проект, в рамках которого осуществляется развитие репозитория свободного программного обеспечения для разработки на его основе различных решений) и дистрибутивов ALT Linux присутствуют механизмы для автоматического поиска межпакетных зависимостей.
Для автоматизированного поиска сборочных зависимостей применяется утилита buildreq. В процессе сборки пакета данная утилита отслеживает все используемые файлы с помощью strace. По списку файлов, используемых в процессе сборки, buildreq строит список пакетов, необходимых для сборки. Впоследствии список сборочных зависимостей поддается оптимизации. Полученный оптимизированный список зависимостей добавляется в spec-файл пакета.
В рамках проекта Sisyphus разработана система автоматического поиска зависимостей для rpm-пакетов. Скрипт find-requires из пакета rpm-build осуществляет поиск зависимостей на основе списка всех файлов пакета. На первом этапе для каждого файла определяется «тип» с помощью утилиты file. Далее программные модули поиска зависимостей обрабатывают список файлов и их типов. С помощью скрипта find-requires можно получить зависимости программ от разделяемых библиотек, программ на языках программирования Perl, Python и Tcl, а также приложений Java.
Arch Linux - это независимо разрабатываемый дистрибутив GNU/Linux общего назначения, оптимизированный для архитектур i686 и x86-64, достаточно гибкий для выполнения любой задачи. Официальной системой управления пакетами для дистрибутива Arch Linux является Pacman.
Контроль зависимостей в системе управления пакетами Arch Linux осуществляется за счет внешней по отношению к каждому пакету базы данных. Она включает в себя базу всех пакетов, охваченных официальной частью дистрибутива Arch Linux, и базу пакетов, установленных на локальной машине. Базы пакетов представляют собой каталоги, содержащие папки вида pkg-ver-rel для каждого пакета. В каталоге пакета расположены файлы, содержащие краткое описание пакета, информацию о его зависимостях и список всех компонентов пакета.
При установке нового пакета Pacman сначала проверяет каталог, содержащий базу всех пакетов дистрибутива, для определения зависимостей устанавливаемого пакета. На следующем шаге Pacman проверяет наличие компонентов, необходимых устанавливаемому пакету на основе информации из каталога, содержащей базу установленных на машине пакетов. Если проверка проходит успешно, пакет устанавливается в систему. В противном случае - выдаётся список имён недостающих пакетов; работа Pacman'а завершается сообщением об ошибке. Pacman автоматически не разрешает нарушение зависимостей. Установка недостающих компонентов выполняется пользователем. На рисунке 2 представлен вывод команды pacman в случае отсутствия в системе необходимых пакетов.
error: unsatisfied dependencies: gnome-desktop: requires libgnome gnome-desktop: requires gnomc-vfs
Рисунок 2 – Вывод pacman в случае отсутствия в системе необходимых пакетов
Системы управления пакетами достаточны эффективны в вопросах отслеживания зависимостей пакетов для поддержания целостности UNIX-подобных систем. Многие системы управления пакетами имеют инструменты для автоматического разрешения зависимостей. Также существуют механизмы для автоматического определения некоторых зависимостей, которые при дальнейшем развитии позволят освободить разработчика от указания зависимостей вручную.
Список литературы Зависимости пакетов в дистрибутивах Linux: классификация и механизмы контроля
- Введение в POSIX'ивизм (C) Алексей Федорчук, 2005 [Электронный ресурс] URL: http://www.linuxcenter.ru/lib/books/posixbook/?style=print (Дата обращения 21.04.2017)
- Система управления пакетами [Электронный ресурс] URL: https://ru.wikipedia.org/wiki/Система_управления_пакетами (Дата обращения 21.04.2017)
- Руководство начинающего разработчика Debian [Электронный ресурс] URL: https://www.debian.org/doc/manuals/maint-guide/index.ru.html (Дата обращения 23.04.2017)
- Полное руководство Red Hat Package Manager [Электронный ресурс] URL: https://www.opennet.ru/docs/RUS/rpm_guide/ (Дата обращения 23.04.2017)
- Турбин А. Автоматический поиск зависимостей в rpm-пакетах [Электронный ресурс] URL: http://ftp.altlinux.org/pub/people/at/protav2007-ru-short.pdf (Дата обращения 23.04.2017)
- Archlinux: управление пакетами, Алексей Федорчук, 2005 [Электронный ресурс] URL: http://citkit.ru/articles/112/ (Дата обращения 25.04.2017)