Краткое руководство по сборке пакета: различия между версиями

Материал из ALT Linux Wiki
(→‎Архив репозиториев сизифа: гуй к архиву сменён)
(→‎Существующий пакет: про gear-репозитории майнтайнера)
Строка 69: Строка 69:
* в gear-репозитории майнтайнера на [[git.alt]], если майнтайнер пользуется gear
* в gear-репозитории майнтайнера на [[git.alt]], если майнтайнер пользуется gear
* в архиве репозиториев сизифа, если майнтайнер gear не пользуется.
* в архиве репозиториев сизифа, если майнтайнер gear не пользуется.
==== gear-репозиторий майнтайнера ====
Найдите на [http://sisyphus.ru/ sisyphus.ru] интересующий вас пакет и посмотрите на репозитории на вкладке git. Их может быть больше одного, если над пакетом работает несколько человек. При отсутствии информации о том, кто сейчас ведёт разработку пакета, стоит взять репозиторий того, кто собирал его в последний раз. URL для клонирования репозитория указан в web-интерфейсе. К примеру, для keyjnote:
git clone git://git.altlinux.org/people/dottedmag/packages/keyjnote.git


==== Архив репозиториев сизифа ====
==== Архив репозиториев сизифа ====

Версия от 23:28, 28 сентября 2008


Данное руководство поможет вам самостоятельно создать свой RPM-пакет в дистрибутивах ALT Linux. Больше информациx о тонкостях сборки пакетов и их сопровождению вы можете найти в разделах Руководства и Справочники.

Подготовка к сборке пакета

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

  • Исходный код программы или библиотеки
  • Доступ к репозиторию
  • Сборочная среда

Исходный код

Исходный код для пакета вы можете скачать из Интернета. Предположим, вы скачали архив с исходным кодом foo-1.2.3.tar.gz

Доступ к репозиторию

Вам также потребуется доступ к репозиторию (для сборки необходимы зависимые пакеты). Идеальный вариант — копия Sisyphus или необходимого бранча. Однако можно использовать и удалённый репозиторий. Организация доступа к репозиторию будет рассмотрена ниже.

Сборочная среда

1. Установите программы для сборки пакетов:

apt-get install rpm-build gear

2. Подготовьте место на жёстком диске. Минимум 2 Гб. Крайне рекомендуется производить сборку на файловой системе tmpfs — скорость сборки может вырасти в несколько раз! tmpfs использует память и файл подкачки, поэтому заранее подготовьте большой раздел (или, что хуже, файл) подкачки. Проверьте размер tmpfs в файле /etc/fstab:

tmpfs           /tmp                    tmpfs   nosuid,size=2300m               0 0

В данном случае параметр size=2300m устанавливает размер файловой системы в 2300 Мб (2,3 Гб). Если вы вносили изменения, то запустите

mount /tmp -o remount

3. Настройте rpm:

Создайте в домашнем каталоге файл .rpmmacros (обязательна точка в начале) примерно такого содержания:

%_packager Vassily Poupkine <pupkin@altlinux.org>

В этом файле также можно указать ключи подписи пакетов (если вы собираетесь выкладывать пакеты в репозитории), макросы сборки и прочие полезные параметры.

Репозиторий Gear

Подготовьте репозиторий gear (являющийся частным случаем git-репозитория]]. Это необходимое условие для правки уже существующих пакетов и просто удобный инструмент для хранения ваших изменений.

Новый пакет

Если вы создаёте новый пакет «с нуля», выполните следующие команды для подготовки git-репозитория:

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-файл (спек). Спек можно составить по примерам.

Существующий пакет

Для изменения существующего пакета необходимо получить его исходный код. Исходный код находится в одном из двух мест:

  • в gear-репозитории майнтайнера на git.alt, если майнтайнер пользуется gear
  • в архиве репозиториев сизифа, если майнтайнер gear не пользуется.

gear-репозиторий майнтайнера

Найдите на sisyphus.ru интересующий вас пакет и посмотрите на репозитории на вкладке git. Их может быть больше одного, если над пакетом работает несколько человек. При отсутствии информации о том, кто сейчас ведёт разработку пакета, стоит взять репозиторий того, кто собирал его в последний раз. URL для клонирования репозитория указан в web-интерфейсе. К примеру, для keyjnote:

git clone git://git.altlinux.org/people/dottedmag/packages/keyjnote.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

Обновление исходного кода

Обновите исходный код из скачанного архива (команда выполняется в gear-репозитории):

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 очищается, поэтому скопируйте пакеты в безопасное место.

Вместо /tmp можно использовать $TMP (/tmp/.private/$USER) для возможности работать на одном /tmp в несколько рук и не опасаясь диверсий. См. тж. control pam_mktemp.