Что необходимо для сборки rpm пакета — различия между версиями
(Новая страница: «Сборка пакетов выполняется с помощью утилиты rpmbuild или mock. Также могут потребоваться пак…») |
DenisovaA (обсуждение | вклад) |
||
(не показано 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-файла== | ||
+ | |||
+ | Следующий необходимый элемент — это 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, то смотрите здесь