Что необходимо для сборки rpm пакета — различия между версиями

Материал из Wiki AlterOS
Перейти к: навигация, поиск
(Новая страница: «Сборка пакетов выполняется с помощью утилиты rpmbuild или mock. Также могут потребоваться пак…»)
 
 
(не показано 16 промежуточных версий 2 участников)
Строка 1: Строка 1:
Сборка пакетов выполняется с помощью утилиты rpmbuild или mock.
+
 
 +
== RPM пакет ==
 +
 
 +
RPM-пакет — это просто файл, содержащий другие файлы и информацию о них, необходимую для системы. Менеджер пакетов rpm использует эти метаданные для определения зависимостей, места установки файлов и другой информации.
 +
 
 +
Существует два типа rpm-пакетов:
 +
* SRPM (исходники с расширением .src.rpm)
 +
* RPM (бинарный файл с расширением .rpm)
 +
 
 +
Они имеют разное содержимое и служат для разных целей.
 +
 
 +
SRPM обязательно содержит исходный код, опционально — патчи и spec-файл, который описывает, как собрать исходный код в бинарный RPM.
 +
 
 +
Бинарный RPM содержит бинарные файлы, созданные из исходников и патчей, если таковые имелись.
 +
 
 +
''Сборку rpm-пакетов крайне нежелательно проводить с правами суперпользователя (root). Настоятельно рекомендуется все манипуляции производить с правами непривилегированного пользователя, поскольку при сборке с правами root имеется высокая вероятность повреждения системы.''
 +
 
 +
----
 +
 
 +
Сборка пакетов выполняется с помощью утилиты '''[https://wiki.alter-os.ru/index.php?title=%D0%A1%D0%B1%D0%BE%D1%80%D0%BA%D0%B0_rpm_%D0%BF%D0%B0%D0%BA%D0%B5%D1%82%D0%B0_%D1%81_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E_rpmbuild rpmbuild]''' или '''[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 mock]'''.
 
Также могут потребоваться пакеты gcc/g++ и make (если они ещё не установлены), поэтому для их установки выполняем команду:
 
Также могут потребоваться пакеты gcc/g++ и make (если они ещё не установлены), поэтому для их установки выполняем команду:
  
$ sudo yum install gcc make
+
$ sudo yum install gcc make
  
 
• gcc - компилятор языка программирования Си.
 
• gcc - компилятор языка программирования Си.
Строка 9: Строка 28:
  
 
• make - утилита для организации сборки нескольких файлов.  
 
• make - утилита для организации сборки нескольких файлов.  
 +
                                 
 +
==Подготовка структуры каталогов==
 +
 +
Для сборки пакетов в домашнем каталоге пользователя необходимо создать каталог '''rpmbuild''', в котором должны быть следующие подкаталоги: '''BUILD, RPMS, SOURCES, SPECS, SRPMS'''. Это можно сделать вручную или командой:
 +
 +
$ rpmdev-setuptree
 +
 +
''Если команда не выполняется, значит нужно перед этим установить пакет '''rpmdevtools''':''
 +
 +
$ sudo yum install rpmdevtools
 +
 +
или создать каталог с помощью команды:
  
 +
$ mkdir ~/rpmbuild
 +
$ mkdir ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
 +
 +
В текущем каталоге должна появиться папка rpmbuild — а в ней:
 +
 +
• BUILD — содержит все файлы, появляющиеся при сборке пакета.
 +
 +
• RPMS — здесь появятся готовые бинарные пакеты (расширение .rpm).
 +
 +
• SOURCES — здесь должны находиться исходники, из которых и будут собираться RPM-пакеты.
 +
 +
• SPECS — папка для хранения spec-файла, который описывает процесс сборки.
 +
 +
• SRPMS — здесь находятся пакеты с исходниками (расширение .src.rpm).
  
                                 
 
 
== Подготовка исходников ==
 
== Подготовка исходников ==
  
+
Исходники должны находиться в папке SOURCES и содержать '''тарболы(архивы)''' и '''патчи'''(при необходимости).
Исходники должны находиться в папке SOURCES и содержать тарболы(архивы) и патчи (при необходимости).
 
 
Тарболы содержат файл с исходным кодом программы (например, код, написанный на языке Си или С++ с соответствующим расширением) и makefile (файл, содержащий инструкцию по компиляции и линковке кода с помощью утилиты make).   
 
Тарболы содержат файл с исходным кодом программы (например, код, написанный на языке Си или С++ с соответствующим расширением) и makefile (файл, содержащий инструкцию по компиляции и линковке кода с помощью утилиты make).   
  
Строка 21: Строка 64:
  
 
Исходники также можно взять из открытого источника, указав при этом сайт в spec-файле.
 
Исходники также можно взять из открытого источника, указав при этом сайт в spec-файле.
Следующий необходимый элемент — это spec-файл, инструкция, по которой rpm-build производит сборку пакета. Spec-файл должен находиться в папке SPECS.
+
 
 +
==Подготовка spec-файла==
 +
 
 +
Следующий необходимый элемент — это spec-файл(файл конфигурации), инструкция, по которой происходит сборка пакета при помощи утилиты rpm-build или mock. Spec-файл должен находиться в папке SPECS.
 +
 
 +
Структура spec-файла подразделяется на заголовки и секции тела.
 +
 
 +
'''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-файла'''
 +
 
 +
Name:          example
 +
Version:        1.0
 +
Release:        1%{?dist}
 +
Summary:        Example project
 +
 +
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 project
 +
 +
%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
 +
 
 +
После того, как spec-файл будет готов, его необходимо переместить в каталог SPECS, а исходные коды собираемого пакета, тарболы, в каталог SOURCES.
 +
 
 +
Всё готово для сборки пакета.
 +
'''[https://wiki.alter-os.ru/index.php?title=%D0%A1%D0%B1%D0%BE%D1%80%D0%BA%D0%B0_rpm Если вы хотите собрать пакет с помощью rpmbuild, то смотрите здесь]'''
 +
 
 +
'''[https://wiki.alter-os.ru/index.php?title=%D0%A1%D0%B1%D0%BE%D1%80%D0%BA%D0%B0_rpm_%D0%BF%D0%B0%D0%BA%D0%B5%D1%82%D0%B0_%D1%81_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E_mock А если с помощью mock, то здесь]'''
 +
[[Категория:AlterOS 7.X]]

Текущая версия на 14:17, 29 ноября 2021

RPM пакет

RPM-пакет — это просто файл, содержащий другие файлы и информацию о них, необходимую для системы. Менеджер пакетов rpm использует эти метаданные для определения зависимостей, места установки файлов и другой информации.

Существует два типа rpm-пакетов:

  • SRPM (исходники с расширением .src.rpm)
  • RPM (бинарный файл с расширением .rpm)

Они имеют разное содержимое и служат для разных целей.

SRPM обязательно содержит исходный код, опционально — патчи и spec-файл, который описывает, как собрать исходный код в бинарный RPM.

Бинарный RPM содержит бинарные файлы, созданные из исходников и патчей, если таковые имелись.

Сборку rpm-пакетов крайне нежелательно проводить с правами суперпользователя (root). Настоятельно рекомендуется все манипуляции производить с правами непривилегированного пользователя, поскольку при сборке с правами root имеется высокая вероятность повреждения системы.


Сборка пакетов выполняется с помощью утилиты rpmbuild или mock. Также могут потребоваться пакеты gcc/g++ и make (если они ещё не установлены), поэтому для их установки выполняем команду:

$ sudo yum install gcc make

• gcc - компилятор языка программирования Си.

• g++ - компилятор языка программирования C++.

• make - утилита для организации сборки нескольких файлов.

Подготовка структуры каталогов

Для сборки пакетов в домашнем каталоге пользователя необходимо создать каталог rpmbuild, в котором должны быть следующие подкаталоги: BUILD, RPMS, SOURCES, SPECS, SRPMS. Это можно сделать вручную или командой:

$ rpmdev-setuptree

Если команда не выполняется, значит нужно перед этим установить пакет rpmdevtools:

$ sudo yum install rpmdevtools

или создать каталог с помощью команды:

$ mkdir ~/rpmbuild
$ mkdir ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}

В текущем каталоге должна появиться папка rpmbuild — а в ней:

• BUILD — содержит все файлы, появляющиеся при сборке пакета.

• RPMS — здесь появятся готовые бинарные пакеты (расширение .rpm).

• SOURCES — здесь должны находиться исходники, из которых и будут собираться RPM-пакеты.

• SPECS — папка для хранения spec-файла, который описывает процесс сборки.

• SRPMS — здесь находятся пакеты с исходниками (расширение .src.rpm).

Подготовка исходников

Исходники должны находиться в папке SOURCES и содержать тарболы(архивы) и патчи(при необходимости). Тарболы содержат файл с исходным кодом программы (например, код, написанный на языке Си или С++ с соответствующим расширением) и makefile (файл, содержащий инструкцию по компиляции и линковке кода с помощью утилиты make).

Сборка = компиляция (файл с исходным кодом -> объектные файлы) + линковка (объектные файлы -> исполняемый файл).

Исходники также можно взять из открытого источника, указав при этом сайт в spec-файле.

Подготовка spec-файла

Следующий необходимый элемент — это spec-файл(файл конфигурации), инструкция, по которой происходит сборка пакета при помощи утилиты rpm-build или mock. Spec-файл должен находиться в папке SPECS.

Структура spec-файла подразделяется на заголовки и секции тела.

Name — базовое имя собираемого пакета, которое должно совпадать с именем spec-файла.
Version — номер версии пакета.
Release — релиз-номер пакета. Обычно устанавливают начальное значение в 1%{? Dist} и увеличивают его с каждым новым выпуском пакета.
Summary — краткое однострочное описание пакета.
License — лицензия, согласно которой распространяется пакет.
URL — полный URL для получения дополнительной информации о программе. Чаще всего это веб-сайт исходного проекта.
Source0 — путь или URL-адрес заархивированных файлов исходного кода (тарболов). При необходимости можно добавить дополнительные источники SourceX, увеличивая число каждый раз, например: Source1, Source2, Source3 и т.д.
Patch0 — патчи и исправления для исходного кода. Патчей может быть несколько, как и исходников. Patch1, Patch2, Patch3 и т.д.
BuildArch — архитектура, под которую будет собран пакет. Если пакет не зависит от архитектуры, например, он написан полностью на интерпретируемом языке программирования, необходимо установить значение BuildArch: noarch. Если значение не установлено, то пакет наследует архитектуру системы, в которой он собирается.
BuildRequires — раздел, в котором через пробелы или запятые перечисляются все зависимые пакеты, необходимые для сборки нашего пакета.

%description — полное описание собираемого пакета. Может занимать несколько строк и может быть разбито на абзацы.
%prep — команда или серия команд для подготовки исходного кода к сборке, например, распаковка архива в Source0. Здесь могут находиться bash-скрипты.
%build — команды или серия команд из данной секции отвечают за непосредственную сборку пакета.
%install — команда или серия команд из данной секции отвечают за то, чтобы сделать собранный пакет полностью готовым к установке на пользовательскую систему.
%files — список файлов, необходимых для сборки пакета.
%changelog — журнал изменений, произошедших с пакетом от релиза к релизу.


Пример spec-файла

Name:           example
Version:        1.0
Release:        1%{?dist}
Summary:        Example project

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 project

%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

После того, как spec-файл будет готов, его необходимо переместить в каталог SPECS, а исходные коды собираемого пакета, тарболы, в каталог SOURCES.

Всё готово для сборки пакета. Если вы хотите собрать пакет с помощью rpmbuild, то смотрите здесь

А если с помощью mock, то здесь