Сборка пакетов (etersoft-build-utils)

Материал из ALT Linux Wiki

(Различия между версиями)
Перейти к: навигация, поиск
(Сборка пакетов)
 
(18 промежуточных версий не показаны.)
Строка 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]].
 +
Описана процедура сборки пакета устаревшим способом, с получением src.rpm, без использования [[Краткое руководство по сборке с gear|git/gear]].
-
Здесь рассмотрена процедура сборки [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 ====
+
 +
=== С правами root ===
Устанавливаем пакеты, необходимые для сборки:
Устанавливаем пакеты, необходимые для сборки:
<pre># apt-get install etersoft-build-utils</pre>
<pre># apt-get install etersoft-build-utils</pre>
-
Данный пакет &quot;вытянет&quot; по зависимостям всё остальное, обычно необходимое при сборке.
+
Данный пакет «вытянет» по зависимостям всё остальное, обычно необходимое при сборке.
-
==== Под пользователем ====
+
=== Под пользователем ===
-
Исправляем данные о сборщике в файле ~/.rpmmacros.  
+
Исправляем данные о сборщике в файле ~/.rpmmacros.
Вот, например, содержимое моего файла ~/.rpmmacros:
Вот, например, содержимое моего файла ~/.rpmmacros:
<pre>%_topdir        %homedir/RPM
<pre>%_topdir        %homedir/RPM
Строка 27: Строка 20:
%_gpg_name Vitaly Lipatov <lav@altlinux.ru>
%_gpg_name Vitaly Lipatov <lav@altlinux.ru>
%packager Vitaly Lipatov <lav@altlinux.ru></pre>
%packager Vitaly Lipatov <lav@altlinux.ru></pre>
-
Если вы являетесь мантейнером, то для того, чтобы подписывать пакеты и отправлять их для сборки в Сизиф, вы должны указать данные адреса, под которым вы зарегистрированы в ALT Linux.
 
-
<div style="display: inline; color: red;">ВНИМАНИЕ! Сборка принципиально невозможна под учётной записью root.</div>
 
-
=== Сборка пакетов ===
+
Если вы [[Процедура принятия в Team|являетесь мантейнером]], то для того, чтобы подписывать пакеты и отправлять их для сборки в Сизиф, вы должны указать адреса, под которым вы зарегистрированы в ALT Linux.
 +
<div style="display: inline; color: red;">ВНИМАНИЕ! Сборка принципиально невозможна под учётной записью root.</div>
-
Образец того, как надо оформлять спек, вы можете посмотреть в пакете [http://sisyphus.ru/srpm/wcalc wcalc] или [http://sisyphus.ru/srpm/gnubiff gnubiff]. Настоятельно рекомендуется обратиться
+
== Сборка пакетов ==
-
к документации, а также смотреть &quot;как это сделано в другом пакете&quot;.
+
Образец того, как надо оформлять спек, вы можете посмотреть в пакете [http://packages.altlinux.org/ru/Sisyphus/srpms/wcalc wcalc] или [http://packages.altlinux.org/ru/Sisyphus/srpms/gnubiff gnubiff]. Настоятельно рекомендуется обратиться к [[Spectips|документации]], а также смотреть «как это сделано в другом пакете».
Получить src.rpm для установленного в систему пакета можно командой <tt>$ rpmgp название_пакета</tt>
Получить src.rpm для установленного в систему пакета можно командой <tt>$ rpmgp название_пакета</tt>
Также образцы спеков для разных типов пакетов доступны [http://wiki.sisyphus.ru/devel/SampleSpecs здесь].
Также образцы спеков для разных типов пакетов доступны [http://wiki.sisyphus.ru/devel/SampleSpecs здесь].
-
==== Подготовка уже имеющегося src.rpm ====
+
=== [[ Gear + Hasher ]] ===
 +
 +
=== Подготовка уже имеющегося src.rpm ===
Устанавливаем файл *.src.rpm, который хотим собирать (''под пользователем''):
Устанавливаем файл *.src.rpm, который хотим собирать (''под пользователем''):
<pre>$ rpm -i название*.src.rpm</pre>
<pre>$ rpm -i название*.src.rpm</pre>
-
Исходники пакета при этом разместятся в <tt>~/RPM/SOURCES</tt>, а спек - в <tt>~/RPM/SPECS</tt>.
+
Исходники пакета при этом разместятся в <tt>~/RPM/SOURCES</tt>, а спек — в <tt>~/RPM/SPECS</tt>.
Заходим в каталог <tt>~/RPM/SPECS</tt>, и видим там спек для собираемого пакета.
Заходим в каталог <tt>~/RPM/SPECS</tt>, и видим там спек для собираемого пакета.
Если спек взят из другого дистрибутива, то сначала делаем
Если спек взят из другого дистрибутива, то сначала делаем
<pre>$ rpmcs название.spec</pre>
<pre>$ rpmcs название.spec</pre>
-
чтобы привести спек в пригодный для использования вид. Далее его нужно поправить вручную, используя взятый из ALT Linux пример спека в качестве образца.
+
чтобы привести спек в пригодный для использования вид. Далее его нужно поправить вручную, мысленно используя взятый из ALT Linux пример спека в качестве образца.
-
==== Сборка пакета &quot;с нуля&quot; ====
+
=== Сборка пакета «с нуля» ===
-
Вы должны разместить исходники пакета (архивы) в <tt>~/RPM/SOURCES</tt>, а шаблон будущего спека (скопированный из образца) - в <tt>~/RPM/SPEC</tt>.
+
-
==== Типовые действия ====
+
Вы должны разместить исходники пакета (архивы) в <tt>~/RPM/SOURCES</tt>, а шаблон будущего спека (скопированный из образца) — в <tt>~/RPM/SPEC</tt>.
-
Находясь в каталоге SPEC:
+
 
 +
=== Типовые действия ===
 +
Находясь в каталоге RPM/SPECS:
<tt>$ rpmbb название.spec</tt>
<tt>$ rpmbb название.spec</tt>
-
:::для сборки двоичного пакета (он будет создан в ~/RPM/RPMS)
+
::: для сборки двоичного пакета (он будет записан в ~/RPM/RPMS)
<tt>$ rpmbb -r название.spec</tt>
<tt>$ rpmbb -r название.spec</tt>
-
:::для того, чтобы в пакет автоматически прописались зависимости на пакеты, необходимые при сборке. Если пересобирается уже имеющийся пакет из Сизифа, то это не обязательно. (см. также [http://wiki.sisyphus.ru/devel/spectips/buildreq Использование buildreq])
+
::: для того, чтобы в пакет автоматически прописались зависимости на пакеты, необходимые при сборке. Если пересобирается уже имеющийся пакет из Сизифа, то это обычно не нужно. (см. также [[Buildreq|Использование buildreq]])
<tt>$ add_changelog название.spec</tt>
<tt>$ add_changelog название.spec</tt>
-
:::для добавления строчки о данной сборке в секцию %changelog, в конце спека. После этого следует в спеке дописать комментарий, какие изменения были сделаны в данной сборке. Иногда также бывает удобно сразу указать список изменений:
+
::: для добавления строчки о данной сборке в секцию %changelog, в конце спека. После этого следует в спеке дописать комментарий, какие изменения были сделаны в данной сборке.  
 +
Сформированные зависимости (в строчке BuildRequires) желательно просмотреть, чтобы там не было откровенно ненужных пакетов.
-
:::<tt>$ add_changelog example.spec -e 'Initial build'</tt>
+
== Ошибки при сборке ==
 +
Для начала, нужно локализовать проблему — определить, является ли она проблемой конкретного дистрибутива/системы (например: отсутствие или неверная версия необходимых для сборки библиотек, специфика дистрибутива) или более глобальной (например: несобираемость определённой версией компилятора, ошибки в коде, несоответствие кода новым стандартам).
 +
В первом случае, поможет осуществить поиск по дистрибутиву/репозиторию, поискать решение проблемы в архивах [[Списки рассылки|почтовых рассылок]] или непосредственно попросить помощи в рассылке (sisyphus, devel, community).
-
::: Более подробно об использовании этого скрипта вы можете узнать здесь: [http://wiki.sisyphus.ru/devel/spectips/addchangelog http://wiki.sisyphus.ru/devel/spectips/addchangelog]
+
Во втором случае, стоит начать с поиска готовых решений. В открытом сообществе, считается хорошим тоном публиковать решения найденных проблем. Зачастую, поисковики выдают море полезной информации по кратко описанной в трёх-пяти словах проблеме конкретного софта или тексту ошибки, полученной при сборке. Например, запроса вида «gcc4.1 mysoftware patch» может быть достаточно для поиска патча, решающего проблему сборки с новым gcc4.1).
-
Сформированные зависимости (строчка BuildRequires) нужно просмотреть, чтобы там не было ненужных пакетов. Правильность сборки проверяется пересборкой готового пакета в hasher (см. ниже).
+
Стоит также воспользоваться другими [[Repositories|репозиториями с пакетами открытой разработки]]. Зачастую, мейнтейнеры этих репозиториев, уже сталкивались с такими же проблемами, и возможно у них есть решение (патч) для сложившейся ситуации.
-
=== Ошибки при сборке ===
 
-
Для начала, нужно локализовать проблему -- определить, является ли она проблемой конкретного дистрибутива/системы (например: отсутствие или неверная версия необходимых для сборки библиотек, специфика дистрибутива)  или более глобальной (например: несобираемость определённой версией компилятора, ошибки в коде, несоответствие кода новым стандартам).
 
-
В первом случае, поможет осуществить поиск по дистрибутиву/репозиторию, поискать решение проблемы в [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/ Сизифе]. Если его нет и там, обратитесь к крупным собраниям информации о пакетах:
+
Возможно при сборке вам придётся доустанавливать недостающие библиотеки. Имейте в виду, что в ALT принято называть пакеты для разработки так: libX-devel, где X — название библиотеки. Пользуйтесь <tt>apt-cache search название</tt> для поиска недостающего пакета. Если пакета нет в вашей системе, поищите его в [http://packages.altlinux.org/ru/Sisyphus/home Сизифе]. Если его нет и там, обратитесь к крупным собраниям информации о пакетах:
* [http://citkit.ru http://citkit.ru]
* [http://citkit.ru http://citkit.ru]
* [http://rpm.pbone.net http://rpm.pbone.net]
* [http://rpm.pbone.net http://rpm.pbone.net]
-
а также в [http://wiki.sisyphus.ru/devel/repositories репозитории открытой разработки].
+
а также в [[Repositories|репозиториях открытой разработки]].
 +
 
 +
В etersoft-build-utils есть команда <tt>rpmgp -a название</tt> для поиска пакета с указанным названием в других репозиториях. Далее с помощью этого же скрипта его можно скачать (параметр -d). Похожую функцию по поиску выполняет команда whohas из пакета whohas.
 +
 
 +
== Сборочная среда Hasher ==
 +
Чтобы убедиться в том, что все зависимости правильны и сборка вашего пакета нормально пройдёт на сборочном сервере в ALT Linux, используется Hasher — среда, которая позволяет осуществить сборку пакета в «чистой» системе, куда установлены только пакеты, указанные в сборочных зависимостях.
 +
<pre># epm install hasher</pre>
-
=== Сборочная среда Hasher ===
 
-
Чтобы убедиться в том, что все зависимости правильны и сборка вашего пакета нормально пройдёт на сборочном сервере в ALT Linux, используется Hasher -- среда, которая позволяет осуществить сборку пакета в «чистой» системе, куда установлены только пакеты, указанные в сборочных зависимостях.
 
-
<pre>$ sudo apt-get install hasher</pre>
 
Для настройки сборочной среды hasher нужно добавить пользователя:
Для настройки сборочной среды hasher нужно добавить пользователя:
# hasher-useradd имя_пользователя
# hasher-useradd имя_пользователя
(после этого надо заново зайти в систему)
(после этого надо заново зайти в систему)
-
  См . README в /usr/share/doc/hasher-*/
+
  См. README в /usr/share/doc/hasher-*/
Для сборки пакета в hasher запускаем
Для сборки пакета в hasher запускаем
-
<pre>rpmbsh -i -u спек.spec</pre>
+
<pre>rpmbsh -i спек.spec</pre>
-
Эта команда соберёт пакет, установит его в тестовый hasher, после чего предложит отправить его в Incoming.
+
Эта команда соберёт пакет и установит его в тестовый hasher, где его можно будет проверить.
-
Если вы производите сборку на удалённом сервере, то рекомендуется воспользоваться командой screen.
 
-
Запускаете: $screen
 
-
Далее, для отключения от сеанса: Ctrl-A, D
 
-
Для подключения обратно команду $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</pre>
 
-
ldv@ in [http://lists.altlinux.ru/pipermail/devel/2006-April/030876.html devel]
 
-
 
-
=== Вспомогательные скрипты для сборки ===
 
-
 
-
Существует набор скриптов, облегчающих процесс сборки, собранный в пакет etersoft-build-utils. В параметрах скриптов обычно указываются названия спеков.
 
-
 
-
{| border="1"
 
-
|-
 
-
|
 
-
Вспомог.
 
-
|
 
-
Обычная
 
-
|
 
-
Где результат
 
-
|
 
-
Комментарий
 
-
|-
 
-
|
 
-
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
 
-
|-
 
-
|
 
-
rpmcs спек
 
-
|
 
-
cleanup_spec
 
-
|
 
-
-
 
-
|
 
-
привести спек к стандартам ALT Linux
 
-
|-
 
-
|
 
-
rpmbb -c
 
-
|
 
-
rpm -bc --short-circuit
 
-
|
 
-
~/RPM/BUILD
 
-
|
 
-
компиляция без установки
 
-
|}
 
-
 
-
<s>Ключ -m указывает произвести сборку в фоновом режиме и прислать лог по почте</s> (не работает)
 
-
Ключ -r указывает произвести сборку на удалённом сервере
 
-
Ключ -u указывает отправить в инкоминг после сборки (-U - в Updates, а не backports)
 
-
Также есть команды 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>
 
-
 
-
=== Стандартная процедура ===
 
-
 
-
Если вы не хотите использовать etersoft-build-utils, вот описание использования стандартных команд:
 
-
 
-
Устанавливаем необходимые для сборки пакеты
 
-
<pre># apt-get install rpm-build</pre>
 
-
Приводим спек по возможности в пригодный для использования вид:
 
-
<pre>$ cleanup_spec название.spec</pre>
 
-
 
-
Собираем пакет командой <tt>rpm -bb</tt>.
 
-
 
-
=== Дополнительная документация ===
 
 +
== Дополнительная документация ==
 +
* [[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] (спасти, поскольку сервер не работает)
+
[[Категория:Devel]]
-
 
+
[[Категория:Packaging]]
-
 
+
-
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
+

Текущая версия на 17:34, 5 октября 2015

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

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

Содержание

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

С правами root

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

# apt-get install etersoft-build-utils

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

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

Исправляем данные о сборщике в файле ~/.rpmmacros. Вот, например, содержимое моего файла ~/.rpmmacros:

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

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

ВНИМАНИЕ! Сборка принципиально невозможна под учётной записью root.

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

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

Gear + Hasher

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

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

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

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

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

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

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

Сборка пакета «с нуля»

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

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

Находясь в каталоге RPM/SPECS:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

В etersoft-build-utils есть команда rpmgp -a название для поиска пакета с указанным названием в других репозиториях. Далее с помощью этого же скрипта его можно скачать (параметр -d). Похожую функцию по поиску выполняет команда whohas из пакета whohas.

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

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

# epm install hasher

Для настройки сборочной среды hasher нужно добавить пользователя:

  1. hasher-useradd имя_пользователя

(после этого надо заново зайти в систему)

См. README в /usr/share/doc/hasher-*/

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

rpmbsh -i спек.spec

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


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

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

 
Личные инструменты