Sou relativamente novo na construção de rpm e tenho tentado entender a sintaxe de "Provides" dentro de um arquivo spec sem sucesso. Tenho o seguinte trecho de arquivo spec para construir clamav rpm:
Summary: End-user tools for the Clam Antivirus scanner
Name: clamav
Version: 0.103.12
Release: 1%{?dist}
%package data
Summary: Virus signature data for the Clam Antivirus scanner
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: Auto-updater for the Clam Antivirus scanner data-files
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: The Clam AntiVirus Daemon
Requires: data(clamav)
Requires: ns-clamav-filesystem = %{version}-%{release}
Requires: ns-clamav-lib = %{version}-%{release}
Requires: coreutils
Requires(pre): shadow-utils
Estou ciente do que o "Provides:" indica aqui e também que os parênteses ao lado de provides indicam a instalação de um módulo (para aquele pacote). No meu caso, %package data
(clamav-data) quando instalado, ele também informará ao rpm/yum que provides clamav-db
e data(clamav)
.
É o data(clamav)
i don't understand. Como ele se relaciona com o prefixo de nome de pacote padrão de clamav-data
? Não deveria ser clamav(data)
?
Como posso pesquisar isso data(clamav
) em yum/rpm? Posso ver isso mencionado nas informações do rpm, mas quando eu instalo, como posso pesquisar como faço em outros pacotes? Por exemployum 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
Provedores virtuais não estão necessariamente vinculados ao nome do pacote. Por exemplo, olhando para um módulo Python empacotado, vemos:
Ou similarmente para um módulo Perl:
Nesse caso, não acho que haja um "deveria" específico que alguém esteja seguindo; é simplesmente uma dependência virtual fornecida por vários pacotes, o que significa que outro pacote pode declarar uma dependência
data(clamav)
e ter esse requisito satisfeito por qualquer um desses pacotes.Você pode procurar seus
data(clamav)
provides como qualquer outra dependência. Por exemplo, para listar pacotes disponíveis em seus repositórios que fornecem este recurso:Que no meu sistema retorna:
Ou se você quiser pesquisar rpms instalados localmente:
As diretrizes de empacotamento do Fedora contêm várias notas sobre o uso de
Provides:
, embora nenhuma delas cubra explicitamente a situação sobre a qual você está perguntando.