Данный пакет "вытянет" по зависимостям всё остальное, обычно необходимое при сборке.
Под пользователем
Исправляем данные о сборщике в файле ~/.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, в конце спека. После этого следует в спеке дописать комментарий, какие изменения были сделаны в данной сборке. Иногда также бывает удобно сразу указать список изменений:
Сформированные зависимости (строчка 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
Лимиты на сборку у инкамингера
При сборке пакетов в сборочном окружении используются следующие лимиты:
Существует набор скриптов, облегчающих процесс сборки, собранный в пакет 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, вот описание использования стандартных команд:
Устанавливаем необходимые для сборки пакеты
Приводим спек по возможности в пригодный для использования вид: