Русский перевод: Михаил Сгибнев
Содержание
- 27.1. Сборка инструментов
- 27.2. Кросс-платформенная сборка ядра
- 27.3. Сборка & релиза
- 27.4. Переменные окружения
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