如何强制rpm在升级过程中检查依赖关系?

如何强制rpm在升级过程中检查依赖关系?

我们的软件的当前版本依赖于 MySQL 5.1,这在 RPM 要求中指定。

对于我们的新版本,我们现在需要 MySQL 5.5 并在 RPM 要求中指定:

[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

然而,当我运行时,rpm -Uvh mypackage.rpm没有出现依赖项失败的异常,尽管我只安装了 MySQL 5.1:

[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

知道为什么 rpm 在升级过程中不会失败吗?

更新:

问题似乎是没有MySQL-server-community提供mysql-server版本号:

[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

因此,我们的require中的版本检查几乎没有用,如果需要版本检查,我们需要在require中使用“MySQL-server-community”,但MySQL 5.5只提供了MySQL-server的版本:

[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

因此,似乎无法解决该问题,因为 MySQL 5.1 还提供了没有版本的“MySQL-server”。

答案1

您实际上可以通过使用来解决它

冲突:MySQL 服务器 < 5.5

答案2

我通过将这个预安装脚本添加到 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

我没能让它在冲突中发挥作用。我在 上添加了冲突MySQL-server-community,但我的应用程序仍然安装。

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

当我安装了 MySQL-server-community 时:

[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

答案3

您还可以将一些Obsoletes语句放入 rpm 定义中。

相关内容