Etersoft-build-utils

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


HOWTO

HOWTO по сопровождению пакетов с помощью etersoft-build-utils

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

Образец того, как надо оформлять спек, вы можете посмотреть в пакете 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'
Более подробно об использовании этого скрипта вы можете узнать здесь.

Сформированные зависимости (строчка 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.


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

При сборке пакетов в сборочном окружении используются следующие лимиты: В терминах 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 BB = Binary Build rpm -bb /RPM/RPMS сборка бинарного пакета
rpmbb -r ! -R buildreq [-bi] Спек, строка BuildRequires: вычисление необходимых зависимостей сборки с занесением в спек
rpmbs -u BS = Build Source задание на сборку собрать src.rpm, подписать его и выложить в Incoming; удалить buildroot
rpmbsh [ -r ] BSH = Build Source with Hasher /hasher/repo/i586/RPMS.hasher собрать из спека src.rpm и отправить его на сборку в hasher (если сразу указан src.rpm, собираем его)
rpmcs спек CS = cleanup spec cleanup_spec привести спек в соответствие с требованиями
rpmrb спек [версия] RB = Release? Build для указанного спека скачивает архив с исходниками новой (указанной) версии, собирает в hasher и устанавливает в тестовый hasher
rpmgs спек GS = Get Source для указанного спека скачивает архив с исходниками
rpmgp пакет GP = Get Package для указанного пакета скачивает src.rpm
rpmbph -b p8 спек BPH = BackPort and build with Hasher выполняет бэкпорт указанного спека в указанный дистрибутив
rpmbs BS = Build Source rpm -bs /RPM/SRPMS собрать src.rpm
rpmbb -i /RPM/RPMS выполнить установку и упаковку пакета, пропустив компиляцию
rpmbb -c rpm -bc --short-circuit /RPM/BUILD компиляция без установки


  • Ключ -r указывает произвести сборку на удалённом сервере
  • Ключ -u указывает отправить на сборку в girar после локальной сборки

Также есть команда loginhsh -t для входа в (тестовый) 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 с двумя дополнениями:

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

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

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