Mysql
如何強制 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
因此,我們的 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