Курсы пакетного менеджмента Евгений Зобнин aka j1m Хакер, номер #090, стр. 090-100-4 Возьмем, к примеру, порты. Порты (ports) - это некий фреймворк, призванный автоматизировать сборку программ из исходников. Организация портов во всех BSD-системах одинакова и основывается на одних и тех же принципах: рассортированное по классу программ дерево, набор make-файлов для выкачивания, распаковки, отслеживания зависимостей и сборки программ. Так что различается только реализация. Продемонстрирую это на примере. Чтобы собрать и установить vim в NetBSD, необходимо выполнить две команды: # cd /usr/pkgsrc/editors/vim # make install clean То же самое во FreeBSD: # cd /usr/ports/editors/vim # make install clean Как видно, для пользователя различия чисто визуальные. Стоит сказать, что системы портов NetBSD и FreeBSD поддерживаются совершенно независимыми командами, но родство заметить нетрудно. Принципиальной разницы нет и в реализации пакетных менеджеров. В любой BSD можно найти привычные команды /usr/sbin/pkg_add, /usr/sbin/pkg_delete и /usr/sbin/pkg_info, предназначенные, соответственно, для установки, удаления и извлечения информации из пакетов. Во время инсталляции пакета pkg_add проверяет, все ли требуемые зависимости установлены (и если нужно, устанавливает их), распаковывает пакет в дерево файловой системы (/usr/local в FreeBSD) и прописывает информацию о пакете в базу /var/db/pkg/. Пакеты FreeBSD, NetBSD и OpenBSD - это обычное тарболлы, сжатые gzip (в этом случае расширение .tgz) или bzip2 (.tbz), но различные по содержанию. В любом случае, в корне такого тарболла находится несколько файлов, имена которых записаны в верхнем регистре, а в качестве первого символа выступает знак "+". В таких файлах содержится различная информация о пакете, его содержании и зависимостях (например, +COMMENT - краткая информация о программе, +CONTENTS - список устанавливаемых файлов, +INSTALL - постинсталляционный скрипт). Недавно поклонники BSD создали так называемую "настольную BSD". Мы стали очевидцами появления на свет сразу двух представителей этого семейства: DesktopBSD (desktopbsd.net) и PC-BSD (www.pcbsd.org). Особое место в этих дистрибутивах FreeBSD занимает, конечно же, дружелюбная пользователю система пакетного менеджмента. В DesktopBSD дружелюбной стала система портов — собирать программы из исходников теперь можно, используя удобный графический интерфейс. В PC-BSD, напротив, используется собственный формат пакетов. Управляет пакетами система PBI, которую идейно можно представить как симбиоз рассмотренных ранее GNU Stow и AutoPackage. Пакеты устанавливаются при помощи графического инсталлятора и размещаются в /usr/local/MyPrograms (каждый в индивидуальном каталоге). Гибкость и мощь системы портов не могли не заметить представители сообщества пользователей Linux. Дэниель Роббинс ухитрился сплавить воедино технологические наработки сообщества Linux с философией мира BSD и получил в результате Gentoo - самый BSD'шный дистрибутив Linux. В Gentoo отразились не только идейные стороны BSD-систем (сквозная простота, стабильность), но и технические, например система портов, получившая имя portage. Причем разработчики Gentoo пошли дальше своих коллег из лагеря BSD и еще более усовершенствовали и без того красивый подход к установке ПО. Самыми яркими отличиями стали команда /usr/sbin/emerge и так называемые "флаги USE". Скрипт emerge, написанный на python, применяется для управления пакетами и аккумулирует в себе все необходимые функции менеджера пакетов, то есть позволяет устанавливать и удалять порты, проводить аудит дерева портов. Используя emerge, можно с легкостью устанавливать бинарные пакеты. В этом случае он действует на манер команды apt-get из Debian. То, что в Gentoo обозначается загадочным термином "флаги USE", на самом деле представляет собой довольно интересный способ передать команде emerge сведения о том, какие зависимости должны быть включены в компилируемую программу, а какие - нет. Например, чтобы собрать mplayer, отключив поддержку X Window, но, оставив возможность просмотра видео в консоли, необходимо добавить в файл /etc/make.conf строку "USE='-X +fbcon'" и выполнить команду "emerge mplayer". Для временного включения/отключения флагов можно использовать вот такой прием: |