Isso se deve à seguinte linha na seção principal %files
do arquivo yum.spec
:
%(dirname %{compdir})
Significa que o rpm primeiro substitui %{compdir}
e então executa dirname
com o resultado como argumento em um shell. A saída é então adicionada à lista de arquivos.
A variável compdir é definida assim:
%define compdir %(pkg-config --variable=completionsdir bash-completion)
%if "%{compdir}" == ""
%define compdir "/etc/bash_completion.d"
%endif
Assumindo que bash-completion
esteja instalado no tempo de compilação (no sistema de compilação), pkg-config
, portanto, retorna talvez:
/usr/share/bash-completion/completions
E, assim, adicionando
dirname /usr/share/bash-completion/completions
-> /usr/share/bash-completion
para a lista de arquivos está ok (e faz sentido se o pacote yum também instalar ajudantes, por exemplo, em /usr/share/bash-completion/helpers
).
O caso problemático é quando o pacote bash-completion
não é instalado no tempo de compilação porque, em seguida, pkg-config
retorna a sequência vazia, ou seja:
compdir := /etc/bash_completion.d
=> dirname /etc/bash_completion.d
-> /etc
Assim, o diretório /etc
completo do buildroot do pacote é adicionado recursivamente à lista de arquivos.
Aparentemente, a caixa onde o pacote binário do CentOS yum foi construído não tem o pacote bash-completion
instalado. Na verdade, o RHEL (e, portanto, o CentOS) nem sequer fornece um pacote bash-completion
.
Isso explica por que os arquivos
/etc/yum/yum-cron.conf
/etc/yum/yum-cron-hourly.conf
são de propriedade dos pacotes yum
e yum-cron
.
(E só estão corretamente marcados pelo pacote yum-cron
.)
Adendo
A motivação para os condicionais é provavelmente a idéia de ter um arquivo de especificação yum para distribuições múltiplas baseadas em rpm (por exemplo, diferentes versões do Fedora, RHEL, ...). Conseqüentemente, o arquivo de especificação também condicionalmente depende de compilação e bash-completions
apenas em sistemas não-RHEL:
%if ! 0%{?rhel}
# we don't have this in rhel yet...
BuildRequires: bash-completion
%endif
A mudança que introduziu o dirname foi discutida na lista de discussão yum :
package also $(compdir)'s parent (not sure why, just in case)
A introdução da lógica condicional também foi discutida :
Oh, and instead of hardcoding the completions dir, it'd be better to get it from "pkg-config --variable=completionsdir bash-completion".
Correção de especificações
Uma correção é mover a chamada dirname
para o ramo condicional certo, por exemplo:
--- a/SPECS/yum.spec
+++ b/SPECS/yum.spec
@@ -28,7 +28,7 @@ BuildRequires: bash-completion
# disable broken /usr/lib/rpm/brp-python-bytecompile
%define __os_install_post %{nil}
-%define compdir %(pkg-config --variable=completionsdir bash-completion)
+%define compdir %(pkg-config --variable=completionsdir bash-completion | xargs -r dirname)
%if "%{compdir}" == ""
%define compdir "/etc/bash_completion.d"
%endif
@@ -451,7 +451,7 @@ exit 0
%dir %{_sysconfdir}/yum/fssnap.d
%dir %{_sysconfdir}/yum/vars
%config(noreplace) %{_sysconfdir}/logrotate.d/%{name}
-%(dirname %{compdir})
+%{compdir}
%dir %{_datadir}/yum-cli
%{_datadir}/yum-cli/*
%exclude %{_datadir}/yum-cli/completion-helper.py?