Mysql

如何強制 rpm 在升級期間檢查依賴關係?

  • June 16, 2012

我們有一個目前版本的軟體,它依賴於 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

因此,我們的 requires 中的版本檢查非常無用,如果需要版本檢查,我們將需要在 requires 中使用 ‘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”。

我通過將此預安裝腳本添加到 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

您實際上可以通過使用解決它

衝突:MySQL 伺服器 < 5.5

引用自:https://unix.stackexchange.com/questions/40187