Сборка пакетов (etersoft-build-utils): различия между версиями
Ilis (обсуждение | вклад) |
Нет описания правки |
||
Строка 2: | Строка 2: | ||
{{MovedFromFreesourceInfo|AltLinux/Sisyphus/devel/СборкаПакетов}} | {{MovedFromFreesourceInfo|AltLinux/Sisyphus/devel/СборкаПакетов}} | ||
Здесь рассмотрена процедура сборки [http://ru.wikipedia.org/wiki/RPM RPM-] | Здесь рассмотрена процедура сборки [http://ru.wikipedia.org/wiki/RPM RPM-пакетов] для [[Main Page|ALT Linux]]. | ||
Это облегчённая инструкция для начинающих разработчиков, написанная с учётом использования пакета etersoft-build-utils. | Это облегчённая инструкция для начинающих разработчиков, написанная с учётом использования пакета [[etersoft-build-utils]]. | ||
[ | Описана процедура сборки пакета устаревшим способом, с получением src.rpm, без использования [[Краткое руководство по сборке с gear git/gear]]. | ||
== Первоначальная настройка == | == Первоначальная настройка == | ||
Строка 21: | Строка 21: | ||
%_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> | ||
Если вы являетесь мантейнером, то для того, чтобы подписывать пакеты и отправлять их для сборки в Сизиф, вы должны указать | |||
Если вы [[Процедура принятия в Team|являетесь мантейнером]], то для того, чтобы подписывать пакеты и отправлять их для сборки в Сизиф, вы должны указать адреса, под которым вы зарегистрированы в ALT Linux. | |||
<div style="display: inline; color: red;">ВНИМАНИЕ! Сборка принципиально невозможна под учётной записью root.</div> | <div style="display: inline; color: red;">ВНИМАНИЕ! Сборка принципиально невозможна под учётной записью root.</div> | ||
== Сборка пакетов == | == Сборка пакетов == | ||
Образец того, как надо оформлять спек, вы можете посмотреть в пакете [http://sisyphus.ru/srpm/wcalc wcalc] или [http://sisyphus.ru/srpm/gnubiff gnubiff]. Настоятельно рекомендуется обратиться | Образец того, как надо оформлять спек, вы можете посмотреть в пакете [http://sisyphus.ru/srpm/wcalc wcalc] или [http://sisyphus.ru/srpm/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 здесь]. | ||
Строка 39: | Строка 39: | ||
Если спек взят из другого дистрибутива, то сначала делаем | Если спек взят из другого дистрибутива, то сначала делаем | ||
<pre>$ rpmcs название.spec</pre> | <pre>$ rpmcs название.spec</pre> | ||
чтобы привести спек в пригодный для использования вид. Далее его нужно поправить вручную, используя взятый из ALT Linux пример спека в качестве образца. | чтобы привести спек в пригодный для использования вид. Далее его нужно поправить вручную, мысленно используя взятый из ALT Linux пример спека в качестве образца. | ||
=== Сборка пакета «с нуля» === | === Сборка пакета «с нуля» === | ||
Строка 48: | Строка 48: | ||
<tt>$ rpmbb название.spec</tt> | <tt>$ rpmbb название.spec</tt> | ||
::: для сборки двоичного пакета (он будет | ::: для сборки двоичного пакета (он будет записан в ~/RPM/RPMS) | ||
<tt>$ rpmbb -r название.spec</tt> | <tt>$ rpmbb -r название.spec</tt> | ||
::: для того, чтобы в пакет автоматически прописались зависимости на пакеты, необходимые при сборке. Если пересобирается уже имеющийся пакет из Сизифа, то это не | ::: для того, чтобы в пакет автоматически прописались зависимости на пакеты, необходимые при сборке. Если пересобирается уже имеющийся пакет из Сизифа, то это обычно не нужно. (см. также [[Buildreq Использование buildreq]]) | ||
<tt>$ add_changelog название.spec</tt> | <tt>$ add_changelog название.spec</tt> | ||
::: для добавления строчки о данной сборке в секцию %changelog, в конце спека. После этого следует в спеке дописать комментарий, какие изменения были сделаны в данной сборке. | ::: для добавления строчки о данной сборке в секцию %changelog, в конце спека. После этого следует в спеке дописать комментарий, какие изменения были сделаны в данной сборке. | ||
Сформированные зависимости (в строчке BuildRequires) желательно просмотреть, чтобы там не было откровенно ненужных пакетов. | |||
Сформированные зависимости ( | |||
== Ошибки при сборке == | == Ошибки при сборке == | ||
Для начала, нужно локализовать проблему — определить, является ли она проблемой конкретного дистрибутива/системы (например: отсутствие или неверная версия необходимых для сборки библиотек, специфика дистрибутива) или более глобальной (например: несобираемость определённой версией компилятора, ошибки в коде, несоответствие кода новым стандартам). | Для начала, нужно локализовать проблему — определить, является ли она проблемой конкретного дистрибутива/системы (например: отсутствие или неверная версия необходимых для сборки библиотек, специфика дистрибутива) или более глобальной (например: несобираемость определённой версией компилятора, ошибки в коде, несоответствие кода новым стандартам). | ||
В первом случае, поможет осуществить поиск по дистрибутиву/репозиторию, поискать решение проблемы в [ | В первом случае, поможет осуществить поиск по дистрибутиву/репозиторию, поискать решение проблемы в архивах [[Списки рассылки|почтовых рассылок]] или непосредственно попросить помощи в рассылке (sisyphus, devel, community). | ||
Во втором случае, стоит начать с поиска готовых решений. В открытом сообществе, считается хорошим тоном публиковать решения найденных проблем. Зачастую, поисковики выдают море полезной информации по кратко описанной в трёх-пяти словах проблеме конкретного софта или тексту ошибки, полученной при сборке. Например, запроса вида | Во втором случае, стоит начать с поиска готовых решений. В открытом сообществе, считается хорошим тоном публиковать решения найденных проблем. Зачастую, поисковики выдают море полезной информации по кратко описанной в трёх-пяти словах проблеме конкретного софта или тексту ошибки, полученной при сборке. Например, запроса вида «gcc4.1 mysoftware patch» может быть достаточно для поиска патча, решающего проблему сборки с новым gcc4.1). | ||
Стоит также воспользоваться | Стоит также воспользоваться другими [[Repositories|репозиториями с пакетами открытой разработки]]. Зачастую, мейнтейнеры этих репозиториев, уже сталкивались с такими же проблемами, и возможно у них есть решение (патч) для сложившейся ситуации. | ||
О том, как устранить отсутствие необходимых библиотек или заголовочных файлов, рассказано в следующем пункте. | О том, как устранить отсутствие необходимых библиотек или заголовочных файлов, рассказано в следующем пункте. | ||
Строка 73: | Строка 68: | ||
* [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] | ||
а также в [ | а также в [[Repositories|репозиториях открытой разработки]]. | ||
== Сборочная среда Hasher == | == Сборочная среда Hasher == | ||
Строка 81: | Строка 76: | ||
# hasher-useradd имя_пользователя | # hasher-useradd имя_пользователя | ||
(после этого надо заново зайти в систему) | (после этого надо заново зайти в систему) | ||
См . README в /usr/share/doc/hasher-*/ | См. README в /usr/share/doc/hasher-*/ | ||
Для сборки пакета в hasher запускаем | Для сборки пакета в hasher запускаем | ||
<pre>rpmbsh -i | <pre>rpmbsh -i спек.spec</pre> | ||
Эта команда соберёт пакет | Эта команда соберёт пакет и установит его в тестовый hasher, где его можно будет проверить. | ||
== Дополнительная документация == | == Дополнительная документация == | ||
* 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] | ||
* [ | * [[Hasher|Сборка программ для ALTLinux с использованием hasher]] | ||
* [http://atmsk.altlinux.org.ua/index.php?option=articles&Itemid=3&topid=9 Статьи по сборке пакетов] | * [http://atmsk.altlinux.org.ua/index.php?option=articles&Itemid=3&topid=9 Статьи по сборке пакетов] | ||
[[Категория:Devel]] | [[Категория:Devel]] | ||
[[Категория:Packaging]] | [[Категория:Packaging]] |
Версия от 19:05, 19 сентября 2009
Краткая инструкция по сборке пакетов с помощью etersoft-build-utils
Здесь рассмотрена процедура сборки RPM-пакетов для ALT Linux.
Это облегчённая инструкция для начинающих разработчиков, написанная с учётом использования пакета etersoft-build-utils.
Описана процедура сборки пакета устаревшим способом, с получением src.rpm, без использования Краткое руководство по сборке с gear 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.
Сборка пакетов
Образец того, как надо оформлять спек, вы можете посмотреть в пакете 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 Использование buildreq)
$ add_changelog название.spec
- для добавления строчки о данной сборке в секцию %changelog, в конце спека. После этого следует в спеке дописать комментарий, какие изменения были сделаны в данной сборке.
Сформированные зависимости (в строчке BuildRequires) желательно просмотреть, чтобы там не было откровенно ненужных пакетов.
Ошибки при сборке
Для начала, нужно локализовать проблему — определить, является ли она проблемой конкретного дистрибутива/системы (например: отсутствие или неверная версия необходимых для сборки библиотек, специфика дистрибутива) или более глобальной (например: несобираемость определённой версией компилятора, ошибки в коде, несоответствие кода новым стандартам). В первом случае, поможет осуществить поиск по дистрибутиву/репозиторию, поискать решение проблемы в архивах почтовых рассылок или непосредственно попросить помощи в рассылке (sisyphus, devel, community). Во втором случае, стоит начать с поиска готовых решений. В открытом сообществе, считается хорошим тоном публиковать решения найденных проблем. Зачастую, поисковики выдают море полезной информации по кратко описанной в трёх-пяти словах проблеме конкретного софта или тексту ошибки, полученной при сборке. Например, запроса вида «gcc4.1 mysoftware patch» может быть достаточно для поиска патча, решающего проблему сборки с новым gcc4.1). Стоит также воспользоваться другими репозиториями с пакетами открытой разработки. Зачастую, мейнтейнеры этих репозиториев, уже сталкивались с такими же проблемами, и возможно у них есть решение (патч) для сложившейся ситуации. О том, как устранить отсутствие необходимых библиотек или заголовочных файлов, рассказано в следующем пункте.
Поиск пакетов
Возможно при сборке вам придётся доустанавливать недостающие библиотеки. Имейте в виду, что в ALT принято называть пакеты для разработки так: libX-devel, где X — название библиотеки. Пользуйтесь apt-cache search название для поиска недостающего пакета. Если пакета нет в вашей системе, поищите его в Сизифе. Если его нет и там, обратитесь к крупным собраниям информации о пакетах:
а также в репозиториях открытой разработки.
Сборочная среда Hasher
Чтобы убедиться в том, что все зависимости правильны и сборка вашего пакета нормально пройдёт на сборочном сервере в ALT Linux, используется Hasher — среда, которая позволяет осуществить сборку пакета в «чистой» системе, куда установлены только пакеты, указанные в сборочных зависимостях.
$ sudo apt-get install hasher
Для настройки сборочной среды hasher нужно добавить пользователя:
- hasher-useradd имя_пользователя
(после этого надо заново зайти в систему)
См. README в /usr/share/doc/hasher-*/
Для сборки пакета в hasher запускаем
rpmbsh -i спек.spec
Эта команда соберёт пакет и установит его в тестовый hasher, где его можно будет проверить.
Дополнительная документация
- Sisyphus:/devel/RpmSetup
- Описание нюансов сборки RPM-пакетов в ALT Linux и не только
- Сборка пакетов RPM и DEB в других системах.
При сборке пакетов сверяйтесь со следующей документацией: