Сборка пакетов (etersoft-build-utils): различия между версиями

Материал из ALT Linux Wiki
Нет описания правки
Нет описания правки
 
(не показана 31 промежуточная версия 7 участников)
Строка 1: Строка 1:
[[Category:Devel]]
{{h0|Краткая инструкция по сборке пакетов с помощью <tt>etersoft-build-utils</tt>}}
{{MovedFromFreesourceInfo|AltLinux/Sisyphus/devel/СборкаПакетов}}


== Краткая инструкция по сборке пакетов в ALT Linux ==
Здесь рассмотрена процедура сборки [http://ru.wikipedia.org/wiki/RPM RPM-пакетов] для [[Main Page|ALT Linux]].
Это облегчённая инструкция для начинающих разработчиков, написанная с учётом использования пакета [[etersoft-build-utils]]. Обратите внимание, что команды из состава этого пакета всегда выводят те команды, которые используются для выполнения задачи. Это может помочь для понимания сути процесса.


Здесь рассмотрена процедура сборки [http://ru.wikipedia.org/wiki/RPM RPM-] пакетов для [[Main Page|ALT Linux]].
== Первоначальная настройка ==
Это облегчённая инструкция для начинающих [[Razrabotchiku|разработчиков]], написанная с учётом использования пакета etersoft-build-utils.
[http://tigro.info/blog/index.php?id=375 Сборка пакетов RPM и DEB  в других системах.]


__TOC__
=== С правами root ===
Устанавливаем пакеты, необходимые для сборки:
<pre># epm install etersoft-build-utils</pre>
Данный пакет «вытянет» по зависимостям всё остальное, обычно необходимое при сборке.


=== Под пользователем ===


=== Первоначальная настройка ===
==== Настройки для подписи пакетов ====
 
Записываем данные о сборщике в файле ~/.rpmmacros по следующему образцу:
==== С правами root ====
<pre>
 
%_topdir        %homedir/RPM
Устанавливаем пакеты, необходимые для сборки:
<pre># apt-get install etersoft-build-utils</pre>
Данный пакет &quot;вытянет&quot; по зависимостям всё остальное, обычно необходимое при сборке.
 
==== Под пользователем ====
Исправляем данные о сборщике в файле ~/.rpmmacros.
Вот, например, содержимое моего файла ~/.rpmmacros:
<pre>%_topdir        %homedir/RPM
%_tmppath      %homedir/tmp
%_tmppath      %homedir/tmp
%_gpg_path %homedir/.gnupg
%_gpg_path     %homedir/.gnupg
%_gpg_name Vitaly Lipatov <lav@altlinux.ru>
%_gpg_name     Vitaly Lipatov <lav@altlinux.org>
%packager Vitaly Lipatov <lav@altlinux.ru></pre>
%packager       Vitaly Lipatov <lav@altlinux.org>
Если вы являетесь мантейнером, то для того, чтобы подписывать пакеты и отправлять их для сборки в Сизиф, вы должны указать данные адреса, под которым вы зарегистрированы в ALT Linux.
</pre>
<div style="display: inline; color: red;">ВНИМАНИЕ! Сборка принципиально невозможна под учётной записью root.</div>


=== Сборка пакетов ===
Если вы [[Процедура принятия в Team|являетесь мантейнером]], то для того, чтобы подписывать пакеты и отправлять их для сборки в Сизиф, вы должны указать адреса, под которым вы зарегистрированы в ALT Linux Team.
<!--<div style="display: inline; color: red;">ВНИМАНИЕ! Сборка принципиально невозможна под учётной записью root.</div>-->


Образец того, как надо оформлять спек, вы можете посмотреть в пакете [http://sisyphus.ru/srpm/wcalc wcalc] или [http://sisyphus.ru/srpm/gnubiff gnubiff]. Настоятельно рекомендуется обратиться
==== Настройки для создания git-коммитов ====
к документации, а также смотреть &quot;как это сделано в другом пакете&quot;.
Получить src.rpm для установленного в систему пакета можно командой <tt>$ rpmgp название_пакета</tt>
Также образцы спеков для разных типов пакетов доступны [http://wiki.sisyphus.ru/devel/SampleSpecs здесь].


==== Подготовка уже имеющегося src.rpm ====
Для того, чтобы у создаваемых вами git-коммитов был правильный пользователь (будет применяться также и для подписи тэгов сборки):
$ git config --global user.email dottedmag@altlinux.org
$ git config --global user.name "Mikhail Gusarov"


Устанавливаем файл *.src.rpm, который хотим собирать (''под пользователем''):
Если у этого имени нет совпадения с gpg-ключом, можно задать его отдельно:
<pre>$ rpm -i название*.src.rpm</pre>
$ git config --global user.signingkey "<ID ключа GPG для подписи тэгов>"


Исходники пакета при этом разместятся в <tt>~/RPM/SOURCES</tt>, а спек - в <tt>~/RPM/SPECS</tt>.
Чтобы узнать свой <tt>user.signingkey</tt>, выполните команду
$ gpg --list-secret-keys
Искомое значение находится в секции sec. Его-то и следует прописать в переменную <tt>user.signingkey</tt>, предварительно снабдив символами <tt>0x</tt>


Заходим в каталог <tt>~/RPM/SPECS</tt>, и видим там спек для собираемого пакета.
В итоге должна получиться команда такого вида:
Если спек взят из другого дистрибутива, то сначала делаем
$ git config --global user.signingkey 0xA26F54C8
<pre>$ rpmcs название.spec</pre>
чтобы привести спек в пригодный для использования вид. Далее его нужно поправить вручную, используя взятый из ALT Linux пример спека в качестве образца.


==== Сборка пакета &quot;с нуля&quot; ====
Внесённые данные хранятся в <tt>~/.gitconfig</tt> и их всегда можно исправить.
Вы должны разместить исходники пакета (архивы) в <tt>~/RPM/SOURCES</tt>, а шаблон будущего спека (скопированный из образца) - в <tt>~/RPM/SPEC</tt>.


==== Типовые действия ====
==== Настройки для доступа к git-репозиторию и сборочнице ====
Находясь в каталоге SPEC:


<tt>$ rpmbb название.spec</tt>
Доступ к gitery (git-сервер) и gyle (сборочный сервер) осуществляется через git.
:::для сборки двоичного пакета (он будет создан в ~/RPM/RPMS)
Вам нужно будет внести настройки в ''''~.ssh/config''' по образцу, заменив USERNAME на свой логин:


<tt>$ rpmbb -r название.spec</tt>
<source lang=text>
:::для того, чтобы в пакет автоматически прописались зависимости на пакеты, необходимые при сборке. Если пересобирается уже имеющийся пакет из Сизифа, то это не обязательно. (см. также [http://wiki.sisyphus.ru/devel/spectips/buildreq Использование buildreq])
# Гитовница
  Host gitery
    HostName gitery.altlinux.org
    User alt_USERNAME # а не просто USERNAME!
    Port 222


<tt>$ add_changelog название.spec</tt>
# Сборочница
:::для добавления строчки о данной сборке в секцию %changelog, в конце спека. После этого следует в спеке дописать комментарий, какие изменения были сделаны в данной сборке. Иногда также бывает удобно сразу указать список изменений:
  Host gyle
    HostName gyle.altlinux.org
    User alt_USERNAME # а не просто USERNAME!
    Port 222
</source>


:::<tt>$ add_changelog example.spec -e 'Initial build'</tt>
== Сборка пакетов ==
Образец того, как надо оформлять спек, вы можете посмотреть в пакете [http://packages.altlinux.org/ru/Sisyphus/srpms/wcalc wcalc] или [http://packages.altlinux.org/ru/Sisyphus/srpms/gnubiff gnubiff]. Настоятельно рекомендуется обратиться к [[Spectips|документации]], а также смотреть «как это сделано в другом пакете».


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


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


=== Ошибки при сборке ===
Можно взять за основу пакет, собранный в стороннем репозитории. Поискать поможет
Для начала, нужно локализовать проблему -- определить, является ли она проблемой конкретного дистрибутива/системы (например: отсутствие или неверная версия необходимых для сборки библиотек, специфика дистрибутива)  или более глобальной (например: несобираемость определённой версией компилятора, ошибки в коде, несоответствие кода новым стандартам).
$ rpmgp -a название
В первом случае, поможет осуществить поиск по дистрибутиву/репозиторию, [http://search.altlinux.ru поискать] решение проблемы в [http://lists.altlinux.org архивах почтовых рассылок] или непосредственно попросить помощи в тематических конференциях, посвещенных дистрибутиву (sisyphus, devel, community). <div style="display: inline; color: red;">ВНИМАНИЕ: порядок действий, для решения проблемы имеет значение (репозиторий -&gt; поиск в архиве -&gt; рассылки)</div>.
Во втором случае, стоит начать с поиска готовых решений. В открытом сообществе, считается хорошим тоном публиковать решения найденных проблем. Зачастую, поисковики выдают море полезной информации по кратко описанной в трёх-пяти словах  проблеме конкретного софта или тексту ошибки, полученной при сборке. Например,  запроса вида &quot; gcc4.1 mysoftware patch&quot; может быть достаточно для поиска патча, решающего проблему сборки с новым gcc4.1).
Стоит также воспользоваться имеющимися [http://wiki.sisyphus.ru/devel/repositories репозиториями открытой разработки]. Зачастую, мейнтейнеры этих репозиториев, уже сталкивались с такими же проблемами, и возможно у них есть решение (патч) для сложившейся ситуации.
О том, как устранить отсутствие необходимых библиотек или заголовочных файлов, рассказано в следующем пункте.


=== Поиск пакетов ===
Загрузить:
Возможно при сборке вам придётся доустанавливать недостающие библиотеки. Имейте в виду, что в ALT принято называть пакеты для разработки так: libX-devel, где X - название библиотеки. Пользуйтесь <tt>apt-cache search название</tt> для поиска недостающего пакета. Если пакета нет в вашей системе, поищите его в [http://sisyphus.ru/ Сизифе]. Если его нет и там, обратитесь к крупным собраниям информации о пакетах:
$ rpmgp -a -d <полная строка с названием пакета>
* [http://citkit.ru http://citkit.ru]
* [http://rpm.pbone.net http://rpm.pbone.net]
а также в [http://wiki.sisyphus.ru/devel/repositories репозитории открытой разработки].


=== Сборочная среда Hasher ===
Создать git-репозиторий из пакета src.rpm:
Чтобы убедиться в том, что все зависимости правильны и сборка вашего пакета нормально пройдёт на сборочном сервере в ALT Linux, используется Hasher -- среда, которая позволяет осуществить сборку пакета в «чистой» системе, куда установлены только пакеты, указанные в сборочных зависимостях.
$ rpmgp -m пакет.src.rpm
<pre>$ sudo apt-get install hasher</pre>
Для настройки сборочной среды hasher нужно добавить пользователя:
# hasher-useradd имя_пользователя
(после этого надо заново зайти в систему)
См . README в /usr/share/doc/hasher-*/


Для сборки пакета в hasher запускаем
=== Создание репозитория пакета с нуля ===
<pre>rpmbsh -i -u спек.spec</pre>
Эта команда соберёт пакет, установит его в тестовый hasher, после чего предложит отправить его в Incoming.


Если вы производите сборку на удалённом сервере, то рекомендуется воспользоваться командой screen.
Сначала создаём каталог и инициализируем в нём git-репозиторий:
Запускаете: $screen
mkdir mypackage && cd mypackage && git init
Далее, для отключения от сеанса: Ctrl-A, D
Для подключения обратно команду $screen -r


==== Лимиты на сборку у инкамингера ====
Минимально в репозитории должен присутствовать файл <tt>.gear/rules</tt> с правилами упаковки тарбола. Обычно его минимальное содержимое таково:
<pre>
tar: @name@
</pre>


При сборке пакетов в сборочном окружении используются следующие лимиты:
и спек с названием <tt>mypackage.spec</tt>.
<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</pre>
ldv@ in [http://lists.altlinux.ru/pipermail/devel/2006-April/030876.html devel]


=== Вспомогательные скрипты для сборки ===
Имеются [[SampleSpecs|образцы спеков]] для разных типов пакетов.


Существует набор скриптов, облегчающих процесс сборки, собранный в пакет etersoft-build-utils. В параметрах скриптов обычно указываются названия спеков.
На всё богатство уже существующих спеков можно любоваться здесь: https://github.com/altlinux/specs или на сайте https://packages.altlinux.org .


{| border="1"
=== Типовые действия при сборке ===
|-
|
Вспомог.
|
Обычная
|
Где результат
|
Комментарий
|-
|
rpmbb
|
rpm -bb
|
~/RPM/RPMS
|
полная сборка пакета
|-
|
rpmbb -r
|
buildreq
|
Спек, строка BuildRequires:
|
вычисление необходимых  зависимостей сборки с занесением в спек
|-
|
rpmbs -u
|


|
rpmbb
~/RPM/remote/upload
::: для сборки пакета (он будет записан в <tt>~/RPM/RPMS</tt>)
|
собрать src.rpm, подписать его и выложить в Incoming; удалить buildroot
|-
|
rpmbsh [ -r ] [-m]
|


|
<!--
~/hasher/repo/i586/RPMS.hasher
rpmbb -r
|
::: для того, чтобы в пакет автоматически прописались зависимости на пакеты, необходимые при сборке. (см. также [[Buildreq|Использование buildreq]])
собрать из спека src.rpm и отправить его на сборку в hasher (если сразу указан src.rpm, собираем его)
Сформированные зависимости (в строчке BuildRequires) желательно просмотреть, чтобы там не было откровенно ненужных пакетов.
|-
-->
|
rpmbb -i
|


|
add_changelog название.spec
~/RPM/RPMS
::: для добавления строчки о данной сборке в секцию %changelog, в конце спека. После этого следует в спеке дописать комментарий, какие изменения были сделаны в данной сборке.
|
выполнить установку и упаковку пакета, пропустив компиляцию
|-
|
rpmrb спек версия
|


|


|
== Ошибки при сборке ==
для указанного спека скачивает архив с исходниками новой (указанной) версии, собирает в hasher и устанавливает в тестовый hasher
Для начала, нужно локализовать проблему — определить, является ли она проблемой конкретного дистрибутива/системы (например: отсутствие или неверная версия необходимых для сборки библиотек, специфика дистрибутива) или более глобальной (например: несобираемость определённой версией компилятора, ошибки в коде, несоответствие кода новым стандартам).
|-
В первом случае, поможет осуществить поиск по дистрибутиву/репозиторию, поискать решение проблемы в архивах [[Списки рассылки|почтовых рассылок]] или непосредственно попросить помощи в рассылке (sisyphus, devel, community).
|
rpmgs спек
|


|
Во втором случае, стоит начать с поиска готовых решений. В открытом сообществе, считается хорошим тоном публиковать решения найденных проблем. Зачастую, поисковики выдают море полезной информации по кратко описанной в трёх-пяти словах проблеме конкретного софта или тексту ошибки, полученной при сборке. Например, запроса вида «gcc4.1 mysoftware patch» может быть достаточно для поиска патча, решающего проблему сборки с новым gcc4.1).


|
Стоит также ознакомиться с другими [[Repositories|репозиториями с пакетами открытой разработки]]. Зачастую там уже сталкивались с подобными проблемами, и у них есть готовое решение (патч).
для указанного спека скачивает архив с исходниками
|-
|
rpmgp пакет
|


|
<!--О том, как устранить отсутствие необходимых библиотек или заголовочных файлов, рассказано в следующем пункте.-->


|
== Поиск пакетов ==
для указанного пакета скачивает src.rpm
Возможно при сборке вам придётся доустанавливать недостающие библиотеки. Имейте в виду, что в ALT принято называть пакеты для разработки так: libX-devel, где X — название библиотеки.
|-
|
rpmbph [-M30] спек
|


|
Используйте
epm search название
для поиска недостающего пакета или
epm sf слово
для поиска по файлам, содержащимся в пакетах.


|
== Сборочная среда Hasher ==
выполняет бэкпорт указанного спека в указанный дистрибутив
Чтобы убедиться в том, что все зависимости правильны и сборка вашего пакета нормально пройдёт на сборочном сервере в ALT Linux, используется Hasher — среда, которая позволяет осуществить сборку пакета в «чистой» системе, куда установлены только пакеты, указанные в сборочных зависимостях.
|-
|
rpmbs
|
rpm -bs
|
~/RPM/SRPMS
|
собрать src.rpm
|-
|
rpmcs спек
|
cleanup_spec
|
-
|
привести спек к стандартам ALT Linux
|-
|
rpmbb -c
|
rpm -bc --short-circuit
|
~/RPM/BUILD
|
компиляция без установки
|}


<s>Ключ -m указывает произвести сборку в фоновом режиме и прислать лог по почте</s> (не работает)
=== Под рутом ===
Ключ -r указывает произвести сборку на удалённом сервере
Устанавливаем hasher:
Ключ -u указывает отправить в инкоминг после сборки (-U - в Updates, а не backports)
# epm install hasher
Также есть команды loginhsh для входа в (тестовый) hasher.


=== Использование ccache ===
Перед использованием сборочной среды hasher нужно добавить специальных пользователей hasher:
Для ускорения сборки программного кода (если он пересобирается более одного раза) предлагается использовать ccache. Алексей Турбин поделился своими настройками:
# hasher-useradd <ваш_логин>
<pre>~/.zshrc:
Далее выйдите из системы (logout) и зайдите обратно (hasher-useradd изменяет список групп, в которых состоит пользователь).
unset CCACHE_PATH
export GCC_USE_CCACHE=1
export CCACHE_DIR=$TMPDIR/.ccache
export CC=gcc CXX=g++


~/.rpmmacros:
<!-- См. README в /usr/share/doc/hasher-*/ -->
%_tmppath      /tmp/.private/at
%__ccache_dir  %_tmppath/.ccache</pre>


=== Стандартная процедура ===
=== Сборка ===
Для сборки пакета в hasher запускаем
rpmbsh -i


Если вы не хотите использовать etersoft-build-utils, вот описание использования стандартных команд:
Эта команда соберёт пакет и установит его в тестовый hasher, где его можно будет проверить на работоспособность.


Устанавливаем необходимые для сборки пакеты
Обратите внимание, что сборка в hasher не учитывает незакоммиченные в репозиторий изменения. Возможны следующие варианты: <tt>rpmbsh -t</tt> (запустить сборку с учётом незакоммиченных изменений) или <tt>gamend</tt> (прилепить незакоммиченные изменения к последнему коммиту.
<pre># apt-get install rpm-build</pre>
Приводим спек по возможности в пригодный для использования вид:
<pre>$ cleanup_spec название.spec</pre>


Собираем пакет командой <tt>rpm -bb</tt>.
Для ускорения повторной пересборки в процессе исправления ошибок, можно не пересоздавать сборочное окружение каждый раз и действовать следующим образом. Первый раз:
 
rpmbsh -l
=== Дополнительная документация ===
::: -l — не очищать окружение после сборки
далее повторные сборки запускать с параметром -e:
rpmbsh -e
::: будет использовано уже созданное сборочное окружение.


== Дополнительная документация ==
* [[Etersoft-build-utils howto]]
* Sisyphus:/devel/RpmSetup
* Sisyphus:/devel/RpmSetup
* [[ОсобенностиСборкиПакетов|Описание нюансов сборки RPM-пакетов в ALT Linux и не только]]
* [[ОсобенностиСборкиПакетов|Описание нюансов сборки RPM-пакетов в ALT Linux и не только]]
* [http://tigro.info/blog/index.php?id=375 Сборка пакетов RPM и DEB в других системах.]


При сборке пакетов сверяйтесь со следующей документацией:
При сборке пакетов сверяйтесь со следующей документацией:
* [http://docs.altlinux.ru/alt/devel/ Документация разработчика ALT Linux]
* [http://docs.altlinux.ru/alt/devel/ Документация разработчика ALT Linux]
* [http://www.freesource.info/wiki/ALTLinux/Dokumentacija/Hasher Сборка программ для ALTLinux с использованием hasher]
* [[Hasher|Сборка программ для ALTLinux с использованием hasher]]
* [http://atmsk.altlinux.org.ua/index.php?option=articles&amp;Itemid=3&amp;topid=9 Статьи по сборке пакетов]
<!--* [http://atmsk.altlinux.org.ua/index.php?option=articles&amp;Itemid=3&amp;topid=9 Статьи по сборке пакетов]-->
 
Краткие справочники команд RPM и APT - на странице [http://www.linux-os.ru/articles http://www.linux-os.ru/articles]  (спасти, поскольку сервер не работает)
 


Vitaly Lipatov &lt;lav@etersoft.ru&gt;, 11.01.04, 08.03.04, 28.10.04, 28.02.2005, 04.09.2005, 21.02.2006
[[Категория:Devel]]
[[Категория:Packaging]]

Текущая версия от 15:34, 11 мая 2023

Краткая инструкция по сборке пакетов с помощью etersoft-build-utils

Здесь рассмотрена процедура сборки RPM-пакетов для ALT Linux. Это облегчённая инструкция для начинающих разработчиков, написанная с учётом использования пакета etersoft-build-utils. Обратите внимание, что команды из состава этого пакета всегда выводят те команды, которые используются для выполнения задачи. Это может помочь для понимания сути процесса.

Первоначальная настройка

С правами root

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

# epm install etersoft-build-utils

Данный пакет «вытянет» по зависимостям всё остальное, обычно необходимое при сборке.

Под пользователем

Настройки для подписи пакетов

Записываем данные о сборщике в файле ~/.rpmmacros по следующему образцу:

%_topdir        %homedir/RPM
%_tmppath       %homedir/tmp
%_gpg_path      %homedir/.gnupg
%_gpg_name      Vitaly Lipatov <lav@altlinux.org>
%packager       Vitaly Lipatov <lav@altlinux.org>

Если вы являетесь мантейнером, то для того, чтобы подписывать пакеты и отправлять их для сборки в Сизиф, вы должны указать адреса, под которым вы зарегистрированы в ALT Linux Team.

Настройки для создания git-коммитов

Для того, чтобы у создаваемых вами git-коммитов был правильный пользователь (будет применяться также и для подписи тэгов сборки):

$ git config --global user.email dottedmag@altlinux.org
$ git config --global user.name "Mikhail Gusarov"

Если у этого имени нет совпадения с gpg-ключом, можно задать его отдельно:

$ git config --global user.signingkey "<ID ключа GPG для подписи тэгов>"

Чтобы узнать свой user.signingkey, выполните команду

$ gpg --list-secret-keys

Искомое значение находится в секции sec. Его-то и следует прописать в переменную user.signingkey, предварительно снабдив символами 0x

В итоге должна получиться команда такого вида:

$ git config --global user.signingkey 0xA26F54C8

Внесённые данные хранятся в ~/.gitconfig и их всегда можно исправить.

Настройки для доступа к git-репозиторию и сборочнице

Доступ к gitery (git-сервер) и gyle (сборочный сервер) осуществляется через git. Вам нужно будет внести настройки в '~.ssh/config по образцу, заменив USERNAME на свой логин:

 # Гитовница
   Host gitery
     HostName gitery.altlinux.org
     User alt_USERNAME # а не просто USERNAME!
     Port 222

 # Сборочница
   Host gyle
     HostName gyle.altlinux.org
     User alt_USERNAME # а не просто USERNAME!
     Port 222

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

Образец того, как надо оформлять спек, вы можете посмотреть в пакете wcalc или gnubiff. Настоятельно рекомендуется обратиться к документации, а также смотреть «как это сделано в другом пакете».

Основываясь на существующем пакете

Получить git-репозиторий по названию исходного пакета можно командой

$ rpmgp -g название_пакета

Можно взять за основу пакет, собранный в стороннем репозитории. Поискать поможет

$ rpmgp -a название

Загрузить:

$ rpmgp -a -d <полная строка с названием пакета>

Создать git-репозиторий из пакета src.rpm:

$ rpmgp -m пакет.src.rpm

Создание репозитория пакета с нуля

Сначала создаём каталог и инициализируем в нём git-репозиторий:

mkdir mypackage && cd mypackage && git init

Минимально в репозитории должен присутствовать файл .gear/rules с правилами упаковки тарбола. Обычно его минимальное содержимое таково:

tar: @name@

и спек с названием mypackage.spec.

Имеются образцы спеков для разных типов пакетов.

На всё богатство уже существующих спеков можно любоваться здесь: https://github.com/altlinux/specs или на сайте https://packages.altlinux.org .

Типовые действия при сборке

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


add_changelog название.spec
для добавления строчки о данной сборке в секцию %changelog, в конце спека. После этого следует в спеке дописать комментарий, какие изменения были сделаны в данной сборке.


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

Для начала, нужно локализовать проблему — определить, является ли она проблемой конкретного дистрибутива/системы (например: отсутствие или неверная версия необходимых для сборки библиотек, специфика дистрибутива) или более глобальной (например: несобираемость определённой версией компилятора, ошибки в коде, несоответствие кода новым стандартам). В первом случае, поможет осуществить поиск по дистрибутиву/репозиторию, поискать решение проблемы в архивах почтовых рассылок или непосредственно попросить помощи в рассылке (sisyphus, devel, community).

Во втором случае, стоит начать с поиска готовых решений. В открытом сообществе, считается хорошим тоном публиковать решения найденных проблем. Зачастую, поисковики выдают море полезной информации по кратко описанной в трёх-пяти словах проблеме конкретного софта или тексту ошибки, полученной при сборке. Например, запроса вида «gcc4.1 mysoftware patch» может быть достаточно для поиска патча, решающего проблему сборки с новым gcc4.1).

Стоит также ознакомиться с другими репозиториями с пакетами открытой разработки. Зачастую там уже сталкивались с подобными проблемами, и у них есть готовое решение (патч).


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

Возможно при сборке вам придётся доустанавливать недостающие библиотеки. Имейте в виду, что в ALT принято называть пакеты для разработки так: libX-devel, где X — название библиотеки.

Используйте

epm search название

для поиска недостающего пакета или

epm sf слово

для поиска по файлам, содержащимся в пакетах.

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

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

Под рутом

Устанавливаем hasher:

# epm install hasher

Перед использованием сборочной среды hasher нужно добавить специальных пользователей hasher:

# hasher-useradd <ваш_логин>

Далее выйдите из системы (logout) и зайдите обратно (hasher-useradd изменяет список групп, в которых состоит пользователь).


Сборка

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

rpmbsh -i

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

Обратите внимание, что сборка в hasher не учитывает незакоммиченные в репозиторий изменения. Возможны следующие варианты: rpmbsh -t (запустить сборку с учётом незакоммиченных изменений) или gamend (прилепить незакоммиченные изменения к последнему коммиту.

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

rpmbsh -l
-l — не очищать окружение после сборки

далее повторные сборки запускать с параметром -e:

rpmbsh -e
будет использовано уже созданное сборочное окружение.

Дополнительная документация

При сборке пакетов сверяйтесь со следующей документацией: