Etersoft-build-utils: различия между версиями
Строка 212: | Строка 212: | ||
Ключ -u указывает отправить в инкоминг после сборки (-U – в Updates, а не backports) | Ключ -u указывает отправить в инкоминг после сборки (-U – в Updates, а не backports) | ||
Также есть команды loginhsh для входа в (тестовый) hasher. | Также есть команды loginhsh для входа в (тестовый) hasher. | ||
'''Нужно перенести в более подходящее место:''' | |||
=== Использование ccache === | |||
Для ускорения сборки программного кода (если он пересобирается более одного раза) предлагается использовать ccache. Алексей Турбин поделился своими настройками: | |||
<pre>~/.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</pre> | |||
=== ccache в etersoft-build-utils === | |||
В etersoft-build-utils-1.6.7-alt1 добавлена поддержка ccache. | |||
ccache кэширует результат компиляции и позволяет серьёзно | |||
ускорить пересборку пакетов. | |||
По умолчанию выставлен размер кэша в 1Гб. Кэш располагается | |||
в $TMPDIR/ccache и индивидуален для каждого пользователя. Может быть изменено в конфиге (~/.config/eterbuild) в строке | |||
export CCACHE_DIR=$OURTMPDIR/ccache | |||
Добавлена новая команда ccmake, которая вызвает make с двумя дополнениями: | |||
1. включается ccache для сборки (если не задана переменная CCACHE_DISABLE в конф. файле) | |||
2. make запускается с параметром -j NPROCS, задействуются все незанятые ядра процессоров при сборке. | |||
Количество незанятых ядер вычисляется как количество ядер минус средняя загрузка за последнюю минуту. Таким образом будут задействоваться незанятые ядра. | |||
rpmbb использует ccache, если это включено переменной CCACHE_ENABLE=yes | |||
в конфигурационном файле (~/.config/eterbuild) | |||
=== Стандартная процедура === | |||
Если вы не хотите использовать etersoft-build-utils, вот описание использования стандартных команд: | |||
Устанавливаем необходимые для сборки пакеты | |||
<pre># apt-get install rpm-build</pre> | |||
Приводим спек по возможности в пригодный для использования вид: | |||
<pre>$ cleanup_spec название.spec</pre> | |||
Собираем пакет командой <tt>rpm -bb</tt>. | |||
[[Категория:Devel]] | |||
[[Категория:Packaging]] |
Версия от 19:06, 19 сентября 2009
Сборка пакетов
Образец того, как надо оформлять спек, вы можете посмотреть в пакете 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
Добавлена новая команда ccmake, которая вызвает 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.