Разработчики проекта pkgng, в рамках которого предпринята попытка создания полнофункционального пакетного менеджера для FreeBSD, объявили о переходе на стадию бета-тестирования. Pkgng позиционируется как отвечающая современным реалиям замена инструментария pkg_install.

В настоящее время pkg_install не поддерживает ряд важных функций, связанных с управлением бинарными пакетами, таких как возможность обновления пакетов, поддержка работы с репозиториями, учёт зависимостей и полноценная поддержка метаданных. Ограничения pkg_install во многом мешают развитию инфраструктуры портов, которая вынуждена работать с оглядкой на устаревший инструментарий, что приводит к появлению различных "хаков" в Mk/bsd.*.mk и метаданных, вносимых для обхода ограничений pkg_install. Предпринимаемые ранее попытки создания более современных утилит, например, portmaster и portupgrade, также в конечном счёте упирались в ограничения pkg_install.

Для исправления сложившейся ситуации был основан проект pkgng, который изначально не позиционировался для управления портами и рассматривался как полная замена утилитам pkg_*, включая новый формат пакетов, работу только с бинарными пакетами и использование репозитория для их распространения. В основе проекта лежит библиотека libpkg с реализацией функций по работе с пакетами и репозиторями, которую можно использовать для создания пользовательских утилит. Поддерживаются типичные функции таких систем управления пакетами, как APT и YUM, включая управление установленными пакетами, поиск пакетов и обновление из удалённых репозиториев.

В качестве формата пакета предлагается использовать TAR-архив в который помещены файлы, связанные с распространяемым приложением, а также набор управляющих скриптов и метаданных. Метаданные оформлены в виде текстового файла "+MANIFEST" в формате YAML и содержат всю информацию о пакете и определение особенностей его обработки. Поддерживается включение в пакет скриптов, которые будут вызываться на различных стадиях установки/обновления/удаления. В системе информация об установленных пакетах и пакетах, присутствующих в репозиториях, хранится в базе данных, на основе SQLite. Информация о начинке репозиториев также экспортируется в формате SQLite. Для гарантирования валидности источника пакетов поддерживается проверка по RSA-сигнатурам. Для оценки наличия уязвимостей в установленных пакетах подготовлена команда "pkg audit".

В pkgng также реализованы полноценные средства учета зависимостей между пакетами, в том числе присутствует режим автоматического удаления пакетов, которые были установлены как зависимости и в которых больше нет необходимости. Новые пакеты могут быть созданы на основании портов или уже установленных в произвольную директорию программ. Для регистрации в БД pkgng данных об уже установленных из портов программ подготовлен скрипт ports/pkg2ng. С точки зрения пользователя, формат работы с pkgng напоминает APT. Например, для обновления данных о содержимом репозитория нужно выполнить "pkg update", для установки программ "pkg install zsh cfengine3" и т.п. Информация об используемых репозиториях размещается в секции "repos:" файла /etc/pkg.conf. Список уже доступных репозиториев можно найти на сайте проекта.

Ожидается, что pkgng пробудет на стадии бета-тестирования достаточно долго, но при этом в отличие от альфа-выпусков, будет обеспечена обратная совместимость для форматов пакетов, внутренних баз и репозиториев, что позволит без опасения переходить к более новым выпускам pkgng. В настоящее время вся базовая функциональность, задуманная для релиза pkgng 1.0 уже реализована, если возникнут какие-то новые глобальные идеи, то они будут реализованы только к релизу pkgng 2.0. Финальный релиз pkgng 1.0 планируется выпустить до выхода FreeBSD 10.0-RELEASE и 9.1-RELEASE, обеспечив полную готовность к использованию в данных выпусках.

Революционных изменений от версии 1.0 ожидать не стоит, так как она ещё предполагает совместимость с текущим деревом портов. В будущем поддержка pkg_install будет прекращена, что позволит приступить к реализации более кардинальных улучшений. Среди интересных планов на далёкое будущее можно упомянуть средства для повышенной изоляции пакетов при помощи capsicum; учет системной архитектуры при установке пакетов (amd64, i386, arm); поддержка инкрементальных обновлений при которых будут загружаться только измененные части пакета; поддержка абстрактных мета-пакетов; более сложная система учета зависимостей.

Источник: http://www.opennet.ru/opennews/art.shtml?num=32971