10. Экспериментальная сборка

Время от времени для тестирования новых возможностей или исправлений общей инфраструктуры портов (bsd.port.mk), а также для тестирования крупных обновлений, затрагивающих существенную часть пакетов, проводится сборка с экспериментальными патчами. Текущей экспериментальной веткой является 6-exp в архитектуре i386™.

В целом, экспериментальная сборка производится так же, как и обычная. Основное отличие: перед запуском скрипта dopackages нужно применить к дереву портов необходимые изменения. Хорошей идеей будет сохранить копии всех изменяемых файлов, а также их список. К списку вы сможете вернуться перед произведением окончательного коммита.

Для создания «контрольного экземпляра» для сравнения следует сначала произвести сборку той ветви архитектуры i386™, на которой основана экспериментальная ветвь (в настоящее время это ветвь 6). Перед экспериментальной сборкой выгрузите деревья src и ports на момент произведения контрольной сборки. В этом случае вы можете быть уверены, что сравниваете яблоки с яблоками.

Примечание:

Два кластера сборки могут производить контрольную и экспериментальную сборку одновременно. Это может ощутимо сэкономить общее время сборки.

По завершении сборки сравните результаты контрольной и экспериментальной сборок примерно такой командой (предполагается, что контрольной является ветка 6, а экспериментальной — 6-exp):

% cd /var/portbuild/i386/6-exp/errors % find . -name \*.log\* | sort > /tmp/6-exp-errs % cd /var/portbuild/i386/6/errors % find . -name \*.log\* | sort > /tmp/6-errs

Примечание:

Если с момента завершения одной из сборок прошло достаточно много времени, журналы сборки могут быть автоматически архивированы bzip2. В этом случае используйте sort | sed 's,\.bz2,,g'.

% comm -3 /tmp/6-errs /tmp/6-exp-errs | less

Результатом работы последней команды будет отчет, состоящий из двух столбцов. В первой колонке будут перечислены порты, сборка которых не удалась в контрольном, но не в экспериментальном случае; второй столбец описывает противоположную ситуацию. Причины, по которым порт может оказаться в первом списке, включают:

Во втором столбце порт может оказаться по следующим причинам:

Перед коммитом экспериментальных обновлений необходимо изучить содержимое обоих столбцов. Чтобы отличить ситуации [1] и [2], можно пересобрать соответствующие пакеты в контрольной ветке:

% cd /var/portbuild/i386/6/ports

Примечание:

Не забудьте обновить дерево портов до той же даты, что и дерево экспериментальной сборки.

Для подготовки контрольной ветви используйте команду:

% /var/portbuild/scripts/dopackages.6 -noportscvs -nobuild -nocvs -nofinish

Сборка должна производиться из каталога packages/All. Изначально этот каталог должен быть пуст, за исключением символьной ссылки Makefile. Если этой ссылки нет, создайте ее:

% cd /var/portbuild/i386/6/packages/All % ln -sf ../../Makefile . % make -k -j<#> <список пакетов для сборки>

Примечание:

<#> описывает уровень параллелизма сборки. Обычно, это сумма весов клиентских машин, указанных в /var/portbuild/i386/mlist, если у вас нет причин проводить более тяжелую или, наоборот, облегченную сборку.

<список пакетов для сборки> представляет собой список имен пакетов (включая их версии) в том виде, как они представлены в файле INDEX. Суффикс PKGSUFFIX (.tgz или .tbz) является необязательным.

Будут собраны только указанные пакеты, а также их зависимые порты.

Процесс сборки можно контролировать так же, как и стандартную сборку. После того, как все ошибки исправлены, вы можете произвести коммит комплекта исправлений. Является хорошим тоном отправить письмо с темой HEADS UP в списки рассылки ports@FreeBSD.org и ports-developers@FreeBSD.org с информацией о внесенных изменениях. Краткая аннотация изменений также должна быть добавлена в файл /usr/ports/CHANGES.

Этот, и другие документы, могут быть скачаны с http://ftp.FreeBSD.org/pub/FreeBSD/doc/.

По вопросам, связанным с FreeBSD, прочитайте документацию прежде чем писать в <questions@FreeBSD.org>.

По вопросам, связанным с этой документацией, пишите в рассылку <doc@FreeBSD.org>.