четвер, 31 жовтня 2013 р.

FreeBSD и бинарный репозиторий

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 автоматически вызываются следующие цели:

  • fetch - загружается тарбол программы с URL из переменной MASTER_SITES, указанной в файле Makefile.
  • checksum - проверка контрольных сумм.
  • extract - распаковка тарбола.
  • patch - применение исправлений из подкаталога files/ для ФриБСДизации программы.
  • configure - запуск сценария конфигурирования.
  • build - создание бинарных исполняемых файлов с помощью компиляции.

Что нужно знать?

  • Цели (этапы) являются независимыми и вы можете сами вызывать любую цель. К примеру, make fetch.
  • Система портов обеспечивает сборку программы, учитывая зависимости.
  • После установки порта запись о нём вносится в базу данных /var/db/pkg, то есть порт ничем не отличается от бинарного пакета. Другими словами, можно поставить программу, компилируя, а удалить командой pkg_delete словно бинарный пакет. А те бинарные пакеты, установленные во время установки системы с CD, в будущем, можно заменить новыми версиями, используя порты. Этот момент, мало кто понимает, когда речь заходит о бинарных пакетах и об исходниках в /usr/ports/

Настоящее.

Разработчики FreeBSD предоставили первый, официальный, бинарный репозиторий pkg.FreeBSD.org для нового пакетного менеджера pkg.

Через несколько месяцев планируется выпустить релиз Pkg 1.2, в котором появится поддержка проверки подлинности пакетов по цифровым подписям. То есть сейчас вполне возможна компрометация бинарных пакетов (например, в результате атаки хакеров) и никто об этом не узнает.

Начиная с FreeBSD 10, пакетный менеджер pkg будет предлагаться по умолчанию и заменит собой утилиты из набора pkg_install (pkg_create, pkg_add и pkg_info). Поддержка pkg_install будет прекращена через 6 месяцев.

Поддержка установки программ из портов полностью сохранена. То есть можно по прежнему компилировать программы, используя систему портов, только теперь вместе с портами рука об руку будет идти новая система pkg.

Тестирование pkg в FreeBSD 9.2.

Свежеустановленная система 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.

Немає коментарів:

Дописати коментар

HyperComments for Blogger

comments powered by HyperComments