Etersoft-build-utils

Материал из ALT Linux Wiki
Freesource-logo.png Blue Glass Arrow.svg MediaWiki logo.png
Эта страница была перемещена с freesource.info.
Эта страница наверняка требует чистки и улучшения — смело правьте разметку и ссылки.
Просьба по окончанию убрать этот шаблон со страницы.


Сборка пакетов

Образец того, как надо оформлять спек, вы можете посмотреть в пакете wcalc или gnubiff. Настоятельно рекомендуется обратиться к документации, а также смотреть "как это сделано в другом пакете". Получить src.rpm для установленного в систему пакета можно командой $ rpmgp название_пакета Также образцы спеков для разных типов пакетов доступны здесь.

Подготовка уже имеющегося src.rpm

Устанавливаем файл *.src.rpm, который хотим собирать (под пользователем):

$ rpm -i название*.src.rpm


Исходники пакета при этом разместятся в /RPM/SOURCES, а спек – в /RPM/SPECS.

Заходим в каталог /RPM/SPECS, и видим там спек для собираемого пакета. Если спек взят из другого дистрибутива, то сначала делаем

$ rpmcs название.spec


чтобы привести спек в пригодный для использования вид. Далее его нужно поправить вручную, используя взятый из ALT Linux пример спека в качестве образца. Сборка пакета "с нуля"

Вы должны разместить исходники пакета (архивы) в /RPM/SOURCES, а шаблон будущего спека (скопированный из образца) – в /RPM/SPEC. Типовые действия

Находясь в каталоге SPEC:

$ rpmbb название.spec

для сборки двоичного пакета (он будет создан в /RPM/RPMS)

$ rpmbb -r название.spec

для того, чтобы в пакет автоматически прописались зависимости на пакеты, необходимые при сборке. Если пересобирается уже имеющийся пакет из Сизифа, то это не обязательно. (см. также
Использование buildreq)

$ add_changelog название.spec

для добавления строчки о данной сборке в секцию %changelog, в конце спека. После этого следует в спеке дописать комментарий, какие изменения были сделаны в данной сборке. Иногда также
бывает удобно сразу указать список изменений:
$ add_changelog example.spec -e 'Initial build'
Более подробно об использовании этого скрипта вы можете узнать здесь: http://wiki.sisyphus.ru/devel/spectips/addchangelog

Сформированные зависимости (строчка BuildRequires) нужно просмотреть, чтобы там не было ненужных пакетов. Правильность сборки проверяется пересборкой готового пакета в hasher (см. ниже).

Ошибки при сборке

Для начала, нужно локализовать проблему — определить, является ли она проблемой конкретного дистрибутива/системы (например: отсутствие или неверная версия необходимых для сборки библиотек, специфика дистрибутива) или более глобальной (например: несобираемость определенной версией компилятора, ошибки в коде, несоответствие кода новым стандартам). В первом случае, поможет осуществить поиск по дистрибутиву/репозиторию, поискать решение проблемы в архивах почтовых рассылок или непосредственно попросить помощи в тематических конференциях, посвещенных дистрибутиву (sisyphus, devel, community). ВНИМАНИЕ: порядок действий, для решения проблемы имеет значение (репозиторий -> поиск в архиве -> рассылки). Во втором случае, стоит начать с поиска готовых решений. В открытом сообществе, считается хорошим тоном публиковать решения найденных проблем. Зачастую, поисковики выдают море полезной информации по кратко описанной в трех-пяти словах проблеме конкретного софта или тексту ошибки, полученной при сборке. Например, запроса вида " gcc4.1 mysoftware patch" может быть достаточно для поиска патча, решающего проблему сборки с новым gcc4.1). Стоит также воспользоваться имеющимися репозиториями открытой разработки. Зачастую, мейнтейнеры этих репозиториев, уже сталкивались с такими же проблемами, и возможно у них есть решение (патч) для сложившейся ситуации. О том, как устранить отсутствие необходимых библиотек или заголовочных файлов, рассказано в следующем пункте.

Поиск пакетов

Возможно при сборке вам придётся доустанавливать недостающие библиотеки. Имейте в виду, что в ALT принято называть пакеты для разработки так: libX-devel, где X – название библиотеки. Пользуйтесь apt-cache search название для поиска недостающего пакета. Если пакета нет в вашей системе, поищите его в Сизифе. Если его нет и там, обратитесь к крупным собраниям информации о пакетах:

а также в репозитории открытой разработки.

Сборочная среда Hasher

Чтобы убедиться в том, что все зависимости правильны и сборка вашего пакета нормально пройдёт на сборочном сервере в ALT Linux, используется hasher — среда, которая позволяет осуществить сборку пакета в «чистой» системе, куда установлены только пакеты, указанные в сборочных зависимостях.

Настройте hasher согласно краткому руководству.

Для сборки пакета в hasher запустите

rpmbsh -i -u спек.spec

Эта команда соберёт пакет, установит его в тестовый hasher, после чего предложит отправить его в Incoming.

Если вы производите сборку на удалённом сервере, то рекомендуется воспользоваться командой screen:

$ screen

Далее, для отключения от сеанса: Ctrl-A, D Для подключения обратно:

$ screen -r

Лимиты на сборку у инкамингера

При сборке пакетов в сборочном окружении используются следующие лимиты: В терминах hasher-priv.conf(5): rlimit_hard_as=1073741824 rlimit_soft_cpu=7200 rlimit_hard_cpu=7260 wlimit_time_elapsed=14400 wlimit_time_idle=3600 wlimit_bytes_written=268435456 ldv@ in devel

Вспомогательные скрипты для сборки

Существует набор скриптов, облегчающих процесс сборки, собранный в пакет etersoft-build-utils. В параметрах скриптов обычно указываются названия спеков.

Вспомог.

Обычная

Где результат

Комментарий

rpmbb

rpm -bb

/RPM/RPMS

полная сборка пакета

rpmbb -r

buildreq

Спек, строка BuildRequires:

вычисление необходимых зависимостей сборки с занесением в спек

rpmbs -u

/RPM/remote/upload

собрать src.rpm, подписать его и выложить в Incoming; удалить buildroot

rpmbsh [ -r ] [-m]

/hasher/repo/i586/RPMS.hasher

собрать из спека src.rpm и отправить его на сборку в hasher (если сразу указан src.rpm, собираем его)

rpmbb -i

/RPM/RPMS

выполнить установку и упаковку пакета, пропустив компиляцию

rpmrb спек версия

для указанного спека скачивает архив с исходниками новой (указанной) версии, собирает в hasher и устанавливает в тестовый hasher

rpmgs спек

для указанного спека скачивает архив с исходниками

rpmgp пакет

для указанного пакета скачивает src.rpm

rpmbph [-M30] спек

выполняет бэкпорт указанного спека в указанный дистрибутив

rpmbs

rpm -bs

/RPM/SRPMS

собрать src.rpm

rpmbb -c

rpm -bc --short-circuit

/RPM/BUILD

компиляция без установки


Ключ -m указывает произвести сборку в фоновом режиме и прислать лог по почте (не работает) Ключ -r указывает произвести сборку на удалённом сервере Ключ -u указывает отправить в инкоминг после сборки (-U – в Updates, а не backports) Также есть команды loginhsh для входа в (тестовый) hasher.

Нужно перенести в более подходящее место:

Использование ccache

Для ускорения сборки программного кода (если он пересобирается более одного раза) предлагается использовать ccache. Алексей Турбин поделился своими настройками:

~/.zshrc:
unset CCACHE_PATH
export GCC_USE_CCACHE=1
export CCACHE_DIR=$TMPDIR/.ccache
export CC=gcc CXX=g++

~/.rpmmacros:
%_tmppath       /tmp/.private/at
%__ccache_dir   %_tmppath/.ccache

ccache в etersoft-build-utils

В etersoft-build-utils-1.6.7-alt1 добавлена поддержка ccache. ccache кэширует результат компиляции и позволяет серьёзно ускорить пересборку пакетов. По умолчанию выставлен размер кэша в 1Гб. Кэш располагается в $TMPDIR/ccache и индивидуален для каждого пользователя. Может быть изменено в конфиге (~/.config/eterbuild) в строке export CCACHE_DIR=$OURTMPDIR/ccache

Добавлена новая команда jmake, которая вызвает make с двумя дополнениями: 1. включается ccache для сборки (если не задана переменная CCACHE_DISABLE в конф. файле) 2. make запускается с параметром -j NPROCS, задействуются все незанятые ядра процессоров при сборке.

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

rpmbb использует ccache, если это включено переменной CCACHE_ENABLE=yes в конфигурационном файле (~/.config/eterbuild)

Стандартная процедура

Если вы не хотите использовать etersoft-build-utils, вот описание использования стандартных команд:

Устанавливаем необходимые для сборки пакеты

# apt-get install rpm-build

Приводим спек по возможности в пригодный для использования вид:

$ cleanup_spec название.spec

Собираем пакет командой rpm -bb.