Время от времени для тестирования новых возможностей или
исправлений общей инфраструктуры портов (bsd.port.mk
),
а также для тестирования крупных обновлений, затрагивающих существенную
часть пакетов, проводится сборка с экспериментальными патчами. Текущей
экспериментальной веткой является 6-exp
в архитектуре
i386TM.
В целом, экспериментальная сборка производится так же, как и обычная.
Основное отличие: перед запуском скрипта dopackages
нужно применить к дереву портов необходимые изменения.
Хорошей идеей будет сохранить копии всех изменяемых файлов, а также их
список. К списку вы сможете вернуться перед произведением окончательного
коммита.
Для создания <<контрольного экземпляра>> для сравнения
следует сначала произвести сборку той ветви архитектуры i386TM, на которой
основана экспериментальная ветвь (в настоящее время это ветвь
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
.
Этот, и другие документы, могут быть скачаны с http://ftp.FreeBSD.org/pub/FreeBSD/doc/.
По вопросам, связанным с FreeBSD, прочитайте
документацию прежде чем писать в
<questions@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите в рассылку
<doc@FreeBSD.org>.