Глава 27. Использование утилиты build.sh

Русский перевод: Михаил Сгибнев

Содержание

27.1. Сборка инструментов
27.2. Кросс-платформенная сборка ядра
27.3. Сборка & релиза
27.4. Переменные окружения
27.4.1. Смена директории по умолчанию
27.4.2. Статическая сборка

NetBSD 1.6 и более поздние версии включают улучшенный набор инструментальных средств, для облегчения сборки дистрибутивов, ядра и прочих мелких нужд. В этой главе рассматривается утилита build.sh, применяемая для кросс-платформенной сборки ядра и компиляции релизов. Непосредственно сборка ядра рассмотрена в Глава 28, Компиляция ядра. Детальное описание структуры утилиты build.sh может быть найдено в документации Luke Mewburn и Matthew Green’s и их презентации на BSDCon 2003.

Перед любыми нашими действиями необходимо установить исходные тексты системы. Смотри Глава 26, Obtaining sources by CVS для получения более полной информации.

27.1. Сборка инструментов

Как только исходные тексты были получены, необходимо собрать инструменты, родные для используемой платформы. Это довольно просто сделать. Будем использовать каталоги по умолчанию:

# mkdir /usr/obj
# cd /usr/src
# ./build.sh tools

Если инструменты уже были собраны, но нуждаются в модификации, то может быть спользована опция update, для пересборки только обновившихся утилит.

# ./build.sh -u tools

После того, как утилиты для родной платформы были собраны, могут быть собраны утилиты других платформ, в нашем примере, для платформы sparc64.

# ./build.sh -m sparc64 tools

Когда сборка инструментов будет закончена, будет выведена информация о переменных окружения:

Summary of results:
	 build.sh command: ./build.sh -u -m sparc64 tools
	 build.sh started: Mon Jul 28 11:08:30 UTC 2003
	 Bootstrapping nbmake
	 MACHINE:          sparc64
	 MACHINE_ARCH:     sparc64
	 TOOLDIR path:     /usr/src/tooldir.NetBSD-1.6U-i386
	 DESTDIR path:     /usr/src/destdir.sparc64
	 RELEASEDIR path:  /usr/src/releasedir
	 Created /usr/src/tooldir.NetBSD-1.6U-i386/bin/nbmake
	 makewrapper:      /usr/src/tooldir.NetBSD-1.6U-i386/bin/nbmake-sparc64
	 Updated /usr/src/tooldir.NetBSD-1.6U-i386/bin/nbmake-sparc64
	 Tools built to /usr/src/tooldir.NetBSD-1.6U-i386
	 build.sh started: Mon Jul 28 11:08:30 UTC 2003
	 build.sh ended:   Mon Jul 28 11:11:14 UTC 2003

Теперь, имея инструменты для sparc64, мы можем приступать к кросс-платформенной сборке ядра.

27.2. Кросс-платформенная сборка ядра

Кросс-платформенная сборка ядра может быть проведен в каталог conf соответствующей архитектуры с использованием имеющихся инструменов или, что легче, с использованием build.sh.

Конфигурирование ядра:

# cd /usr/src/sys/arch/sparc64/conf
# cp GENERIC MYKERNEL

Редактируем MYKERNEL. После того, как сие хитрое действо будет закончено, используем утилиту build.sh для сборки ядра.

# cd /usr/src
# ./build.sh -u -m sparc kernel=MYKERNEL

Обратите внимание, что обновления были получены, инструментальные средства собраны и нет никакой причины их пересобирать. Как только ядро будет собрано, build.sh доложит об этом, выведя местоположение ядра и некоторое количество дополнительной информации.

Summary of results:
	 build.sh command: ./build.sh -u -m sparc64 tools
	 build.sh started: Mon Jul 28 11:08:30 UTC 2003
	 Bootstrapping nbmake
	 MACHINE:          sparc64
	 MACHINE_ARCH:     sparc64
	 TOOLDIR path:     /usr/src/tooldir.NetBSD-1.6U-i386
	 DESTDIR path:     /usr/src/destdir.sparc64
	 RELEASEDIR path:  /usr/src/releasedir
	 Created /usr/src/tooldir.NetBSD-1.6U-i386/bin/nbmake
	 makewrapper:      /usr/src/tooldir.NetBSD-1.6U-i386/bin/nbmake-sparc64
	 Updated /usr/src/tooldir.NetBSD-1.6U-i386/bin/nbmake-sparc64
	 Building kernel without building new tools
	 Building kernel:  MYKERNEL
	 Build directory:  /usr/src/sys/arch/i386/compile/MYKERNEL
	 Kernels built from MYKERNEL:
	   /usr/src/sys/arch/sparc64/compile/MYKERNEL/netbsd
	 build.sh started: Mon Jul 28 11:08:30 UTC 2003
	 build.sh ended:   Mon Jul 28 11:11:14 UTC 2003

27.3. Сборка & релиза

Теперь Вам уже должно быть ясно, что инструментальный набор работает поэтапно. Перым делом мы компонуем инструменты для архитектуры, на которой будем проводить сборку, а затем ядро. Затем, в случае необходимости build.sh будет пересобирать инструменты. Использование опции update будет экономить Ваше время. Также должно быть ясно, что семантика использования утилиты build.sh довольно проста и процесс сборки релиза заключается только в правильном использовании команд.

Не должно быть неожиданностью то, что сборка и создание релиза заключается в следующем:

# ./build.sh -u -m sparc build
# ./build.sh -u -m sparc release

Просмотрев информацию о переменных окружения (напоминаю, мы использовали значения по умолчанию), мы обнаружим сборку в:

/usr/src/destdir.sparc64

Директория релиза будет определена как:

         RELEASEDIR path:  /usr/src/releasedir

27.4. Переменные окружения

Мало чем отличаясь от старой технологии, новая имеет довольно большое количество переменных, которые могут быть использованы для указания путей к файлам или применяемых инструментов (если это необходимо). В файле src/BUILDING описывается большинство из них. В этом разделе мы приведем два примера изменения переменных по умолчанию и сделаем это несколькоми способами.

27.4.1. Смена директории по умолчанию

Довольно много людей отслеживают ветку current и регулярно делают кросс-платформенную сборку для нескольких используемых архитектур. Логика этого довольно проста — как только появляется новая опция или поддержка нового устройства, находятся люди, которым необходимо использование этих нововведений. Отслеживая изменения и переодически проводя сборку, они должны иметь возможность создания релиза.

Разумно будет предположить, что если отслеживаются изменения и проводится сборка для нескольких архитектур, то стоит хранить различные сборки в разных местах. Есть два способа сделать это — использовать сценарий для установки DESTDIR, или вводить каталог назначения в интерактивном режиме. В любом случае, это делается точно также, как и определение любой другой переменной (в зависимости от Вашей оболочки, конечно).

Для оболочек bourne или korn:

# export DESTDIR=/usr/builds/sparc64

Для c оболочек:

# setenv DESTDIR /usr/builds/shark

Довольно просто. Когда сборка будет выполнена, бинарники и файлы будут находится в /usr/builds.

27.4.2. Статическая сборка

Инструментарий NetBSD по умолчанию производит динамическую сборку. Многим пользователям все еще необходимо иметь возможность статической сборки. Хорошим примером статической компоновки может служить маленькая система, в которой не присутствуют библиотеки. Если машина, на которой будет производиться сборка, будет нуждаться в установке переменных, то самым простым будет внести изменения в /etc/mk.conf.

Если вы хотите удостовериться, что сборка производится статически, то просто добавьте эту строку в /etc/mk.conf:

LDSTATIC=-static