Сборка бинарных пакетов для ALT Linux
Форматом пакетов в ALT Linux является RPM. Поэтому сборка rpm-пакета здесь может производиться так же как и в любом дистрибутиве Linux, основанном на RPM. Но, как и у большинства дистрибутивов, у ALT Linux есть свои особенности. К основным относятся:
- запрещение сборки пакетов суперпользователем;
- поведение самого rpm;
- собственные макросы и правила написания spec-файлов.
Соглашения и обозначения
Для исключения неоднозначных толкований необходимо определиться с используемыми далее по тексту терминами и обозначениями. Будем использовать макросы и переменные окружения, определённые в самом 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-репозитария необходимо выполнить следующие действия:
- Перейти в каталог $GIT_DIR.
- Установить все необходимые для сборки пакеты. В ALT Linux штатной программой установки пакетов является apt-get.
- Выполнить команду
./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