Здесь рассмотрена процедура сборки RPM- пакетов для ALT Linux.
Это облегчённая инструкция для начинающих разработчиков, написанная с учётом использования пакета etersoft-build-utils.
Сборка пакетов RPM и DEB в других системах.
Устанавливаем пакеты, необходимые для сборки:
Данный пакет "вытянет" по зависимостям всё остальное, обычно необходимое при сборке.
Исправляем данные о сборщике в файле ~/.rpmmacros.
Вот, например, содержимое моего файла ~/.rpmmacros:
Если вы являетесь мантейнером, то для того, чтобы подписывать пакеты и отправлять их для сборки в Сизиф, вы должны указать данные адреса, под которым вы зарегистрированы в ALT Linux.
ВНИМАНИЕ! Сборка принципиально невозможна под учётной записью root.
Образец того, как надо оформлять спек, вы можете посмотреть в пакете wcalc или gnubiff. Настоятельно рекомендуется обратиться
к документации, а также смотреть "как это сделано в другом пакете".
Получить src.rpm для установленного в систему пакета можно командой $ rpmgp название_пакета
Также образцы спеков для разных типов пакетов доступны здесь.
Устанавливаем файл *.src.rpm, который хотим собирать (под пользователем):
Исходники пакета при этом разместятся в ~/RPM/SOURCES, а спек – в ~/RPM/SPECS.
Заходим в каталог ~/RPM/SPECS, и видим там спек для собираемого пакета.
Если спек взят из другого дистрибутива, то сначала делаем
чтобы привести спек в пригодный для использования вид. Далее его нужно поправить вручную, используя взятый из ALT Linux пример спека в качестве образца.
Вы должны разместить исходники пакета (архивы) в ~/RPM/SOURCES, а шаблон будущего спека (скопированный из образца) – в ~/RPM/SPEC.
Находясь в каталоге SPEC:
$ rpmbb название.spec
$ rpmbb -r название.spec
$ add_changelog название.spec
Сформированные зависимости (строчка BuildRequires) нужно просмотреть, чтобы там не было ненужных пакетов. Правильность сборки проверяется пересборкой готового пакета в hasher (см. ниже).
Для начала, нужно локализовать проблему — определить, является ли она проблемой конкретного дистрибутива/системы (например: отсутствие или неверная версия необходимых для сборки библиотек, специфика дистрибутива) или более глобальной (например: несобираемость определённой версией компилятора, ошибки в коде, несоответствие кода новым стандартам).
В первом случае, поможет осуществить поиск по дистрибутиву/репозиторию, поискать решение проблемы в архивах почтовых рассылок или непосредственно попросить помощи в тематических конференциях, посвещенных дистрибутиву (sisyphus, devel, community). ВНИМАНИЕ: порядок действий, для решения проблемы имеет значение (репозиторий -> поиск в архиве -> рассылки).
Во втором случае, стоит начать с поиска готовых решений. В открытом сообществе, считается хорошим тоном публиковать решения найденных проблем. Зачастую, поисковики выдают море полезной информации по кратко описанной в трёх-пяти словах проблеме конкретного софта или тексту ошибки, полученной при сборке. Например, запроса вида " gcc4.1 mysoftware patch" может быть достаточно для поиска патча, решающего проблему сборки с новым gcc4.1).
Стоит также воспользоваться имеющимися репозиториями открытой разработки. Зачастую, мейнтейнеры этих репозиториев, уже сталкивались с такими же проблемами, и возможно у них есть решение (патч) для сложившейся ситуации.
О том, как устранить отсутствие необходимых библиотек или заголовочных файлов, рассказано в следующем пункте.
Возможно при сборке вам придётся доустанавливать недостающие библиотеки. Имейте в виду, что в ALT принято называть пакеты для разработки так: libX-devel, где X – название библиотеки. Пользуйтесь apt-cache search название для поиска недостающего пакета. Если пакета нет в вашей системе, поищите его в Сизифе. Если его нет и там, обратитесь к крупным собраниям информации о пакетах:
а также в репозитории открытой разработки.
Чтобы убедиться в том, что все зависимости правильны и сборка вашего пакета нормально пройдёт на сборочном сервере в 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. Алексей Турбин поделился своими настройками:
Если вы не хотите использовать 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
Ссылок на эту страницу нет