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

# 4. Запуск сборки

Для сборки пакетов используются скрипты `scripts/dopackages*`. Наиболее полезными являются:

- `dopackages.4` - собирает пакеты для версии 4.X

- `dopackages.5` - собирает пакеты для версии 5.X

- `dopackages.5-exp` - производит сборку ветви для версии 5.X с экспериментальными изменениями (ветвь 5-exp)

- `dopackages.6` - собирает пакеты для версии 6.X

- `dopackages.6-exp` - производит сборку ветви для версии 6.X с экспериментальными изменениями (ветвь 6-exp)

- `dopackages.7` - собирает пакеты для версии 7.X

Все они вызывают универсальный скрипт `dopackages`, и являются символьными ссылками на `dopackages.wrapper`. Для создания скрипта для сборки пакетов новой ветви достаточно создать символическую ссылку `dopackages.${branch}`, указывающую на `dopackages.wrapper`. Могут быть указаны многочисленные параметры, например:

    dopackages.6 ${arch} [-options]

`[-options]` может быть произвольным набором из следующих опций:

- `-nofinish` - Не производить пост-обработку по завершении сборки. Полезно, если процесс сборки потребуется рестартовать. В обычных ситуациях эту опцию следует использовать всегда.

- `-finish` - Произвести пост-обработку (и только: собственно сборку не производить).

- `-restart` - Рестартовать прерванный (или незавершенный, т.е. запущенный без флага `-finish`) процесс сборки с самого начала. При этом порты, попытка сборки которых на предыдущем проходе завершилась неудачно, будут пересобраны.

- `-continue` - Продолжить прерванный (или незавершенный) процесс сборки. Порты, не прошедшие сборку, не пересобираются.

- `-incremental` - Сравнить необходимые поля в текущем файле `INDEX` с его предыдущим состоянием, удалить пакеты и журналы их сборки для обновившихся портов и пересобрать их. Этот ключ позволяет существенно сократить время сборки, поскольку нет необходимости пересобирать каждый раз не изменившиеся порты.

- `-cdrom` - Текущая сборка предназначена для помещения на CD-ROM, поэтому исходные архивы и пакеты портов, помеченных `NO_CDROM` должны быть удалены при пост-обработке.

- `-nobuild` - Произвести первоначальную подготовку, не запуская собственно процесс сборки пакетов.

- `-noindex` - Не перестраивать файл `INDEX` в ходе препроцессинга.

- `-noduds` - Не перестраивать файл `duds` (список портов, которые не будут строиться, например, помеченные признаками `IGNORE`, `NO_PACKAGE` и т.п.) перед процессом сборки.

- `-trybroken` - Пытаться собрать порты, помеченные как `BROKEN` (по умолчанию выключено, поскольку кластер архитектуры i386™ довольно быстр, и при инкрементной сборке больше времени тратится на пересборку того, что все равно не сможет собраться. С другой стороны, кластеры других архитектур достаточно медленны, так что пытаться собирать на них порты с флагом `BROKEN` было бы напрасной тратой времени.

- `-nocvs` - Не выполнять обновление (`cvs update`) дерева исходных текстов (`src`) на этапе препроцессинга.

- `-noportscvs` - Не обновлять (`cvs update`) дерево портов (`ports`) на этапе препроцессинга.

- `-nodoccvs` - Не обновлять (`cvs update`) дерево документации (`doc`) в ходе препроцессинга. (устаревшая опция)

- `-norestr` - Не пытаться компилировать порты, помеченные как `RESTRICTED`.

- `-plistcheck` - Считать ошибкой оставление лишних файлов после деинсталляции порта.

- `-distfiles` - Собрать архивы исходных файлов (`distfiles`) для дальнейшего их переноса на `ftp-master`. Эту опцию следует использовать изредка, поскольку она требует очень много места. Исходные архивы следует удалить после загрузки их на `ftp-master`.

- `-fetch-original` - Загружать исходные архивы с оригинальных сайтов, определенных переменными `MASTER_SITES`, а не с `ftp-master`.

Убедитесь, что процесс сборки пакетов для архитектуры `${arch}` запускается от имени пользователя ports-`${arch}`; в противном случае ошибки неизбежны.

> Замечание: Сборка пакетов производится в два идентичных прохода. Иногда временные проблемы, такие как ошибки NFS или недоступность FTP-сайтов, могут прервать сборку. Дублирование попыток позволяет обойти подобные проблемы.

Проверьте, чтобы `ports/Makefile` не ссылался на пустые подкаталоги. В особенности это важно для сборки ветви -exp. Если процесс сборки обнаруживает пустой каталог, обе фазы сборки вскоре остановятся. При этом в файлы ``${arch}`/`${branch}`/make.[0|1]` будет записано сообщение об ошибке примерно такого вида:

    don't know how to make dns-all(continuing)

Для исправления ситуации просто закомментируйте или удалите строчки `SUBDIR`, указывающие на пустые подкаталоги. После этого вы можете перезапустить сборку командой `dopackages`, добавив ей параметр `-restart`.

> Замечание: Та же проблема возникает при создании файла `Makefile` для новой категории, не содержащего ни одной ссылки на подкаталоги (`SUBDIR`). Это, скорее всего, ошибка, подлежащая исправлению.

Пред. | Начало | След.
Подготовка ограниченной среды сборки |  | Процесс сборки

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

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