Сборка rpm пакета с помощью rpmbuild — различия между версиями

Материал из Wiki AlterOS
Перейти к: навигация, поиск
 
(не показано 14 промежуточных версий 3 участников)
Строка 1: Строка 1:
 +
 
==Подготовка к сборке rpm-пакетов==
 
==Подготовка к сборке rpm-пакетов==
  
RPM-пакет — это просто файл, содержащий другие файлы и информацию о них, необходимую для системы. Менеджер пакетов rpm использует эти метаданные для определения зависимостей, места установки файлов и другой информации.
 
 
Существует два типа rpm-пакетов:
 
* SRPM (исходники с расширением .src.rpm)
 
* RPM (бинарный файл с расширением .rpm)
 
 
Они имеют разное содержимое и служат для разных целей.
 
  
SRPM обязательно содержит исходный код, опционально — патчи и spec-файл, который описывает, как собрать исходный код в бинарный RPM. Бинарный RPM содержит бинарные файлы, созданные из исходников и патчей, если таковые имелись.
+
'''rpmbuild''' - утилита для сборки RPM пакетов.
 
 
''Сборку rpm-пакетов крайне нежелательно проводить с правами суперпользователя (root). Настоятельно рекомендуется все манипуляции производить с правами непривилегированного пользователя, поскольку при сборке с правами root имеется высокая вероятность повреждения системы.''
 
  
 
Для сборки rpm-пакета в системе должен быть установлен rpm-build. Проверить его наличие можно следующей командой:
 
Для сборки rpm-пакета в системе должен быть установлен rpm-build. Проверить его наличие можно следующей командой:
  
  # rpmbuild --version
+
  $ rpmbuild --version
  
 
Если система возвращает: ''rpmbuild: команда не найдена'', значит rpm-build не установлен.  
 
Если система возвращает: ''rpmbuild: команда не найдена'', значит rpm-build не установлен.  
 
Для установки необходимо выполнить следующую команду:
 
Для установки необходимо выполнить следующую команду:
  
  # sudo yum install rpm-build
+
  $ sudo yum install rpm-build
  
Также вам могут понадобиться пакеты gcc/gcc++ и make (если они ещё не установлены), поэтому сразу же прописываем команду:  
+
Структура команды для сборки должна выглядеть так:
 +
 +
rpmbuild [ПАРАМЕТР…]
  
# sudo yum install gcc make
+
Основные параметры сборки:
  
==Подготовка древа каталогов==
+
• -ba – Сборка исходного(.src.rpm) и двоичного(.rpm) пакетов
  
Для сборки пакетов в домашнем каталоге пользователя необходимо создать каталог '''rpmbuild''', в которой должны быть следующие подкаталоги: '''BUILD, RPMS, SOURCES, SPECS, SRPMS'''. Это можно сделать вручную или командой:
+
• -bb – Сборка только двоичного пакета(.rpm)
  
# rpmdev-setuptree
+
-bs – Сборка только пакета с исходниками(.src.rpm)
  
В итоге должна получиться следующая структура:
+
Остальные параметры можно посмотреть с помощью команды:  
 +
$ rpmbuild --help
 +
==Сборка пакета==
  
/home/user/rpmbuild/
+
Установив необходимые библиотеки, а также положив в папку SOURCES - исходные файлы и в папку SPECS - файл конфигурации(.spec), можно приступать к сборке. '''[https://wiki.alter-os.ru/index.php?title=%D0%A7%D1%82%D0%BE_%D0%BD%D0%B5%D0%BE%D0%B1%D1%85%D0%BE%D0%B4%D0%B8%D0%BC%D0%BE_%D0%B4%D0%BB%D1%8F_%D1%81%D0%B1%D0%BE%D1%80%D0%BA%D0%B8_rpm_%D0%BF%D0%B0%D0%BA%D0%B5%D1%82%D0%B0 Подробнее о том, что необходимо для сборки RPM пакета, можно узнать здесь]''' 
  
|-- BUILD<br>
+
Находясь в каталоге SPECS необходимо выполнить следующую команду:
|-- RPMS<br>
 
|-- SOURCES<br>
 
|-- SPECS<br>
 
`-- SRPMS
 
  
==Подготовка spec-файла==
+
$ rpmbuild -ba ваш_spec_файл.spec
  
Следующий необходимый элемент — это spec-файл, своего рода инструкция, по которой rpm-build производит сборку пакета.  
+
Результатом выполнения данной команды (если на предыдущих этапах всё было сделано правильно) будет собранный пакет, и в каталоге RPMS появятся бинарный пакет (ваш_пакет.rpm), а в каталоге SRPMS — исходник (ваш_пакет.src.rpm).
  
Структура spec-файла подразделяется на заголовки и секции тела.
+
Если на выходе нужно получить только .rpm файл или только .src.rpm, то '''-ba''' необходимо заменить на '''-bb''' или '''-bs''' соответственно.
 
 
'''Name''' — базовое имя собираемого пакета, которое должно совпадать с именем spec-файла.<br>
 
'''Version''' — номер версии пакета.<br>
 
'''Release''' — релиз-номер пакета. Обычно устанавливают начальное значение в 1% {? Dist} и увеличивают его с каждым новым выпуском пакета.<br>
 
'''Summary''' — краткое однострочное описание пакета.<br>
 
'''License''' — лицензия, согласно которой распространяется пакет.<br>
 
'''URL''' — полный URL для получения дополнительной информации о программе. Чаще всего это веб-сайт исходного проекта.<br>
 
'''Source0''' — путь или URL-адрес заархивированных файлов исходного кода (тарболов). При необходимости можно добавить дополнительные источники SourceX, увеличивая число каждый раз, например: Source1, Source2, Source3 и т.д.<br>
 
'''Patch0''' — патчи и исправления для исходного кода. Патчей может быть несколько, как и исходников. Patch1, Patch2, Patch3 и т.д.<br>
 
'''BuildArch''' — архитектура, под которую будет собран пакет. Если пакет не зависит от архитектуры, например, он написан полностью на интерпретируемом языке программирования, необходимо установить значение BuildArch: noarch. Если значение не установлено, то пакет наследует архитектуру системы, в которой он собирается.<br>
 
'''BuildRequires''' — раздел, в котором через пробелы или запятые перечисляются все зависимые пакеты, необходимые для сборки нашего пакета.
 
 
 
'''%description''' — полное описание собираемого пакета. Может занимать несколько строк и может быть разбито на абзацы.<br>
 
'''%prep''' — команда или серия команд для подготовки исходного кода к сборке, например, распаковка архива в Source0. Здесь могут находиться bash-скрипты.<br>
 
'''%build''' — команды или серия команд из данной секции отвечают за непосредственную сборку пакета.<br>
 
'''%install''' — команда или серия команд из данной секции отвечают за то, чтобы сделать собранный пакет полностью готовым к установке на пользовательскую систему.<br>
 
'''%files''' — список файлов, необходимых для сборки пакета.<br>
 
'''%changelog''' — журнал изменений, произошедших с пакетом от релиза к релизу.
 
 
 
После того, как spec-файл будет готов, его необходимо переместить в каталог SPECS, а исходные коды собираемого пакета, тарболы, в каталог SOURCES.
 
 
 
'''Пример spec-файла'''
 
 
 
Name:          example
 
Version:        1.0
 
Release:        1%{?dist}
 
Summary:    Example projeckt
 
 
License:        GPLv3+
 
URL:            https://www.example.com/%{name}
 
Source0:        https://www.example.com/%{name}/releases/%{name}-%{version}.tar.gz
 
 
Patch0:        example.patch
 
 
BuildRequires:  gcc
 
BuildRequires:  make
 
 
%description
 
The long-tail description for our Example projeckt
 
 
%prep
 
%setup -q
 
 
%patch0
 
 
%build
 
make %{?_smp_mflags}
 
 
 
%install
 
%make_install
 
 
%files
 
%license LICENSE
 
%{_bindir}/%{name}
 
 
%changelog
 
* Tue Jan 13 2020 User Name <example@example.org> - 1.0-1
 
- First example package
 
 
 
==Сборка пакета==
 
  
Теперь можно приступать непосредственно к сборке пакета. Находясь в каталоге SPECS необходимо выполнить следующую команду:
+
Также RPM пакет можно создать с помощью утилиты '''mock''', подробнее '''[https://wiki.alter-os.ru/index.php?title=%D0%A1%D0%B1%D0%BE%D1%80%D0%BA%D0%B0_%D0%BF%D0%B0%D0%BA%D0%B5%D1%82%D0%BE%D0%B2_%D1%81_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E_mock#.D0.A3.D1.82.D0.B8.D0.BB.D0.B8.D1.82.D0.B0_Mock здесь]'''
  
# rpmbuild -ba ваш_spec_файл.spec
+
[[Категория:AlterOS 7.X]]
 
 
Результатом выполнения данной команды (если на предыдущих этапах всё было сделано правильно) будет собранный пакет, и в каталоге RPMS появятся бинарный пакет (ваш_пакет.rpm), а в каталоге SRPMS — исходник (ваш_пакет.src.rpm).
 
 
 
Если на выходе нужно получить только .rpm файл или только .src.rpm, то '''-ba''' необходимо заменить на '''-bb''' или '''-bs''' соответственно.
 

Текущая версия на 08:13, 22 февраля 2023

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

rpmbuild - утилита для сборки RPM пакетов.

Для сборки rpm-пакета в системе должен быть установлен rpm-build. Проверить его наличие можно следующей командой:

$ rpmbuild --version

Если система возвращает: rpmbuild: команда не найдена, значит rpm-build не установлен. Для установки необходимо выполнить следующую команду:

$ sudo yum install rpm-build

Структура команды для сборки должна выглядеть так:

rpmbuild [ПАРАМЕТР…]

Основные параметры сборки:

• -ba – Сборка исходного(.src.rpm) и двоичного(.rpm) пакетов

• -bb – Сборка только двоичного пакета(.rpm)

• -bs – Сборка только пакета с исходниками(.src.rpm)

Остальные параметры можно посмотреть с помощью команды:

$ rpmbuild --help

Сборка пакета

Установив необходимые библиотеки, а также положив в папку SOURCES - исходные файлы и в папку SPECS - файл конфигурации(.spec), можно приступать к сборке. Подробнее о том, что необходимо для сборки RPM пакета, можно узнать здесь

Находясь в каталоге SPECS необходимо выполнить следующую команду:

$ rpmbuild -ba ваш_spec_файл.spec

Результатом выполнения данной команды (если на предыдущих этапах всё было сделано правильно) будет собранный пакет, и в каталоге RPMS появятся бинарный пакет (ваш_пакет.rpm), а в каталоге SRPMS — исходник (ваш_пакет.src.rpm).

Если на выходе нужно получить только .rpm файл или только .src.rpm, то -ba необходимо заменить на -bb или -bs соответственно.

Также RPM пакет можно создать с помощью утилиты mock, подробнее здесь