Сборка Illumos

Если есть желание пользоваться самой свежей версией Illumos или внести изменения в его код, то необходимо освоить процесс его компиляции.Для компиляции Illumos потребуется установленная OpenIndiana (http://openindiana.org/download/).
Следует установить необходимые для компиляции пакеты:
sudo pkg install -v \
pkg:/data/docbook \
pkg:/developer/astdev \
pkg:/developer/build/make \
pkg:/developer/build/onbld \
pkg:/developer/gcc-3 \
pkg:/developer/java/jdk \
pkg:/developer/lexer/flex \
pkg:/developer/object-file \
pkg:/developer/parser/bison \
pkg:/developer/versioning/mercurial \
pkg:/library/glib2 \
pkg:/library/libxml2 \
pkg:/library/libxslt \
pkg:/library/nspr/header-nspr \
pkg:/library/perl-5/xml-parser \
pkg:/library/security/trousers \
pkg:/print/cups \
pkg:/print/filter/ghostscript \
pkg:/runtime/perl-510 \
pkg:/runtime/perl-510/extra \
pkg:/system/library/math/header-math \
pkg:/system/library/install \
pkg:/system/library/dbus \
pkg:/system/library/libdbus \
pkg:/system/library/libdbus-glib \
pkg:/system/library/mozilla-nss/header-nss \
pkg:/system/management/product-registry \
pkg:/system/management/snmp/net-snmp \
pkg:/text/gnu-gettext \
pkg:/library/python-2/python-extra-24 \
pkg:/web/server/apache-13

Кроме того, надо установить Sun Studio, чтобы получить доступ к dmake и lint.
sudo pkg set-publisher -g http://pkg.openindiana.org/legacy opensolaris.org
sudo pkg install pkg:/developer/sunstudio12u1
sudo mkdir -p /opt/SUNWspro
sudo ln -s /opt/sunstudio12.1 /opt/SUNWspro/sunstudio12.1

Создать файловую систему, задать ее настройки для ускорения компиляции.
sudo zfs create rpool/export/home/illumos-dev1
sudo zfs set atime=off rpool/export/home/illumos-dev1
sudo zfs set sync=disabled rpool/export/home/illumos-dev1
sudo mkdir /export/home/illumos-dev1/code1
sudo ln -s ./export/home/illumos-dev1/code1 /
sudo chown -R $USER /export/home/illumos-dev1

Скачивание исходного кода
cd /code1
hg clone ssh://anonhg@hg.illumos.org/illumos-gate

Скачивание и распаковка бинарников, коды которых закрыты
cd /code1/illumos-gate
wget -c \
http://dlc.sun.com/osol/on/downloads/20100817/on-closed-bins.i386.tar.bz2 \
http://dlc.sun.com/osol/on/downloads/20100817/on-closed-bins-nd.i386.tar.bz2
tar xvpf on-closed-bins.i386.tar.bz2
tar xvpf on-closed-bins-nd.i386.tar.bz2

Формирование скрипта настроек компиляции. За основу следует взять имеющийся в дереве исходников

cp usr/src/tools/env/illumos.sh .

Затем следует открыть illumos.sh в любом текстовом редакторе и задать значения переменных:
NIGHTLY_OPTIONS — Можно убрать l из строки, чтобы для экономии времени не выполняласть проверка кода программой lint.
CODEMGR_WS — эта переменная должна хранить корневой каталог исходного кода (в какой каталог был скачан код при помощи hg). В нашем случае это /code1/illumos-gate.
STAFFER — имя непривилегированного пользователя в системе.
VERSION — строка, описывающая версию.
Особенно важно для успешной установки скомпилированных пакетов, чтобы в ONNV_BUILDNUM содержался номер билда, больший, чем текущий в системе.

Текущий можно узнать командой
pkg info osnet-incorporation | grep Ветвь:

Если,например, команда выведет «Ветвь: 0.151.1», то в illumos.sh должно быть
export ONNV_BUILDNUM=152

Подготовка инструментов сборки
ln -s usr/src/tools/scripts/bldenv.sh .
ksh93 bldenv.sh -d illumos.sh -c «cd usr/src && dmake setup»
cp usr/src/tools/scripts/nightly.sh .
chmod +x nightly.sh

Запуск сборки
time ./nightly.sh illumos.sh

В процессе сборки можно наблюдать лог:
tail -f /code1/illumos-gate/log/nightly.log

После внесения изменений в код, чтобы не выполнять сборку того, на что изменения не повлияли, можно пользоваться командой
./nightly.sh -i illumos.sh

Вместо примерно 8 часов при полной сборке инкрементальная сборка длится около полутора часов. Такое время связано с тем, что как минимум выполняется обход всего дерева исходников. Для получения адекватного времени компиляции в процессе работы над каким-то отдельным модулем лучше написать свой собственный мейк-файл на основе файлов .make.state, где после сборки будут храниться выполненные команды. Команды сборки можно также извлечь из лога.

Пока идет компиляция система будет так сильно тормозить, что ей будет невозможно пользоваться, если не понизить приоритет процессам сборки:

for i in `pgrep dmake`; do renice -n 10 $i;done

А лучше — сразу запускать сборку командой:

nice -n 10 time ./nightly.sh illumos.sh

Источник: https://www.illumos.org/projects/5/wiki/How_To_Build_illumos

Speak Your Mind