Для FreeBSD вышел пакетный менеджер pkgng 1.0

Два года разработки понадобилось для появления первого стабильного релиза pkgng. Данный пакетный менеджер выступает современной заменой устаревшего pkg_install – инструментария, с помощью которого управляются бинарные пакеты во FreeBSD. Основным отличием pkgng выступает поддержка многих актуальных функций: обновления пакетов, работы с репозиториями, учета зависимостей – а также наличие интерфейса в стиле APT вкупе с полноценными средствами для работы с метаданными.

Пока что установка pkgng осуществляется через порт ports-mgmt/pkg. Ближайшее будущее предполагает изначальное включение необходимых для pkgng компонентов в состав FreeBSD версий 9 и 10. На сегодняшнее состояние дерево портов FreeBSD является полностью подготовленным для использования pkgng (для этого в make.conf нужно добавить строку WITH_PKGNG=yes). В рамках распространения нового пакетного менеджера был создан специальный сетевой репозиторий pkgbeta.freebsd.org. Адаптированностью к работе с pkgng характеризуются следующие инструменты для управления портами: portupgrade (если точнее, то только ветка -devel), portdowngrade, ports-pkg_cutleaves, portbuilder, poudriere, tinderbox-devel, а также bsdstats. Для portmaster уже подготовлены и для salt, cfengine, puppet, биндингов ruby и PackageKit уже развиваются соответствующие патчи с поддержкой pkgng. Обеспечить миграцию текущих установок FreeBSD на pkgng призвана новая утилита pkg2ng, регистрирующая в БД pkgng имеющиеся данные о портах, установленных в системе.

Основой проекта pkgng стало стремление кардинально переработать инструментарий pkg_install, ограничения которого со временем оказались существенным препятствием для дальнейшего развития инфраструктуры портов. Так, разработчики были вынуждены изощряться всевозможными «хаками» в Mk/bsd.*.mk и метаданных, вместо того чтобы корректно и оптимально реализовывать те или иные задуманные возможности. Даже такие более современные утилиты как portmaster или portupgrade в конечном итоге все так же упирались в незыблемые ограничения pkg_install.

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

Пакета оформляется в виде обыкновенного TAR-архива, сжатого с помощью xz. В состав архива включаются файлы, непосредственно связанные с приложением, а также набор управляющих скриптов с метаданными. Оформление метаданных выполнено в виде файла «+MANIFEST» формата YAML, содержащего всю информацию о пакете и определяющего особенности его обработки. Также в пакет могут включаться скрипты с возможностью их выполнения на различных этапах установки, обновления или удаления. Для хранения в системе информации об установленных пакетах и тех пакетах, что присутствуют в репозиториях, используется база данных на основе SQLite. Экспорт сведений о составе репозиториев также осуществляется в формате SQLite. Гарантией валидности источника пакетов выступает поддержка проверки по RSA-сигнатурам. Оценка присутствия уязвимостей в установленных пакетах выполняется с помощью команды «pkg audit». Дальнейшее развитие pkgng подразумевает расширение средств проверки пакетов и подготовку инструментов для их рецензирования.

Помимо этого, в pkgng реализованы средства учета межпакетных зависимостей, вплоть до наличия режима автоматического удаления пакетов, установленных в качестве зависимостей и больше не представляющих необходимости для системы. Создание новых пакетов может осуществляться на основании портов или же программ, установленных в ту или иную директорию. С пользовательской точки зрения работа с pkgng определенно напоминает APT. Так, за обновление информации о содержимом репозитория отвечает команда «pkg update», для установки ПО используется «pkg install prog1 prog2», для выполнения поисковых запросов – «pkg search ключ» и т.д.