Краткое руководство по сборке пакета
Данное руководство поможет вам самостоятельно создать свой RPM-пакет в дистрибутивах ALT Linux.
Больше информациx о тонкостях сборки пакетов и их сопровождению вы можете найти в разделах Руководства и Справочники.
Подготовка к сборке пакета
Помимо желания собрать пакет вам необходимы:
- Исходный код программы или библиотеки
- Доступ к репозиторию
- Сборочная среда
Исходный код
Исходный код для пакета вы можете скачать из Интернета. Предположим, вы скачали архив с исходным кодом foo-1.2.3.tar.gz
Доступ к репозиторию
Вам также потребуется доступ к репозиторию (для сборки необходимы зависимые пакеты). Идеальный вариант — копия Sisyphus или необходимого бранча. Однако можно использовать и удалённый репозиторий. Организация доступа к репозиторию будет рассмотрена ниже.
Сборочная среда
- Подробнее: Join/Environment
1. Установите программы для сборки пакетов:
apt-get install rpm-build gear
Возможно, понадобятся: hasher, rpm-build-licenses и rpm-utils
2. Подготовьте место на жёстком диске. Минимум 2 Гб. Крайне рекомендуется производить сборку на файловой системе tmpfs — скорость сборки может вырасти в несколько раз! Для использования этого варианта начинайте с size=2300m.
3. Настройте rpm:
Создайте в домашнем каталоге файл .rpmmacros (обязательна точка в начале) примерно такого содержания:
%_packager Vassily Poupkine <pupkin@altlinux.org>
В этом файле также можно указать ключи подписи пакетов (если вы собираетесь выкладывать пакеты в репозитории), макросы сборки и прочие полезные параметры.
Репозиторий Gear
Подготовьте репозиторий gear (являющийся частным случаем git-репозитория). Это необходимое условие для правки уже существующих пакетов и просто удобный инструмент для хранения ваших изменений:
Новый пакет
Если вы создаёте новый пакет «с нуля», есть два варианта подготовки исходников для сборки.
Вариант 1: на основе апстримного репозитория Git (предпочтительный способ)
Если у программы уже есть апстримный Git-репозиторий, самый удобный способ — просто его клонировать. Это позволит сразу работать с актуальным исходным кодом, получать обновления и легко переносить фиксы из апстрима.
# Клонируем апстримный репозиторий
git clone https://github.com/example/foo.git
cd foo
# Переходим на последний стабильный релиз и создаём ветку sisyphus
git checkout v1.2.3 -b sisyphus
# Создаём каталог для ALT-специфичных файлов
mkdir -p .gear
# Добавляем правила сборки и ссылку на spec-файл
echo "tar: @version@:." > .gear/rules
echo "spec: .gear/foo.spec" >> .gear/rules
# Добавляем и фиксируем их
git add .gear
git commit -m "Add .gear and initial packaging files"
Теперь можно написать .gear/foo.spec — спек-файл, описывающий сборку пакета.
После этого пакет можно собирать обычным образом с помощью gear, не забыв перед этим выполнить команду gear-update-tag -a -c .
Такой подход:
- сохраняет историю изменений апстрима;
- упрощает обновление до новых версий (
git fetch --tags); - позволяет вносить патчи прямо в исходный код и отправлять их обратно апстриму при необходимости.
Вариант 2: из исходного архива
Если апстримного репозитория нет, можно создать репозиторий вручную и добавить исходный код из tar-архива.
mkdir foo
cd foo
git init
В директории foo, в поддиректории .gear создайте файл .gear/rules со следующим содержимым:
tar.gz: foo
Распакуйте архив с исходным кодом:
gear-update -c /path/to/foo-1.2.3.tar.gz foo
Затем напишите .spec-файл (спек) — текстовый файл с набором инструкций по сборке пакета RPM.
Документация по написанию спека
Существующий пакет
Для изменения существующего пакета необходимо получить его исходный код. Исходный код находится в одном из двух мест:
- в gear-репозитории майнтайнера на git.alt, если майнтайнер пользуется gear
- в архиве репозиториев сизифа, если майнтайнер gear не пользуется.
gear-репозиторий майнтайнера
Найдите на packages.altlinux.org интересующий вас пакет и посмотрите на репозитории на вкладке Gear. Их может быть больше одного, если над пакетом работает несколько человек. При отсутствии информации о том, кто сейчас ведёт разработку пакета, стоит взять репозиторий того, кто собирал его в последний раз. URL для клонирования репозитория указан в web-интерфейсе. К примеру, для keyjnote:
git clone git://git.altlinux.org/people/dottedmag/packages/keyjnote.git
Как правильно собирать пакет, исходники которого лежат во внешнем git
Архив репозиториев сизифа
Если gear-репозитория у майнтайнера нет, то придётся воспользоваться архивом Sisyphus. Для этого в браузере откройте http://git.altlinux.org/archive/ и найдите нужный вам пакет (к примеру, пакет kmymoney2 располагается в http://git.altlinux.org/archive/k/kmymoney2.git). URL для клонирования пакета указан в web-интерфейсе репозитория. Скажем, для kmymoney2:
git clone git://git.altlinux.org/archive/k/kmymoney2.git
Обновление исходного кода
Обновление исходного кода зависит от того, откуда он получен.
Если используется апстримный Git-репозиторий (предпочтительный способ)
Если ваш пакет основан на апстримном Git-репозитории, обновление исходников выполняется средствами Git. Обычно это делается при выходе новой версии программы или при необходимости забрать исправления из апстрима.
# Получаем обновления и теги из апстрима
git fetch --tags upstream
# Просматриваем доступные теги (версии)
git tag
# Переходим на новую версию и объединяем изменения с веткой sisyphus
git checkout v1.3.0
git merge v1.3.0 -m "Update to version 1.3.0"
После обновления исходников обновите версию и changelog в spec-файле
(вручную в разделе %changelog или с помощью утилиты add_changelog):
add_changelog "Update to 1.3.0"
Чтобы сохранить информацию о теге апстрима и корректно отразить её в сборке, не забудьте выполнить команду:
gear-update-tag -a -c
Эта команда создаст или обновит файл с информацией о теге в каталоге .gear/tags/.
Он используется при сборке, чтобы связать ваш пакет с конкретной версией апстрима.
Такой способ позволяет:
- использовать точную историю и теги апстрима;
- без лишних действий переносить патчи и исправления;
- корректно сохранять данные о версии в
.gear/tags/; - легко синхронизировать пакет с новыми релизами.
Если используется исходный архив (tar.gz / tar.bz2)
Если код берётся не из Git, а из исходного архива, обновите его с помощью команды:
gear-update /path/to/kmymoney2-0.9.2.tar.bz2 kmymoney2
Затем обновите версию и changelog в .spec-файле
(вручную в разделе %changelog или с помощью утилиты add_changelog).
Фиксирование изменений
Чтобы зафиксировать все ваши изменения, выполните:
gear-commit -a
Появится окно редактора (по умолчанию — vi, вызываемый редактор определяется переменной окружения EDITOR, многие начинающие предпочитают export EDITOR=mcedit) с версией и текстом последней записи changelog. Если нужно, поправьте текст, сохраните изменения и выйдите из редактора. Строки, начинающиеся с символа #, будут проигнорированы. Если выйти без сохранения, то изменения зафиксированы не будут.
Сборка
И, наконец, сборка!
gear-hsh $TMP/
Среда сборки попытается собрать пакет в изолированной среде hasher. Если в процессе сборки возникнут ошибки — исправьте их и обязательно зафиксируйте изменения. В случае удачной сборки будут созданы пакеты:
- в каталоге $TMP/repo/SRPMS.hasher/ — исходные пакеты .src.rpm
- в каталоге $TMP/repo/i586/RPMS.hasher/ — собранные бинарные пакеты
Примечание: архитектура (i586) может отличаться названием в зависимости от настроек Hasher и сборочного компьютера.
Внимание! При перезагрузке tmpfs очищается, поэтому скопируйте пакеты в безопасное место.