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

## 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`.

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

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

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