Вопрос или проблема
Я довольно новый в сборке RPM и пытаюсь понять синтаксис “Provides” внутри файла спецификации без успеха. У меня есть следующий фрагмент файла спецификации для сборки RPM clamav:
Summary: Инструменты для конечного пользователя для сканера Clam Antivirus
Name: clamav
Version: 0.103.12
Release: 1%{?dist}
%package data
Summary: Данные вирусных сигнатур для сканера Clam Antivirus
Requires: ns-clamav-filesystem = %{version}-%{release}
Provides: data(clamav) = full
Provides: clamav-db = %{version}-%{release}
Obsoletes: clamav-db < %{version}-%{release}
BuildArch: noarch
%package update
Summary: Автообновление данных файлов сканера Clam Antivirus
Requires: ns-clamav-filesystem = %{version}-%{release}
Requires: ns-clamav-lib = %{version}-%{release}
Provides: data(clamav) = empty
Provides: clamav-data-empty = %{version}-%{release}
Obsoletes: clamav-data-empty < %{version}-%{release}
%package -n ns-clamd
Summary: Демон Clam AntiVirus
Requires: data(clamav)
Requires: ns-clamav-filesystem = %{version}-%{release}
Requires: ns-clamav-lib = %{version}-%{release}
Requires: coreutils
Requires(pre): shadow-utils
Я понимаю, что означает “Provides:” и что скобки рядом с provides указывают на установку модуля (для этого пакета). В моем случае %package data
(clamav-data), когда он установлен, также сообщит rpm/yum, что он предоставляет clamav-db
и data(clamav)
.
Мне неясно, что означает data(clamav)
. Как это соотносится с префиксом имени пакета clamav-data
? Не должно ли это быть clamav(data)
?
Как я могу найти data(clamav)
в yum/rpm? Я вижу это упомянуто в информации rpm, но когда я устанавливаю его, как я могу его искать, как это делаю с другими пакетами? Например, yum info <package>
# rpm -q --requires RPMS/x86_64/ns-clamd-0.103.12-1.el8.x86_64.rpm
/bin/sh
/bin/sh
/bin/sh
/bin/sh
coreutils
data(clamav)
# rpm -q RPMS/noarch/ns-clamav-data-0.103.12-1.el8.noarch.rpm --provides
clamav-db = 0.103.12-1.el8
config(ns-clamav-data) = 0.103.12-1.el8
data(clamav) = full
ns-clamav-data = 0.103.12-1.el8
Ответ или решение
Ваша просьба касается синтаксиса Provides
в файле спецификации RPM, особенно в контексте записи data(clamav)
, и вы задали важные вопросы относительно того, как это все связано и как с этим работать.
Понимание Provides
Запись Provides
в файле спецификации используется для указания, какие дополнительные "интерфейсы" или "пакеты" предоставляет ваш RPM-пакет. Это позволяет другим пакетам зависеть от этих "предоставляемых" компонентов, вместо того чтобы зависеть от конкретного имени пакета.
Разбор data(clamav)
Формат data(clamav)
— это специальный синтаксис, который зачастую используется для модульной системы или механизмов, таких как modular dependencies
, предлагаемых в некоторых дистрибутивах Linux. Это означает, что пакет предоставляет определенный модуль с именем clamav
. Например, если у вас есть несколько версий данных вирусов для ClamAV, вы можете использовать data(clamav)
для обозначения, что пакет содержит данные для модуля clamav
.
Отношение data(clamav)
и имени пакета clamav-data
таково:
clamav-data
— это имя пакета, как он будет виден пользователям и управлению пакетами.data(clamav)
— это "предоставляемый" интерфейс, который может быть использован другим пакетами, чтобы указать, что они зависят от данных для ClamAV.
В вашем примере название вроде clamav(data)
не очень подходит, так как data
здесь используется как пространство имен или модуль, и он указывается перед названием пакета для указания на принадлежность.
Поиск пакетов с использованием Provides
Если вы хотите найти пакет, который предоставляет data(clamav)
, вы можете воспользоваться следующей командой:
yum provides 'data(clamav)'
Эта команда покажет все пакеты, которые предоставляют data(clamav)
. Обратите внимание, что синтаксис команд может варьироваться в зависимости от дистрибутива и используемого пакетного менеджера (например, может использоваться dnf
вместо yum
в более новых версиях).
Также вы можете использовать команду rpm
, чтобы просмотреть предоставляемые интерфейсы:
rpm -q --provides <имя_пакета>
Это позволит вам увидеть, какие интерфейсы или модули предлагает этот пакет.
Заключение
Таким образом, Provides
в RPM спеках позволяет гибко управлять зависимостями между пакетами. Ваша запись data(clamav)
— это способ информировать систему пакетного управления о наличии определенного модуля, который может использоваться другими пакетами. Чтобы успешно работать с такими записями, важно понимать смысл предоставляемых модулей и как их искать через интерфейсы пакетного управления. В случае дальнейших вопросов, не стесняйтесь спрашивать!