% pre seção de my.rpm não é mais executada no RHEL 6.7

1

Existe um arquivo .spec para criar um pacote rpm para o nosso software. Na seção% pre do arquivo .spec, há uma verificação se uma versão principal anterior do nosso software está instalada. Se sim, a instalação é abortada com uma boa mensagem de erro. Nas versões anteriores do RHEL, tudo funcionava bem.

No RHEL 6.7 (e parece que também está no RHEL 6.5) o instalador do rpm não atende (ou ignora?) a seção% pre e reclama que "arquivo ... da instalação do nosso-software-servidor-23.01-1 .el6.i386 está em conflito com o arquivo do pacote our-software-server-22.07-1.el6.i386 "e, em seguida, a instalação é anulada. E há toneladas de tais arquivos. E este é exatamente o caso que nossa% pre section no arquivo .spec estava tomando cuidado.

O que foi alterado no processamento de rpm entre os lançamentos recentes? Eu não encontrei nada até agora.

rpm --version mostra 4.8.0

Qualquer ajuda é muito apreciada!

%pre server
if [ $1 -gt 1 ]; then
# Check for an unsupported major version upgrade
INSTALLED_VER=$(rpm -q our-software-server|sed -e 's/our-software-server-\([0-9]\+\).*//')
echo "Upgrade check:"
echo "installed  : $INSTALLED_VER"
echo "new version: %{majorver}"
if [ "$INSTALLED_VER" -ne "%{majorver}" ]; then
    echo
    echo "ERROR:"
    echo "An automatic RPM upgrade across major versions is not supported!"
    echo "Please refer to the Upgrade Notes on how to manually perform"
    echo "an upgrade and migrate the configuration data."
    echo
    exit 1
fi
...
    
por Dime 12.01.2016 / 15:29

1 resposta

2

O rpm-4.8.0 adicionou um bloqueio de arquivo global em /var/lib/rpm/.rpm.lock que impede que uma instalação do rpm seja repetida invocando o rpm em% post.

Veja      por que não consigo instalar pacotes com rpm? Eu recebo "bloqueio de transação"

Entretanto, há muito pouca necessidade de ter / usar um bloqueio global entre processos: rpm (e processos que dependem do rpmlib como o yum) dificilmente competem um bloqueio global.

Resposta curta: renomeie o arquivo de bloqueio antes de tentar rpm -q em% post e restaure o arquivo antes de sair% post. A janela de corrida de trava aberta por renomear o arquivo de bloqueio global é muito pequeno na prática.

Observe que o uso de dependências, em vez de invocar o rpm em% pre, é muito melhor solução do que você está tentando.

    
por 13.01.2016 / 09:25