FreeBSD долгое время была старшей сестрой Linux, использующей компиляцию программного обеспечения в своей легендарной системе портов. Но теперь появилась возможность устанавливать и обновлять софт из репозитория.
Напомню, что создание ПО из портов - это создание программы на этапе компиляции из исходных файлов с исправлениями для FreeBSD с помощью строго регламентированной процедуры. То есть философия - Source Based дистрибутив.
Существует каталог /usr/ports/, который хранит в разветвлённой системе каталогов файлы сценариев и исправлений, что, собственно, и называется портом. К примеру, порт файлового менеджера Midnight Commander находится по адресу /usr/ports/misc/mc/
Если вы не знаете, где хранится та или иная программа, то стоит вам перейти в каталог /usr/ports/ и скомандовать make search name="что-то"
как вам укажут где хранится данный порт внутри /usr/ports/. Перейдя в нужный каталог (порт) и, командуя make install
, мы не явно запускаем команду make с целью install. Но до цели install автоматически вызываются следующие цели:
Что нужно знать?
Разработчики FreeBSD предоставили первый, официальный, бинарный репозиторий pkg.FreeBSD.org для нового пакетного менеджера pkg.
Через несколько месяцев планируется выпустить релиз Pkg 1.2, в котором появится поддержка проверки подлинности пакетов по цифровым подписям. То есть сейчас вполне возможна компрометация бинарных пакетов (например, в результате атаки хакеров) и никто об этом не узнает.
Начиная с FreeBSD 10, пакетный менеджер pkg будет предлагаться по умолчанию и заменит собой утилиты из набора pkg_install (pkg_create, pkg_add и pkg_info). Поддержка pkg_install будет прекращена через 6 месяцев.
Поддержка установки программ из портов полностью сохранена. То есть можно по прежнему компилировать программы, используя систему портов, только теперь вместе с портами рука об руку будет идти новая система pkg.
Свежеустановленная система FreeBSD обладает устаревшими портами, которые следует обновить: cd /usr/ports/ && portsnap fetch extract
, так как нам нужна версия pkg не моложе 1.1.4_8.
Пока нет WITH_PKGNG=yes в /etc/make.conf командуем cd /usr/ports/ports-mgmt/pkg && make install clean
Добавляем echo WITH_PKGNG=yes >> /etc/make.conf
и вызываем pkg2ng
Нам нужно очистить файл системный конфигурационный файл /usr/local/etc/pkg.conf.
Создать директорию с репозиториями mkdir -p /usr/local/etc/pkg/repos
и сформировать файл конфигурации /usr/local/etc/pkg/repos/FreeBSD.conf с видом:
FreeBSD1: {
url: "http://pkg.FreeBSD.org/${ABI}/latest",
mirror_type: "srv",
enabled: "yes"
}
FreeBSD2: {
url: "http://pkg.us-east.FreeBSD.org/${ABI}/latest",
mirror_type: "srv",
enabled: "yes"
}
FreeBSD3: {
url: "http://pkg.us-west.FreeBSD.org/${ABI}/latest",
mirror_type: "srv",
enabled: "yes"
}
Pkg поддерживает типичные функции таких систем управления пакетами, как APT и YUM, включая управление установленными пакетами, поиск пакетов pkg search, обновление пакетов из внешних репозиториев pkg upgrade, учёт зависимостей, средства для работы с метаданными. Для оценки наличия уязвимостей в установленных пакетах подготовлена команда pkg audit. Присутствует режим удаления пакетов, в которых больше нет необходимости и они были установлены как зависимости и - pkg autoremove.
В качестве формата пакета используется обычный TAR-архив, сжатый при помощи xz, в который помещены файлы, связанные с распространяемым приложением, а также набор управляющих скриптов и метаданных. Метаданные оформлены в виде текстового файла "+MANIFEST" в формате YAML и содержат всю информацию о пакете и определение особенностей его обработки.
В системе информация об установленных пакетах и пакетах, присутствующих в репозиториях, хранится в базе данных SQLite. Информация о начинке репозиториев также экспортируется в формате SQLite.
С одной стороны, если оставить один репозиторий pkg.FreeBSD.org, то даже Midnight Commander не сразу смог скачаться по непонятной причине. С другой стороны, множество репозиториев-зеркал и вот уже частенько приходится скачивать увесистые списки перед каждым чихом.
Ещё одним минусом можно посчитать более сложное обновление важных компонент в системе, типа языков программирования. Позвольте провести параллель - в Ubuntu даже сердце системы ядро линукса и то проще меняется, чем во Фри версия языка программирования. Чтобы не быть голословным, вот реальный пример. Обновление всего установленного зацепило perl. Судя по документации, его следует отдельно обновить так:
pkg set -o lang/perl5.16:lang/perl5.18
pkg install perl5.18
Как сказано выше, пока нет криптографической подписи у пакетов и их, кстати, никогда не было! Если вспомнить раннюю систему, работающую с бинарными пакеджами (утилиты pkg_*), а система портов умеет проверять только контрольную сумму.
Мне ещё рано судить о новинке, которая с одной стороны радует одним своим появлением, но с другой стороны, привыкши к мощи и простоте apt, увижу ли от pkg что-то поразительное в его работе?
Дополнительные материалы:
Source Based FreeBSD против Package Based Linux.
Почему я не люблю Source Based?
FAQ FreeBSD.