Вход:  Пароль:  
FreeSource: AltLinux/Sisyphus/devel/СборкаПакетов ...
Free Source | Каталог | Изменения | НовыеКомментарии | Пользователи | Регистрация |
Эта страница была перенесена на altlinux.org. Текст на freesource.info заморожен.

Краткая инструкция по сборке пакетов в ALT Linux


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


Оглавление документа

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

С правами root


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

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

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

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

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

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


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

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


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


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


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

чтобы привести спек в пригодный для использования вид. Далее его нужно поправить вручную, используя взятый из 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-useradd имя_пользователя
(после этого надо заново зайти в систему)
См. README в /usr/share/doc/hasher-*/


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

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


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

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


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

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
rpmcs спек cleanup_spec привести спек к стандартам ALT Linux
rpmbb -c rpm -bc --short-circuit ~/RPM/BUILD компиляция без установки

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

Использование ccache

Для ускорения сборки программного кода (если он пересобирается более одного раза) предлагается использовать ccache. Алексей Турбин поделился своими настройками:

Стандартная процедура


Если вы не хотите использовать etersoft-build-utils, вот описание использования стандартных команд:


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

Приводим спек по возможности в пригодный для использования вид:


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

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



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


Краткие справочники команд RPM и APT – на странице http://www.linux-os.ru/articles (спасти, поскольку сервер не работает)


Vitaly Lipatov <lav@etersoft.ru>, 11.01.04, 08.03.04, 28.10.04, 28.02.2005, 04.09.2005, 21.02.2006


Ссылок на эту страницу нет


 
Файлов нет. [Показать файлы/форму]
Комментариев нет. [Показать комментарии/форму]