wiki:ru/doc/packaging/altlinux
Last modified 8 years ago Last modified on 02/26/17 18:27:58

Сборка бинарных пакетов для ALT Linux

Форматом пакетов в ALT Linux является RPM. Поэтому сборка rpm-пакета здесь может производиться так же как и в любом дистрибутиве Linux, основанном на RPM. Но, как и у большинства дистрибутивов, у ALT Linux есть свои особенности. К основным относятся:

Соглашения и обозначения

Для исключения неоднозначных толкований необходимо определиться с используемыми далее по тексту терминами и обозначениями. Будем использовать макросы и переменные окружения, определённые в самом ALT RPM:

  • %_topdir - каталог верхнего уровня, содержащий в себе стандартную иерархию каталогов RPM, в которой производится сборка пакета. По умолчанию значение этого макроса равно $HOME/RPM;
  • %_sourcedir - макрос, указывающий на каталог с исходными кодами программы, собираемой в пакет. Значение по умолчанию - %_topdir/SOURCES;
  • %_specdir - каталог, содержащий spec-файл. Значение по умолчанию - %_topdir/SPECS;
  • %_srcrpmdir - каталог, в котором будет содержаться собранный пакет с исходным кодом (src.rpm).Значение по умолчанию - %_topdir/SRPMS;
  • %_rpmdir/%_arch - каталог, содержащий подкаталоги с именами различных архитектур (%_arch), для которых производится сборка пакета. Собранный бинарный пакет будет помещён в один из этих подкаталогов. Значение макроса %_rpmdir по умолчанию - %_topdir/RPMS.

Значения всех этих макросов пользователем могут быть переопределены в файле ~/.rpmmacros.

Кроме того, обозначим переменной GIT_DIR каталог, в котором будет находиться копия git-репозитария MC.

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

Для сборки пакета mc необходимо получить исходный код в одном из форматов: либо git-репозитарий, либо тарболл (tar.bz2 или tar.gz). Тарболл также можно самостоятельно изготовить, имея копию репозитария. Для создания тарболла из git-репозитария необходимо выполнить следующие действия:

  1. Перейти в каталог $GIT_DIR.
  2. Установить все необходимые для сборки пакеты. В ALT Linux штатной программой установки пакетов является apt-get.
  3. Выполнить команду

./autogen && ./configure && make dist

В результате этого в $GIT_DIR появится файл c именем вида mc-<версия>.tar.gz. Если вместо make dist использовать make dist-bzip2, то файл будет иметь имя вида mc-<версия>.tar.bz2. Далее из этого тарболла будет собираться rpm-пакет.

В принципе, в тарболл можно упаковать содержимое git-репозитария (без каталога .git):

tar cjf mc-<версия>.tar.bz2 --exclude '*/.git' mc

В этом случае команды

./autogen 
./configure

должны будут выполняться при сборке rpm-пакета.

Сборка с использованием rpmbuild

Для сборки rpm-пакетов надо установить пакеты rpm-build и rpm-utils.

sudo apt-get install rpm-build

Далее надо создать иерархию каталогов %_topdir. В %_sourcedir надо скопировать полученный тарболл, а в %_specdir создать файл mc.spec. В качестве исходного можно взять spec-файл пакета mc, находящегося в apt-репозитарии Sisyphus. В spec-файле надо отредактировать номера версии (Version) и релиза (Release), а также желательно сделать запись в секции %changelog о данной сборке. Для добавления записи в %changelog удобно пользоваться утилитой add_changelog из пакета rpm-utils.

Бинарный пакет собирается командой

rpmbuild -bb mс.spec

запущенной в каталоге %_specdir, а пакет с исходным кодом - командой

rpmbuild -bs mс.spec.

Оба пакета одновременно можно собрать командой

rpmbuild -ba mс.spec.

После сборки бинарный пакет будет находиться в каталоге %_rpmdir/%_arch, а пакет с исходным кодом - в каталоге %_srcrpmdir.

Сборка с использованием hasher

О том, что такое hasher, о его установке и настройке можно прочитать здесь.

Исходными данными для hasher являются apt-репозитарий пакетов (локальный или удалённый), в среде которого будет производиться сборка, и rpm-пакет с исходным кодом mc-<версия>.src.rpm. После того, как hasher настроен на нужный репозитарий, сборка производится командой

hsh --no-sisyphus-check --no-repackage-source ~/hasher mc-<версия>.src.rpm

Ключ --no-sisyphus-check отключает все проверки, которые пакет должен проходить при сборке в репозитарий Sisyphus. Ключ --no-repackage-source запрещает hasher создавать ещё один src.rpm.

При удачной сборке полученные пакеты будут лежать в ~/hasher/repo/%_arch/RPMS.hasher, в противном случае на stdout будет выведена информация об ошибках сборки.

Сборка с использованием gear

TODO