2.11.2.3.2 Сборка мета-пакета
Скачать документКонсультации и оказание технической поддержки по данной статье не предоставляются.
Вы можете подробнее ознакомиться с принципами сборки пакетов для РЕД ОС, просмотрев наши обучающие видео:
на RuTube — Курс по принципам сборки пакетов для РЕД ОС;
в Яндекс.Дзен — Курс по принципам сборки пакетов для РЕД ОС;
в VK Видео — Курс по принципам сборки пакетов для РЕД ОС.
На наших каналах вы также сможете найти много другой полезной информации.
Определим, что такое «мета-пакет», хотя однозначного, стандартизованного толкования данного понятия не существует. В общих словах, мета-пакет — это «пустой» пакет. Под термином «пустой» понимают как отсутствие исходных файлов при сборке пакета (в спецификации нет директив Source), так и отсутствие файлов в архиве cpio двоичного пакета (блок %files пустой).
Может возникнуть вопрос: зачем такой пакет, который ничего не устанавливает в систему? Дело в том, что ценность пакета может быть не только в файлах, в нём содержащихся, но и в его метаданных. Иными словами, после инсталляции мета-пакета в базе данных установленных пакетов появляются записи относительно каких-то новых имён, зависимостей и прочего, имеющих значение в целом для системы.
В каких случаях это может понадобиться? Например, имеется программный проект, представленный большим числом RPM файлов, каждый из которых устанавливает в систему какой-то логически законченный набор файлов. Полная установка всего этого ПО потребует устанавливать все эти пакеты — для упрощения данной процедуры можно создать мета-пакет, который при установке всего лишь потребует от пакетного менеджера установить весь перечень пакетов этого программного проекта.
Например, имеется следующий список двоичных пакетов:
superproj-libs-1.0-1.el7 superproj-devel-1.0-1.el7 superproj-bin-1.0-1.el7 superproj-server-1.0-1.el7 superproj-client-1.0-1.el7 superproj-tools-1.0-1.el7 superproj-docs-1.0-1.el7
Создадим мета-пакет для установки всех этих пакетов. Спецификация для такого пакета будет выглядеть следующим образом:
1 %define debug_package %{nil}
2 Name: superproj-all
3 Version: 1.0
4 Release: 1%{?dist}
5 Summary: Meta-package for SuperProj
6 License: GPL2+
7 URL: https://super.proj/
8 Requires: superproj-libs = %{version}-%{release}
9 Requires: superproj-devel = %{version}-%{release}
10 Requires: superproj-bin = %{version}-%{release}
11 Requires: superproj-server = %{version}-%{release}
12 Requires: superproj-client = %{version}-%{release}
13 Requires: superproj-tools = %{version}-%{release}
14 Requires: superproj-docs = %{version}-%{release}
15
16 %description
17 Meta-package for installing all packages of SuperProj.
18
19 %prep
20
21 %build
22
23 %install
24
25 %files
26
27 %changelog
28 * Tue Jan 19 2021 Rodion Alexeev - 0:1.0-1
29 - Initial build
Здесь надо обратить внимание на строку № 1: %define в общем случае задаёт значение макроса, а в данном случае — переопределяет значение стандартного макроса debug_package, устанавливая его в пустое значение (%nil). Такая конструкция говорит сборочной системе, что не надо извлекать отладочную информацию из конечных файлов (в данном мета-пакете извлекать нечего и не из чего!) и не формировать debuginfo-пакет.
Блоки %prep, %build, %install, %files в данной спецификации пустые, но они всё равно должны быть явно обозначены.
После выполнения команды rpmbuild будет создан пакет под заданную архитектуру, который сам в виде файлов ничего не будет поставлять в систему, но потребует от пакетного менеджера установить все пакеты, которые у него перечислены в зависимостях (директивы Requires).
Дата последнего изменения: 10.09.2024
Если вы нашли ошибку, пожалуйста, выделите текст и нажмите Ctrl+Enter.