Для дистрибутивных пакетов существует несколько видов распространения или, как принято говорить, форматов пакетов. Одни из них (rpm или deb) получили широкое распространение за пределами материнских систем, другие используются только в “родных” дистрибутивах, третьи же достаточно объединяются в группы достаточно условно.

Самый простой из таких форматов — те же тарбаллы, включающие в себя, однако, не исходные тексты, а уже скомпилированные исполняемые файлы, обеспечивающие их работу библиотеки, конфигурационные файлы, сопутствующую документацию, и так далее. Установка такого тарбалла сводится к его развертыванию и инкорпорации в дерево файловой иерархии целевой системы. Кроме того, бинарный тарбалл может включать (и, как правило, включает) сценарии, выполняемые до и после установки пакета.

Классический пример «чистых» бинарных тарбаллов — пакеты Slackware и производных от него дистрибутивов, не содержащие никакой метаинформации, то есть сведений о зависимостях пакетов. Такой пакет с помощью соответствующих средств будет установлен в любом случае, но без разрешения зависимостей работать не будет. А разрешение это отдаётся на откуп пользователю.

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

Важно отметить, что отсутствие в составе пакета информации о его зависимостях отнюдь не препятствует контролю над оными: контроль этот может осуществляться за счёт внешних баз данных репозиториев пакетов и локальных баз данных пакетов установленных. А функции удовлетворения зависимостей в этом случае целиком ложатся на программы, осуществляющие пакетный менеджмент. И надо отметить, что управление «чистыми» тарбаллами подчас оказывается более гибким, чем пакетами с информацией об их зависимостях.

Впрочем, с этим я несколько забежал вперёд — вернёмся к форматам распространения пакетов.

Два других широко распространённых формата пакетов — rpm (RPM Packages Manager, характерный для одноимённого дистрибутива и его многочисленных потомков) и deb (свойственный дистрибутиву Debian и его ещё более многочисленным клонам). И тот, и другой, в конечном счёте, также представляют собой компрессированные архивы бинарных файлов с указанием путей, которые они должны занять в файловой иерархии. Однако помимо этого, они содержат дополнительную информацию, в том числе и о зависимостях, хотя и представленную в разной форме.

В rpm-пакетах эта информация содержится внутри пакета в файле REQUIRENAME, с которым можно ознакомиться, например, с помощью функции просмотра программы Midnight Commander (при наличии в системе установленной программы rpm, которую можно найти в большинстве дистрибутивов). Этот просто список библиотечных файлов, требующихся для работы данного пакета, без указания, к какому пакету они сами принадлежат. Это можно видеть на скриншоте — в качестве примера дан пакет для текстового редактора joe.

pkg01.png

Кроме того, на том же рисунке можно видеть, что в этом списке никак не разделяются «жесткие» (в данном случае, например, libc.so.6 и libmcurses.so.5) и «мягкие» (в частности, libselinux.so.1) зависимости. И то, и другое, как мы увидим со временем, создаёт изрядные неудобства при использовании средств установки rpm-пакетов.

Еще один недостаток rpm-пакетов — то, что время от времени разработчики его меняют сам их формат. Насколько я помню, такая смена формата произошла при переходе от 3-й его версии к 4-й, ныне текущей, и принятой во всех базирующихся на rpm дистрибутивах. Однако в настоящее время разрабатывается 5-я версия, которую, при всех её усовершенствованиях, обещают сделать абсолютно несовместимой с версией 4-й. Поэтому ни один из rpm-based дистрибутивов перехода на новый формат пока не планируют. Единственное известное мне исключение — PLD Linux.

Кроме того, устройство rpm-пакетов несколько различается даже в дистрибутивах, использующих одну и ту же версию этого формата. Так что установка rpm-пакета, собранного для Suse, более чем не гарантируется в Mandriva, и наоборот. Впрочем, на все озвученные темы у нас будет повод поговорить подробнее.

Отмеченных для rpm-формата недостатков более или менее лишён deb-формат пакетов. Будучи исторически чуть ли не первым «не чистым тарбаллом», он сохраняет своё внутреннее устройство неизменным на протяжении уже полутора десятков лет. И при этом оно абсолютно одинаково во всех дистрибутивах, производных от Debian: пакет из Ubuntu обычно может быть установлен в материнской системе, и наоборот. Возможны, конечно, нестыковки, но они связаны не с форматом пакетов, а исключительно с версиями библиотек, от которых они зависят — в разных дистрибутивах они могут несколько различаться.

Пакет deb-формата представляет собой ar-архив (ar — архиватор, подобный tar, но более древний), включающий три файла: data.tar.gz — собственно откомпилированные бинарники пакета, control.tar.gz — собрание всякого рода служебной информации, в том числе и о зависимостях.

Информация о зависимостях, в числе прочей метаинформации, содержится в файле control одноимённого архива. Из скриншота (deb-пакет для Midnight Commander) можно видеть, что, во-первых, в списке зависимостей фигурируют названия пакетов, а не имена файлов. Во-вторых, четко различаются «жесткие» и «мягкие» зависимости. Причём среди последних существует две градации: рекомендуемые (recommends) и предлагаемые (suggests), первая из которых является более важной (с точки зрения майнтайнера пакета), но столь же необязательной для всех остальных, как и вторая.

pkg02.png

Кроме зависимостей, для deb-пакетов важно также понятие приоритета пакета, отражающее степень необходимости его для функционирования системы, например: обязательный (required), без которого функционирование системы невозможно, основной (base) и важный (important), также оказывающиеся практически необходимыми, стандартный (standard) — то есть имеющийся практически в любой полнофункциональной Linux-системе, дополнительный (optional) — тут уж степень важности каждый должен решать для себя.

Изначальная продуманность и неизменность формата deb-пакетов послужила причиной того, что он лёг в основу ряда развитых систем пакетного менеджмента, о чем мы поговорим в своё время.

Стоит заметить, что существуют средства взаимной трансформации пакетов разных форматов, по крайней мере наиболее распространённых — тарбаллов различных видов, rpm, deb. Это простые утилиты типа rpm2cpio или rpm2tgz, а также почти универсальная программа alien. Однако возможности их применения ограничены — очевидно, что из rpm-пакета (и тем более «чистого» тарбалла) получить полноценный deb-пакет невозможно. Поэтому наиболее успешно такие программы работают в направлении «от сложного к простому». Правда, при установке продуктов такой трансформации следует учитывать различия в файловой иерархии дистрибутивов и, возможно, в версиях зависимостей.

Кроме форматов rpm и deb, существуют и другие бинарные форматы, но они, как правило, не получили распространения за пределами того дистрибутива или системы, для которых были созданы. Так что речи о них здесь не будет, тем более что на очереди у нас следующий вопрос — о способах обращения с пакетами.


Теги: , , ,

Обсудить на форуме
Профнастил по выгодной цене: профнастил цены. . гибкие воздуховоды