Existe uma ferramenta de análise de nome que faz parte do pacote oficial de ferramentas RPM?
Eu tenho uma lista de nomes de arquivos. Cada um é o nome do arquivo de um pacote RPM. Eu não tenho os pacotes reais, apenas os nomes dos arquivos. Para cada um, preciso extrair o nome e a versão do pacote ($ NAME e $ VERSION). A razão pela qual eu preciso disso é que estou escrevendo um script que garante que "yum install $ VERSION" instale $ VERSION. Isso faz parte de um sistema que cria pacotes e verifica se eles foram enviados corretamente.
A lista de nomes de arquivos é semelhante a:
$ cat /tmp/packages.txt
/home/builder/packages/testing-dev/CentOS/6/x86_64/emacs-mercurial-2.8-3.el6.x86_64.rpm
/home/builder/packages/testing-dev/CentOS/6/x86_64/emacs-mercurial-el-2.8-3.el6.x86_64.rpm
/home/builder/packages/testing-dev/CentOS/6/x86_64/mercurial-2.8-3.el6.x86_64.rpm
/home/builder/packages/testing-dev/CentOS/6/x86_64/mercurial-hgk-2.8-3.el6.x86_64.rpm
/home/builder/packages/testing-dev/CentOS/6/x86_64/python-redis-2.8.0-2.el6.noarch.rpm
/home/builder/packages/testing-dev/CentOS/6/x86_64/redis-2.6.16-1.el6.1.x86_64.rpm
/home/builder/packages/testing-dev/CentOS/6/x86_64/sei_dnsmaster-1.0-99.el6.x86_64.rpm
Encontrei o seguinte código, que é uma função BASH que executa a tarefa:
function parse_rpm() { RPM=$1;B=${RPM##*/};B=${B%.rpm};A=${B##*.};B=${B%.*};R=${B##*-};B=${B%-*};V=${B##*-};B=${B%-*};N=$B;echo "$N $V $R $A"; }
for i in $(</tmp/packages.txt) ; do
parse_rpm $i
done
Funciona. Na maioria das vezes. Existem algumas exceções:
$ parse_rpm CentOS/6/x86_64/sei_dnsmaster-1.0-99.el6.x86_64.rpm
sei_dnsmaster 1.0 99.el6 x86_64
Observe que ela não obteve a versão corretamente (deve ser 1.0-99)
Gostaria de saber (1) se existe uma ferramenta no pacote rpmdev que faz isso corretamente. (2) Caso contrário, existe um regex oficial que eu poderia usar. (3) Qual é o equivalente python desse regex?
Desde já, obrigado!