Etersoft-build-utils: различия между версиями

Материал из ALT Linux Wiki
Нет описания правки
 
(не показано 5 промежуточных версий 2 участников)
Строка 2: Строка 2:
{{MovedFromFreesourceInfo|AltLinux/Sisyphus/devel/etersoft-build-utils}}
{{MovedFromFreesourceInfo|AltLinux/Sisyphus/devel/etersoft-build-utils}}


==== ''Сборка пакетов'' ====
==== HOWTO ====
[[Etersoft-build-utils howto|HOWTO по сопровождению пакетов с помощью etersoft-build-utils]]
 
==== Сборка пакетов ====
 
Образец того, как надо оформлять спек, вы можете посмотреть в пакете wcalc или gnubiff. Настоятельно рекомендуется обратиться к документации, а также смотреть "как это сделано в другом пакете".


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


Устанавливаем файл *.src.rpm, который хотим собирать (''под пользователем''):
Устанавливаем файл *.src.rpm, который хотим собирать (''под пользователем''):
{| border="1"
|-
|
$ rpm -i название*.src.rpm
|}


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


Исходники пакета при этом разместятся в /RPM/SOURCES, а спек – в /RPM/SPECS.
Исходники пакета при этом разместятся в /RPM/SOURCES, а спек – в /RPM/SPECS.
Строка 23: Строка 24:
Заходим в каталог /RPM/SPECS, и видим там спек для собираемого пакета.
Заходим в каталог /RPM/SPECS, и видим там спек для собираемого пакета.
Если спек взят из другого дистрибутива, то сначала делаем
Если спек взят из другого дистрибутива, то сначала делаем
{| border="1"
<pre>$ rpmcs название.spec</pre>
|-
|
$ rpmcs название.spec
|}


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


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


Вы должны разместить исходники пакета (архивы) в /RPM/SOURCES, а шаблон будущего спека (скопированный из образца) – в /RPM/SPEC.
Вы должны разместить исходники пакета (архивы) в /RPM/SOURCES, а шаблон будущего спека (скопированный из образца) – в /RPM/SPEC.
Строка 51: Строка 48:
:::::::$ add_changelog example.spec -e 'Initial build'
:::::::$ add_changelog example.spec -e 'Initial build'


:::::::Более подробно об использовании этого скрипта вы можете узнать здесь: [http://wiki.sisyphus.ru/devel/spectips/addchangelog http://wiki.sisyphus.ru/devel/spectips/addchangelog]
:::::::Более подробно об использовании этого скрипта вы можете узнать [[Add changelog|здесь]].


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


Строка 61: Строка 59:
Стоит также воспользоваться имеющимися репозиториями открытой разработки. Зачастую, мейнтейнеры этих репозиториев, уже сталкивались с такими же проблемами, и возможно у них есть решение (патч) для сложившейся ситуации.
Стоит также воспользоваться имеющимися репозиториями открытой разработки. Зачастую, мейнтейнеры этих репозиториев, уже сталкивались с такими же проблемами, и возможно у них есть решение (патч) для сложившейся ситуации.
О том, как устранить отсутствие необходимых библиотек или заголовочных файлов, рассказано в следующем пункте.
О том, как устранить отсутствие необходимых библиотек или заголовочных файлов, рассказано в следующем пункте.
==== ''Поиск пакетов'' ====
==== ''Поиск пакетов'' ====


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


** [http://citkit.ru http://citkit.ru]
а также в репозитории открытой разработки.
** [http://rpm.pbone.net http://rpm.pbone.net]


а также в репозитории открытой разработки.
==== Сборочная среда Hasher ====
==== Сборочная среда Hasher ====


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


<!--
Если вы производите сборку на удалённом сервере, то рекомендуется воспользоваться командой <tt>screen</tt>:
Если вы производите сборку на удалённом сервере, то рекомендуется воспользоваться командой <tt>screen</tt>:
  $ screen
  $ screen
Далее, для отключения от сеанса: <tt>Ctrl-A, D</tt>
Далее, для отключения от сеанса: <tt>Ctrl-A, D</tt>
Для подключения обратно:
Для подключения обратно:
$ screen -r
<pre> $ screen -r</pre>
-->


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


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


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


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


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




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


'''Нужно перенести в более подходящее место:'''
'''Нужно перенести в более подходящее место:'''
=== Использование ccache ===
=== Использование ccache ===
Для ускорения сборки программного кода (если он пересобирается более одного раза) предлагается использовать ccache. Алексей Турбин поделился своими настройками:
Для ускорения сборки программного кода (если он пересобирается более одного раза) предлагается использовать ccache. Алексей Турбин поделился своими настройками:
<pre>~/.zshrc:
<pre>
~/.zshrc:
unset CCACHE_PATH
unset CCACHE_PATH
export GCC_USE_CCACHE=1
export GCC_USE_CCACHE=1
Строка 228: Строка 200:
=== ccache в etersoft-build-utils ===
=== ccache в etersoft-build-utils ===
В etersoft-build-utils-1.6.7-alt1 добавлена поддержка ccache.
В etersoft-build-utils-1.6.7-alt1 добавлена поддержка ccache.
ccache кэширует результат компиляции и позволяет серьёзно
ccache кэширует результат компиляции и позволяет серьёзно ускорить пересборку пакетов.
ускорить пересборку пакетов.
По умолчанию выставлен размер кэша в 1Гб. Кэш располагается в $TMPDIR/ccache и индивидуален для каждого пользователя. Может быть изменено в конфиге (~/.config/eterbuild) в строке export CCACHE_DIR=$OURTMPDIR/ccache
По умолчанию выставлен размер кэша в 1Гб. Кэш располагается
в $TMPDIR/ccache и индивидуален для каждого пользователя. Может быть изменено в конфиге (~/.config/eterbuild) в строке
export CCACHE_DIR=$OURTMPDIR/ccache


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


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


rpmbb использует ccache, если это включено переменной CCACHE_ENABLE=yes
rpmbb использует ccache, если это включено переменной CCACHE_ENABLE=yes в конфигурационном файле (~/.config/eterbuild)
в конфигурационном файле (~/.config/eterbuild)
 
 
 
=== Стандартная процедура ===
Если вы не хотите использовать etersoft-build-utils, вот описание использования стандартных команд:
 
Устанавливаем необходимые для сборки пакеты
<pre># apt-get install rpm-build</pre>
Приводим спек по возможности в пригодный для использования вид:
<pre>$ cleanup_spec название.spec</pre>


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


[[Категория:Devel]]
[[Категория:Devel]]
[[Категория:Packaging]]
[[Категория:Packaging]]

Текущая версия от 19:18, 20 декабря 2016

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)