Главная » 2012 » Сентябрь » 5 » Вышел pkgng 1.0, новый пакетный менеджер для FreeBSD
Вышел pkgng 1.0, новый пакетный менеджер для FreeBSD
08:41
После двух лет разработки представлен первый стабильный релиз пакетного менеджера pkg
(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), ports-pkg_cutleaves, poudriere,
portdowngrade, tinderbox-devel, portbuilder и bsdstats. Патчи с
поддержкой pkgng уже подготовлены для portmaster и развиваются для salt, cfengine, puppet, биндингов ruby
и PackageKit. Для миграции на pkgng текущих установок FreeBSD cоздана
утилита pkg2ng, которая регистрирует в БД pkgng данные об уже
установленных в системе портах.
Проект pkgng был создан как попытка кардинальной переработки
инструментария pkg_install, исторически сложившиеся ограничения в
котором существенно мешают развитию инфраструктуры портов, которая
вынуждена работать с оглядкой на устаревший инструментарий. Например,
вместо корректной и оптимальной реализации тех или иных возможностей,
разработчикам до сих пор приходилось выдумывать различные "хаки" в
Mk/bsd.*.mk и метаданных. Предпринимаемые ранее попытки создания более
современных утилит, например, portmaster и portupgrade, также в конечном
счёте упирались в ограничения pkg_install.
Pkgng изначально не позиционируется только для управления портами
и рассматривается как полная замена утилитам pkg_*, включая новый
формат пакетов, возможность работы только с бинарными пакетами и
использование репозитория для их распространения. В основе проекта лежит
библиотека libpkg с реализацией функций по работе с пакетами и
репозиторями, которую можно использовать для создания дополнительных
пользовательских утилит. Поддерживаются типичные функции таких систем
управления пакетами, как APT и YUM, включая управление установленными
пакетами, поиск пакетов и обновление из удалённых репозиториев.
В качестве формата пакета используется обычный TAR-архив, сжатый
при помощи xz, в который помещены файлы, связанные с распространяемым
приложением, а также набор управляющих скриптов и метаданных. Метаданные
оформлены в виде текстового файла "+MANIFEST" в формате YAML и содержат
всю информацию о пакете и определение особенностей его обработки.
Поддерживается включение в пакет скриптов, которые будут вызываться на
различных стадиях установки/обновления/удаления. В системе информация об
установленных пакетах и пакетах, присутствующих в репозиториях,
хранится в базе данных, на основе SQLite. Информация о начинке
репозиториев также экспортируется в формате SQLite. Для гарантирования
валидности источника пакетов поддерживается проверка по RSA-сигнатурам.
Для оценки наличия уязвимостей в установленных пакетах подготовлена
команда "pkg audit". В будущем планируется расширить средства проверки
пакетов по цифровым подписям и подготовить инструменты для
рецензирования пакетов.
В pkgng также реализованы полноценные средства учета зависимостей
между пакетами, в том числе присутствует режим автоматического удаления
пакетов, которые были установлены как зависимости и в которых больше
нет необходимости. Новые пакеты могут быть созданы на основании портов
или уже установленных в произвольную директорию программ. С точки зрения
пользователя, формат работы с pkgng напоминает APT. Например, для
обновления данных о содержимом репозитория нужно выполнить "pkg update",
для установки программ "pkg install prog1 prog2", для поиска "pkg
search ключ" и т.п.