Como forçar o rpm a verificar as dependências durante a atualização?

3

Nós temos uma versão atual do nosso software que tem uma dependência do MySQL 5.1 e isso é especificado nas exigências do RPM.

Para nossa nova versão, agora exigimos o MySQL 5.5 e especificamos isso no RPM requer:

[root@NEC03 ~]# rpm -q -R mypackage
/bin/sh  
/bin/sh  
/bin/sh  
/bin/sh  
/usr/bin/mysql  
config(flux) = 2.0.0.0-1
jdk >= 1.6
mysql-server >= 5.5.21
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1

No entanto, quando executo rpm -Uvh mypackage.rpm , não há exceções sobre dependências com falha, embora eu tenha apenas o MySQL 5.1 instalado:

[root@NEC03 ~]# rpm -qa | grep -i mysql
MySQL-server-community-5.1.51-1.rhel5
MySQL-shared-community-5.1.51-1.rhel5
MySQL-client-community-5.1.51-1.rhel5

Alguma idéia do motivo pelo qual o rpm não falha durante a atualização?

Atualização:

O problema parece ser que MySQL-server-community fornece mysql-server sem um número de versão:

[root@NEC03 ~]# rpm -q --provides MySQL-server-community
MySQL  
MySQL-server  
config(MySQL-server-community) = 5.1.51-1.rhel5
ha_innodb_plugin.so.0()(64bit)  
msqlormysql  
mysql  
mysql-server  
MySQL-server-community = 5.1.51-1.rhel5

Como resultado, a verificação de versão em nosso requer é bastante inútil e nós precisaremos usar 'MySQL-server-community' nas requisições se a verificação de versão for necessária, mas o MySQL 5.5 somente fornece o servidor MySQL com uma versão:

[root@NEC02 dependencies2.0]# rpm -q --provides MySQL-server
MySQL  
MySQL-server  
adt_null.so()(64bit)  
auth.so()(64bit)  
auth_socket.so()(64bit)  
auth_test_plugin.so()(64bit)  
config(MySQL-server) = 5.5.21-1.rhel5
libdaemon_example.so()(64bit)  
libtcmalloc_minimal.so.0()(64bit)  
msqlormysql  
mypluglib.so()(64bit)  
mysql  
mysql-server  
qa_auth_client.so()(64bit)  
qa_auth_interface.so()(64bit)  
qa_auth_server.so()(64bit)  
semisync_master.so()(64bit)  
semisync_slave.so()(64bit)  
MySQL-server = 5.5.21-1.rhel5

Como resultado, não parece ser possível corrigir o problema, já que o MySQL 5.1 também fornece 'servidor MySQL' sem uma versão.

    
por Wim Deblauwe 31.05.2012 / 12:05

3 respostas

1

Eu resolvi o problema adicionando este script de pré-instalação ao RPM:

# Check that MySQL version is not 5.1
rpm -qa | grep -i mysql-server.*5.1 > /dev/null
if [ $? -eq 0 ]
then
    echo "Flux can not be installed because MySQL 5.1 is still installed. Please upgrade MySQL to 5.5 or above."
    echo
exit 1
fi

Eu não consegui trabalhar com conflitos. Eu adiciono o conflito em MySQL-server-community , mas meu aplicativo ainda está instalado.

[root@NEC01 ~]# rpm -q --conflicts myapplication
MySQL-server-community <= 5.1

Enquanto eu tenho a comunidade do servidor MySQL instalada:

[root@NEC01 ~]# rpm -q --provides MySQL-server-community
MySQL  
MySQL-server  
config(MySQL-server-community) = 5.1.44-1.rhel5
ha_example.so.0()(64bit)  
ha_innodb_plugin.so.0()(64bit)  
msqlormysql  
mysql  
mysql-server  
MySQL-server-community = 5.1.44-1.rhel5
    
por 31.05.2012 / 14:18
1

Você pode resolvê-lo usando

Conflitos: MySQL-server < 5,5

    
por 01.06.2012 / 21:36
0

Você também pode colocar algumas instruções Obsoletes em sua definição de rpm.

    
por 10.06.2012 / 22:51

Tags