Руководство по сборке RPM-пакетов для дистрибутивов Альт
Мы хотим обратить Ваше внимание на то, что для успешного прохождения руководства необходимо внимательно читать текст и уделять внимание деталям. Каждый раздел содержит информацию, которая поможет Вам понять процесс сборки пакетов и улучшить свои навыки в этой области.
В тексте документации присутствуют ссылки на дополнительную информацию. Мы настоятельно рекомендуем Вам переходить по этим ссылкам и ознакомляться с материалами более подробно. Это поможет Вам лучше понимать темы, раскрытые в руководстве, и получить полезную дополнительную информацию.
PDF Версия
Структура документации
Перед тем, как приступить к сборке, нужно создать структуру каталогов, необходимую RPM, находящуюся в Вашем «домашнем» каталоге:
$ tree ~/RPM/ /home/user/RPM/ |-- BUILD |-- BUILDROOT |-- RPMS | |-- i586 | |-- x86_64 | `-- noarch |-- SOURCES |-- SPECS `-- SRPMS
Name: bello Version: Release: alt1 Summary:
- — команды без административных привилегий будут начинаться с символа “$”
- — команды с административными привилегиями будут начинаться с символа “#”
# control sudowheel enabled
Вклад в руководство
Вы можете внести свой вклад в это руководство, отправив запрос на принятие изменений (Pull Request) в репозиторий.
Установка необходимых пакетов для процесса сборки
Чтобы следовать данному руководству, Вам потребуется установить следующие пакеты:
# apt-get update Получено: 1 http://ftp.altlinux.org p10/branch/x86_64 release [4223B] Получено: 2 http://ftp.altlinux.org p10/branch/x86_64-i586 release [1665B] Получено: 3 http://ftp.altlinux.org p10/branch/noarch release [2844B] Получено 8732B за 0s (81,8kB/s). Найдено http://ftp.altlinux.org p10/branch/x86_64/classic pkglist Найдено http://ftp.altlinux.org p10/branch/x86_64/classic release Найдено http://ftp.altlinux.org p10/branch/x86_64/gostcrypto pkglist Найдено http://ftp.altlinux.org p10/branch/x86_64/gostcrypto release Найдено http://ftp.altlinux.org p10/branch/x86_64-i586/classic pkglist Найдено http://ftp.altlinux.org p10/branch/x86_64-i586/classic release Найдено http://ftp.altlinux.org p10/branch/noarch/classic pkglist Найдено http://ftp.altlinux.org p10/branch/noarch/classic release Чтение списков пакетов. Завершено Построение дерева зависимостей. Завершено # apt-get install gcc rpm-build rpmlint make python gear hasher patch rpmdevtools
Введение в пакетные менеджеры
RPM — это семейство пакетных менеджеров, применяемых в различных дистрибутивах GNU/Linux, в том числе и в проекте Сизиф и в дистрибутивах Альт. Практически каждый крупный проект, использующий RPM, имеет свою версию пакетного менеджера, отличающуюся от остальных.
- наборе макросов, используемых в .spec-файлах,
- различном поведении RPM при сборке «по умолчанию» — при отсутствии каких-либо указаний в .spec-файлах,
- формате строк зависимостей,
- мелких отличиях в семантике операций (например, в операциях сравнения версий пакетов),
- мелких отличиях в формате файлов.
Для пользователя различия чаще всего заключаются в невозможности поставить «неродной» пакет из-за проблем с зависимостями или из-за формата пакета.
RPM в проекте Сизиф также не является исключением. Основные отличия RPM в Альт и Сизиф от RPM других крупных проектов заключаются в следующем:
- обширный набор макросов для сборки различных типов пакетов,
- отличающееся поведение «по умолчанию» для уменьшения количества шаблонного кода в .spec-файлах,
- наличие механизмов для автоматического поиска межпакетных зависимостей,
- наличие так называемых set-version зависимостей (начиная с 4.0.4-alt98.46 ), обеспечивающих дополнительный контроль за изменением ABI библиотек,
- до p8 и выпусков 8.x включительно — очень древняя версия «базового» RPM (4.0.4), от которого началось развитие ветки RPM в Sisyphus (в Sisyphus и p9 осуществлён частичный переход на rpm 4.13 ).
Основные команды RPM
Для ознакомления с данным разделом потребуется пакет. В качестве примера мы будем использовать пакет Yodl-docs.
После скачивания пакета можно посмотреть данные о нём перед установкой. Для этого используется -qip, (Query|Install|Package)чтобы вывести информацию о пакете.
$ rpm -qip yodl-docs-4.03.00-alt2.noarch.rpm
Name : yodl-docs Epoch : 1 Version : 4.03.00 Release : alt2 DistTag : sisyphus+271589.100.1.2 Architecture: noarch Install Date: (not installed) Group : Documentation Size : 3701571 License : GPL Signature : DSA/SHA1, Чт 13 мая 2021 05:44:49, Key ID 95c584d5ae4ae412 Source RPM : yodl-4.03.00-alt2.src.rpm Build Date : Чт 13 мая 2021 05:44:44 Build Host : darktemplar-sisyphus.hasher.altlinux.org Relocations : (not relocatable) Packager : Aleksei Nikiforov Vendor : ALT Linux Team URL : https://gitlab.com/fbb-git/yodl Summary : Documentation for Yodl Description : Yodl is a package that implements a pre-document language and tools to process it. The idea of Yodl is that you write up a document in a pre-language, then use the tools (eg. yodl2html) to convert it to some final document language. Current converters are for HTML, ms, man, LaTeX SGML and texinfo, plus a poor-man's text converter. Main document types are "article", "report", "book" and "manpage". The Yodl document language is designed to be easy to use and extensible. This package contais documentation for Yodl.
Для установки используется параметр -ivh (Install|Verbose|Hash).
$ rpm -ivh yodl-docs-4.03.00-alt2.noarch.rpm
Инструкция по сборке пакетов с помощью rpm
Внимание! Действия пунктов 1 и 4 настоящей инструкции выполняются с административными правами (root)!
1. Установка необходимых пакетов для процесса сборки
# apt-get install rpm-build
2. Установка src.rpm пакета нужного ПО, которое требуется собрать
Находим и качаем src.rpm пакет нужного ПО, которое будем собирать, и устанавливаем его (от пользователя!):
$ rpm -i название_пакета_с_версией.src.rpm
При этом исходники (исходный код) пакета разместятся в ~/RPM/SOURCES , а спек — в ~/RPM/SPECS .
Наличие исходного кода программного обеспечения и спека, т.е. описания процесса сборки, является необходимым и достаточным условием для сборки rpm пакета (или пересборки, например, пакета из более нового бранча для более старого).
либо указание иного существующего и доступного по записи каталога как %_tmppath в ~/.rpmmacros
Приступаем к сборке, делается это командой:
$ rpm -ba —target (i586|x86_64) ~/RPM/SPECS/имя_спека_нужного_пакета_для_сборки.spec
При этом необходимо раскрыть скобки в зависимости от архитектуры, под которую происходит сборка пакета.
Собранные пакеты разместятся в ~/RPM/RPMS .
$ rpmbuild —rebuild —target (i586/x86_64) название_пакета_с_версией.src.rpm
При этом необходимо также раскрыть скобки в зависимости от архитектуры, под которую происходит сборка пакета.
Примечание: Что касается процессоров, не относящихся к семейству x86_64, то само по себе указание «—target i586» опционально (сборка отработает и без него, но при этом компилятор соберет пакет, точно заточенный под Ваш тип процессора и наименование пакета будет отличаться от наименования пакетов бранчей, к примеру, xxx.athlon.rpm или xxx.pentium4.rpm). Отсутствие параметра «—target i586» при сборке совершенно не гарантирует устанавливаемость собранного таким образом пакета на другом компьютере с другим процессором. Если же сборка совершается под 64-битную систему (на 64-битном процессоре с установленной 64-битной системой), то ключ «—target x86_64» теряет свой смысл и ставить его совершенно не обязательно.
Примечание: Если rpm ругается на не найденные макросы примерно так: «ошибка: Macro %groupadd not found» или «ошибка: Macro %license not found», то помочь в дальнейшей сборке пакета должна установка в систему одного из пакетов rpm-build-* , который, фактически, является дополнительной зависимостью для сборки (пересборки) вашего пакета и отвечает за присвоение требуемых значений этим самым не найденным макросам.
4. Установка сборочных зависимостей
Если имеется srpm пакет, для сборки которого необходимо установить зависимости, то это можно сделать, выполнив следующую команду:
# apt-get build-dep название_пакета_с_версией.src.rpm
Если srpm пакета нет и имеется отдельно спек и исходный код, то почти 100% сборка сразу не пойдёт — в самом начале вывода в консоли будут показаны пакеты, которые должны быть установлены в систему, прежде чем сборка сможет пойти далее. Вы их (эти выведенные в консоль зависимости сборки) установите
# apt-get install пакет1 пакет2 пакет3 .
а после повторите сборку (возврат к шагу 3).
5. Автоматический поиск зависимостей для вновь собираемого пакета
Если вы собираете новый пакет, а не пересобираете уже существующий srpm, то хорошим подспорьем в рамках оформления (поиска и прописывания) нужных зависимостей в спек вам послужит утилита buildreq из пакета rpm-utils :
$ buildreq имя_спек_файла.spec