Процесс построения пакетов
Пред. |  | ═

# 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]

- Порт не собрался по причине временных ошибок (недоступный FTP сайт, ошибка ввода-вывода на клиенте и т.п.)

Перед коммитом экспериментальных обновлений необходимо изучить содержимое обоих столбцов. Чтобы отличить ситуации [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`.

Пред. | Начало | ═
Загрузка пакетов для раздачи | ═ | ═

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

По вопросам, связанным с FreeBSD, прочитайте документацию прежде чем писать в <questions@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите <doc@FreeBSD.org>.
По вопросам, связанным с русским переводом документации, пишите в рассылку <frdp@FreeBSD.org.ua>.
Информация по подписке на эту рассылку находится на сайте проекта перевода.