Rhel

yum + 預先存在的 rpmdb 問題 + yum 抱怨已經安裝的軟體包

  • August 31, 2020

我們正在嘗試在 rhel 7.2 伺服器上安裝以下 rpm,但沒有成功

uname -r
3.10.0-327.el7.x86_64



yum install  python2-cryptography-1.7.2-2.el7.x86_64.rpm
Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager
.
.
.
--> Processing Dependency: python-cffi >= 1.4.1 for package: python2-cryptography-1.7.2-2.el7.x86_64
--> Processing Dependency: python-idna >= 2.0 for package: python2-cryptography-1.7.2-2.el7.x86_64
--> Processing Dependency: python-pyasn1 >= 0.1.8 for package: python2-cryptography-1.7.2-2.el7.x86_64
--> Processing Dependency: libcrypto.so.10(OPENSSL_1.0.2)(64bit) for package: python2-cryptography-1.7.2-2.el7.x86_64
--> Processing Dependency: python-ipaddress for package: python2-cryptography-1.7.2-2.el7.x86_64
--> Finished Dependency Resolution
Error: Package: python2-cryptography-1.7.2-2.el7.x86_64 (/python2-cryptography-1.7.2-2.el7.x86_64)
          Requires: python-ipaddress
Error: Package: python2-cryptography-1.7.2-2.el7.x86_64 (/python2-cryptography-1.7.2-2.el7.x86_64)
          Requires: libcrypto.so.10(OPENSSL_1.0.2)(64bit)
Error: Package: python2-cryptography-1.7.2-2.el7.x86_64 (/python2-cryptography-1.7.2-2.el7.x86_64)
          Requires: python-cffi >= 1.4.1
          Available: python-cffi-0.8.6-2.el7.x86_64 (local)
              python-cffi = 0.8.6-2.el7
Error: Package: python2-cryptography-1.7.2-2.el7.x86_64 (/python2-cryptography-1.7.2-2.el7.x86_64)
          Requires: python-pyasn1 >= 0.1.8
          Available: python-pyasn1-0.1.6-2.el7.noarch (local)
              python-pyasn1 = 0.1.6-2.el7
Error: Package: python2-cryptography-1.7.2-2.el7.x86_64 (/python2-cryptography-1.7.2-2.el7.x86_64)
          Requires: python-idna >= 2.0
You could try using --skip-broken to work around the problem
** Found 2 pre-existing rpmdb problem(s), 'yum check' output follows:
containerd.io-1.2.13-3.1.el7.x86_64 has installed conflicts containerd: containerd.io-1.2.13-3.1.el7.x86_64
containerd.io-1.2.13-3.1.el7.x86_64 has installed conflicts runc: containerd.io-1.2.13-3.1.el7.x86_64

因為我們得到pre-existing rpmdb problem(s)

我們執行了以下操作

package-cleanup --dupes
package-cleanup --cleandupes 

但問題仍然存在

還有我們發現 yum 需要的 python 包實際上是安裝的

例子

pip list | grep idna
idna                               2.10

pip list | grep  pyasn1
pyasn1                             0.1.9

所以我們不明白為什麼當 python 包已經安裝了正確的版本時 yum 會抱怨

您似乎正在使用pip以及yum安裝軟體包。安裝的軟體包對pip是不可見的yum,這將是您的安裝失敗的原因。

opensource.com 上的這篇文章很好地解釋了這些問題:以正確的方式管理 Python 包。我將在這裡總結關鍵資訊。

使用pip(with sudo pip install) 全域安裝包時,會將包安裝到通常由 OS 包管理器控制的系統級位置。但是,包管理器不知道該包,這使得安裝與已安裝包的數據庫不一致。在極端情況下,這可能會導致依賴 Python 的系統級應用程序(例如其yum自身)出現問題。

通常,在全域安裝 Python 模組時,您應該更喜歡系統的本機包管理器。這些包是用特定版本的作業系統測試的,所以它們應該更可靠。

如果你真的想用pip安裝包,推薦使用虛擬環境。使用virtualenv,您將獲得一個本地安裝,您可以根據需要進行修改。您可以安裝所需的任何軟體包,而不會危及整個系統的完整性。

與往常一樣,這兩種方法之間存在權衡。在繼續之前仔細評估它們。


在您的特定情況下,您可以通過刪除模組來繼續pip,然後通過重新安裝它yum。我不能保證這會奏效,因此請謹慎使用並首先測試該方法。

關於實際的軟體包,我能夠找到CentOS 7 的清單。在 RHEL 上,您可能需要 Software Collections 儲存庫來獲取此軟體包。再一次,在您決定繼續這條路線之前,請確保您確實通過某個渠道獲得了可用的 RPM 包。

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